Commit eec2ab68c93a9df6662533f5ad891f6a044da66d

Authored by lixi
1 parent e2cd7368

更新demo

commons/ConfigDB.py
@@ -2,11 +2,9 @@ @@ -2,11 +2,9 @@
2 # -*- coding: UTF-8 -*- 2 # -*- coding: UTF-8 -*-
3 import pymysql 3 import pymysql
4 import time 4 import time
5 -import commons.common as ca  
6 import json 5 import json
7 -from commons.Logging import Logger  
8 -# import chardet  
9 -log=Logger() 6 +import commons.common as ca
  7 +from commons.Logging import log
10 8
11 9
12 dbhost=ca.get_global_config('global_data','Database','dbhost') 10 dbhost=ca.get_global_config('global_data','Database','dbhost')
commons/Faker.py
1 -#!/usr/bin/python  
2 -# -*- coding: UTF-8 -*-  
3 -import random  
4 -from faker import Factory  
5 -  
6 -class random_data():  
7 -  
8 - def __init__(self, type='zh_CN'):  
9 - self.type = type  
10 - self.fake = Factory().create(self.type)  
11 -  
12 - def date(self):  
13 - "随机时间"  
14 - return self.fake.date(pattern="%Y-%m-%d")  
15 -  
16 - def name(self):  
17 - "随机姓名"  
18 - return self.fake.name()  
19 -  
20 - def identity_card(self):  
21 - "随机姓名"  
22 - return self.fake.ssn(min_age=18, max_age=90)  
23 -  
24 - def plate(self):  
25 - "随机车牌号"  
26 - return self.fake.license_plate()  
27 -  
28 - def plate_cn(self,plate_len=6):  
29 - char0='京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽赣粤青藏川宁琼'  
30 - char1='ABCDEFGHJKLMNPQRSTUVWXYZ'#车牌号中没有I和O,可自行百度  
31 - char2='1234567890'  
32 - len0=len(char0)-1  
33 - len1 = len(char1) - 1  
34 - len2 = len(char2) - 1  
35 - ########  
36 - code = ''  
37 - index0 = random.randint(0,len0 )  
38 - index1 = random.randint(0,len1)  
39 - code += char0[index0]  
40 - code += char1[index1]  
41 - for i in range(0, plate_len-1):  
42 - index2 = random.randint(1, len2)  
43 - code += char2[index2]  
44 - return(code)  
45 -  
46 - def country(self):  
47 - "随机国家代码"  
48 - return self.fake.country()  
49 -  
50 - def province(self):  
51 - "随机省份"  
52 - return self.fake.province()  
53 -  
54 - def city(self):  
55 - "随机城市"  
56 - return self.fake.city_suffix()  
57 -  
58 - def district(self):  
59 - "随机街道"  
60 - return self.fake.district()  
61 -  
62 - def address(self):  
63 - "随机地址全称"  
64 - return self.fake.address()  
65 -  
66 - def phone_number(self):  
67 - "随机手机号"  
68 - return self.fake.phone_number()  
69 -  
70 - def email(self):  
71 - "随机邮件"  
72 - return self.fake.email()  
73 -  
74 - def longitude(self):  
75 - "随机经度"  
76 - return self.fake.longitude()  
77 -  
78 - def latitude (self):  
79 - "随机维度"  
80 - return self.fake.latitude ()  
81 -  
82 - def credit_card_number (self):  
83 - "随机卡号"  
84 - return self.fake.credit_card_number ()  
85 -  
86 -  
87 -  
88 -a=random_data()  
89 -print(a.date())  
90 -print(a.name())  
91 -print(a.identity_card())  
92 -print(a.plate())  
93 -print(a.plate_cn(6))  
94 -print(a.country())  
95 -print(a.province())  
96 -print(a.city())  
97 -print(a.district())  
98 -print(a.address())  
99 -print(a.phone_number())  
100 -print(a.email())  
101 -print(a.longitude())  
102 -print(a.latitude())  
103 -print(a.credit_card_number())  
104 - 1 +#!/usr/bin/python
  2 +# -*- coding: UTF-8 -*-
  3 +import random
  4 +from faker import Factory
  5 +
  6 +class random_data():
  7 +
  8 + def __init__(self, type='zh_CN'):
  9 + self.type = type
  10 + self.fake = Factory().create(self.type)
  11 +
  12 + def date(self):
  13 + "随机时间"
  14 + return self.fake.date(pattern="%Y-%m-%d")
  15 +
  16 + def name(self):
  17 + "随机姓名"
  18 + return self.fake.name()
  19 +
  20 + def identity_card(self):
  21 + "随机证件"
  22 + return self.fake.ssn(min_age=18, max_age=90)
  23 +
  24 + def plate(self):
  25 + "随机车牌号"
  26 + return self.fake.license_plate()
  27 +
  28 + def plate_cn(self,plate_len=6):
  29 + "随机车牌号"
  30 + char0='京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽赣粤青藏川宁琼'
  31 + char1='ABCDEFGHJKLMNPQRSTUVWXYZ'#车牌号中没有I和O,可自行百度
  32 + char2='1234567890'
  33 + len0=len(char0)-1
  34 + len1 = len(char1) - 1
  35 + len2 = len(char2) - 1
  36 + ########
  37 + code = ''
  38 + index0 = random.randint(0,len0 )
  39 + index1 = random.randint(0,len1)
  40 + code += char0[index0]
  41 + code += char1[index1]
  42 + for i in range(0, plate_len-1):
  43 + index2 = random.randint(1, len2)
  44 + code += char2[index2]
  45 + return(code)
  46 +
  47 + def country(self):
  48 + "随机国家代码"
  49 + return self.fake.country()
  50 +
  51 + def province(self):
  52 + "随机省份"
  53 + return self.fake.province()
  54 +
  55 + def city(self):
  56 + "随机城市"
  57 + return self.fake.city_suffix()
  58 +
  59 + def district(self):
  60 + "随机街道"
  61 + return self.fake.district()
  62 +
  63 + def address(self):
  64 + "随机地址全称"
  65 + return self.fake.address()
  66 +
  67 + def phone_number(self):
  68 + "随机手机号"
  69 + return self.fake.phone_number()
  70 +
  71 + def email(self):
  72 + "随机邮件"
  73 + return self.fake.email()
  74 +
  75 + def longitude(self):
  76 + "随机经度"
  77 + return self.fake.longitude()
  78 +
  79 + def latitude (self):
  80 + "随机维度"
  81 + return self.fake.latitude ()
  82 +
  83 + def credit_card_number (self):
  84 + "随机卡号"
  85 + return self.fake.credit_card_number ()
  86 +
  87 +
  88 +
  89 +# a=random_data()
  90 +# print(a.date())
  91 +# print(a.name())
  92 +# print(a.identity_card())
  93 +# print(a.plate())
  94 +# print(a.plate_cn(6))
  95 +# print(a.country())
  96 +# print(a.province())
  97 +# print(a.city())
  98 +# print(a.district())
  99 +# print(a.address())
  100 +# print(a.phone_number())
  101 +# print(a.email())
  102 +# print(a.longitude())
  103 +# print(a.latitude())
  104 +# print(a.credit_card_number())
  105 +
commons/Logging.py
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*- 2 # -*- coding: UTF-8 -*-
3 import logging,os 3 import logging,os
  4 +# from mylog import mylogger,logg
  5 +
4 6
5 class Logger(): 7 class Logger():
6 8
7 def __init__(self, path=__name__,clevel = logging.ERROR,Flevel = logging.DEBUG,test = 'w'): 9 def __init__(self, path=__name__,clevel = logging.ERROR,Flevel = logging.DEBUG,test = 'w'):
8 current_path=os.path.dirname(os.path.dirname(__file__)) 10 current_path=os.path.dirname(os.path.dirname(__file__))
9 path=current_path+"/report"+"/test.log" 11 path=current_path+"/report"+"/test.log"
  12 + # setattr(mylogger, "logpath", path)
  13 + # logg.setting()
10 14
11 self.logger = logging.getLogger(path) 15 self.logger = logging.getLogger(path)
12 16
@@ -55,3 +59,6 @@ class Logger(): @@ -55,3 +59,6 @@ class Logger():
55 def critical(self,message): 59 def critical(self,message):
56 60
57 self.logger.critical(message) 61 self.logger.critical(message)
  62 +
  63 +
  64 +log=Logger()
58 \ No newline at end of file 65 \ No newline at end of file
commons/MySession.py
@@ -2,12 +2,12 @@ @@ -2,12 +2,12 @@
2 # -*- coding: UTF-8 -*- 2 # -*- coding: UTF-8 -*-
3 import requests 3 import requests
4 from commons import common as com 4 from commons import common as com
5 -from commons.Logging import Logger 5 +from commons.Logging import log
6 from commons.clientSession import cliSession 6 from commons.clientSession import cliSession
7 from commons.scripts.pwdCry import pwdCry 7 from commons.scripts.pwdCry import pwdCry
8 -log=Logger()  
9 8
10 -class mysession(): 9 +
  10 +class mysession(requests.Session):
11 "封装了requests的基类,以供后期统一使用" 11 "封装了requests的基类,以供后期统一使用"
12 12
13 url = "http://test.uap.diligrp.com/login/login.action" 13 url = "http://test.uap.diligrp.com/login/login.action"
@@ -38,24 +38,28 @@ class mysession(): @@ -38,24 +38,28 @@ class mysession():
38 38
39 def __init__(self): 39 def __init__(self):
40 "如下代码,可以通过配置文件来控制测试环境和灰度环境,http和https" 40 "如下代码,可以通过配置文件来控制测试环境和灰度环境,http和https"
  41 + super().__init__()
41 self.url = mysession.url.replace("http://test.", com.get_global_config("global_data", "environment", "en")) 42 self.url = mysession.url.replace("http://test.", com.get_global_config("global_data", "environment", "en"))
42 self.header = mysession.header 43 self.header = mysession.header
43 self.body = mysession.body 44 self.body = mysession.body
44 self.url_client = mysession.url_client.replace("http://test.", com.get_global_config("global_data", "environment", "en")) 45 self.url_client = mysession.url_client.replace("http://test.", com.get_global_config("global_data", "environment", "en"))
45 self.header_client = mysession.header_client 46 self.header_client = mysession.header_client
46 self.body_client = mysession.body_client 47 self.body_client = mysession.body_client
47 - self.timeout = (5, 5) 48 + self.timeout = (6,6)
48 self.max_retries = 3 49 self.max_retries = 3
49 self.keep_alive = False 50 self.keep_alive = False
50 self.ssl_verify = False 51 self.ssl_verify = False
51 self.proxies = None 52 self.proxies = None
52 # self.proxies={'http': 'http://localhost:8888', 'https': 'http://localhost:8888'} 53 # self.proxies={'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
  54 + self.myproxies={'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
53 self.allow_redirects = False 55 self.allow_redirects = False
54 self.firmid={"group":"1","hd":"2","cd":"3","qqhe":"4","mdj":"5","gy":"6","cc":"7","sg":"8","sy":"9"} 56 self.firmid={"group":"1","hd":"2","cd":"3","qqhe":"4","mdj":"5","gy":"6","cc":"7","sg":"8","sy":"9"}
  57 + self.market={"sy":"沈阳","heb":"哈尔滨","sg":"寿光","gy":"贵阳","cc":"长春","hs":"杭水","hg":"杭果"}
  58 + self.user={}
55 59
56 -  
57 - def cliLogin(self):  
58 - self.webHeaders, self.clientHeaders, self.userInfo = cliSession().loginUser() 60 + def cliLogin(self,user="sy_userName_01"):
  61 + self.webHeaders, self.clientHeaders, self.userInfo = cliSession().loginUser(user=user)
  62 + return self
59 63
60 def get_session(self, account, **kwargs): 64 def get_session(self, account, **kwargs):
61 "如下代码,可以通过配置文件来控制登录的账户session" 65 "如下代码,可以通过配置文件来控制登录的账户session"
@@ -63,69 +67,53 @@ class mysession(): @@ -63,69 +67,53 @@ class mysession():
63 com.get_global_config("global_data", "account", account).split("&")[0]) 67 com.get_global_config("global_data", "account", account).split("&")[0])
64 self.body = self.body.replace("111111", 68 self.body = self.body.replace("111111",
65 com.get_global_config("global_data", "account", account).split("&")[1]) 69 com.get_global_config("global_data", "account", account).split("&")[1])
66 - # requests.session()会话保持,比如使用session成功的登录了某个网站,  
67 - # 则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数  
68 self.se = requests.session() 70 self.se = requests.session()
69 - #更新cookie加入UAP_firmId  
70 co = requests.cookies.RequestsCookieJar() 71 co = requests.cookies.RequestsCookieJar()
71 - #backup:通过提前配置的方法更新市场id 72 + #加入UAP_firmId属性
72 firm=account.split("_")[0] 73 firm=account.split("_")[0]
73 co.set("UAP_firmId", self.firmid[firm]) 74 co.set("UAP_firmId", self.firmid[firm])
74 - #通过客户端登录的方法更新市场id  
75 - # co.set("UAP_firmId", str(self.get_login_info(account).json()["data"]["user"]["firmId"]))  
76 self.se.cookies.update(co) 75 self.se.cookies.update(co)
77 - # 使用session对象的方法POST/GET等 76 + # 进行登录请求
78 re = self.se.post(url=self.url, headers=self.header, data=self.body, proxies=self.proxies, **kwargs) 77 re = self.se.post(url=self.url, headers=self.header, data=self.body, proxies=self.proxies, **kwargs)
79 - #获取关键信息供其他接口header使用  
80 self.UAP_accessToken=self.se.cookies["UAP_accessToken"] 78 self.UAP_accessToken=self.se.cookies["UAP_accessToken"]
81 self.UAP_refreshToken=self.se.cookies["UAP_refreshToken"] 79 self.UAP_refreshToken=self.se.cookies["UAP_refreshToken"]
82 - # 返回session对象,供其他接口使用  
83 return self.se 80 return self.se
84 81
85 def get_login_info(self, account, **kwargs): 82 def get_login_info(self, account, **kwargs):
86 "用于获取用户信息" 83 "用于获取用户信息"
87 self.body_client.update({"userName":com.get_global_config("global_data", "account", account).split("&")[0]}) 84 self.body_client.update({"userName":com.get_global_config("global_data", "account", account).split("&")[0]})
88 self.body_client.update({"password":pwdCry(com.get_global_config("global_data", "account", account).split("&")[1])}) 85 self.body_client.update({"password":pwdCry(com.get_global_config("global_data", "account", account).split("&")[1])})
89 - # requests.session()会话保持,比如使用session成功的登录了某个网站,  
90 - # 则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数  
91 tmp = requests.post(url=self.url_client, headers=self.header_client, json=self.body_client, proxies=self.proxies, **kwargs) 86 tmp = requests.post(url=self.url_client, headers=self.header_client, json=self.body_client, proxies=self.proxies, **kwargs)
92 - # 使用session对象的方法POST/GET等  
93 - #获取关键信息供其他接口header使用  
94 - # self.UAP_accessToken=tmp.json()["data"]["accessToken"]  
95 - # self.UAP_refreshToken=tmp.json()["data"]["refreshToken"]  
96 - # 返回session对象,供其他接口使用  
97 return tmp 87 return tmp
98 88
99 def get_session_client(self, account, **kwargs): 89 def get_session_client(self, account, **kwargs):
100 "get_session和get_session_client的方法只能用一个" 90 "get_session和get_session_client的方法只能用一个"
101 self.body_client.update({"userName": com.get_global_config("global_data", "account", account).split("&")[0]}) 91 self.body_client.update({"userName": com.get_global_config("global_data", "account", account).split("&")[0]})
102 self.body_client.update( {"password": pwdCry(com.get_global_config("global_data", "account", account).split("&")[1])}) 92 self.body_client.update( {"password": pwdCry(com.get_global_config("global_data", "account", account).split("&")[1])})
103 - # requests.session()会话保持,比如使用session成功的登录了某个网站,  
104 - # 则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数  
105 - self.se = requests.session()  
106 - # 使用session对象的方法POST/GET等  
107 - self.re = self.se.post(url=self.url_client, headers=self.header_client, json=self.body_client, proxies=self.proxies, **kwargs)  
108 - #组装请求的cookie 93 + # 登录请求
  94 + self.re = super().post(url=self.url_client, headers=self.header_client, json=self.body_client, **kwargs)
  95 + #冗余登录账户信息
  96 + self.user[account]=self.re.json()["data"]["user"]
  97 + #配置cookie
109 co = requests.cookies.RequestsCookieJar() 98 co = requests.cookies.RequestsCookieJar()
110 - co.set("UAP_firmId", str(self.re.json()["data"]["user"]["firmId"]))  
111 - co.set("UAP_accessToken", self.re.json()["data"]["accessToken"])  
112 - co.set("UAP_refreshToken", self.re.json()["data"]["refreshToken"])  
113 - self.se.cookies.update(co)  
114 - # 返回session对象,供其他接口使用  
115 - return self.se  
116 - 99 + co.set("UAP_firmId", str(self.re.json()["data"]["user"]["firmId"]),domain=".diligrp.com")
  100 + co.set("UAP_accessToken", self.re.json()["data"]["accessToken"],domain=".diligrp.com")
  101 + co.set("UAP_refreshToken", self.re.json()["data"]["refreshToken"],domain=".diligrp.com")
  102 + self.cookies.update(co)
  103 + return self
117 104
118 def close_session(self): 105 def close_session(self):
119 "关闭session" 106 "关闭session"
120 - self.se.close() 107 + self.close()
121 108
122 def check_login(self, account, **kwargs): 109 def check_login(self, account, **kwargs):
123 "验证登录接口" 110 "验证登录接口"
124 self.body = self.body.replace("sg_wenze", 111 self.body = self.body.replace("sg_wenze",
125 com.get_global_config("global_data", "account", account).split("&")[0]) 112 com.get_global_config("global_data", "account", account).split("&")[0])
126 self.body = self.body.replace("111111", com.get_global_config("global_data", "account", account).split("&")[1]) 113 self.body = self.body.replace("111111", com.get_global_config("global_data", "account", account).split("&")[1])
127 - # POST请求,  
128 - re = self.se.post(url=self.url, headers=self.header, data=self.body, proxies=self.proxies, 114 + # POST请求
  115 + print(self.body)
  116 + re = super().post(url=self.url, headers=self.header, data=self.body.encode('utf-8'),
129 allow_redirects=False, **kwargs) 117 allow_redirects=False, **kwargs)
130 # 判断请求 118 # 判断请求
131 assert "UAP_accessToken" in re.headers["Set-Cookie"] 119 assert "UAP_accessToken" in re.headers["Set-Cookie"]
@@ -165,7 +153,7 @@ class mysession(): @@ -165,7 +153,7 @@ class mysession():
165 log.info("{0:=^86}".format('')) 153 log.info("{0:=^86}".format(''))
166 log.info("{}\n{}\n".format(url, kwargs)) 154 log.info("{}\n{}\n".format(url, kwargs))
167 # 进行请求 155 # 进行请求
168 - re = self.se.request(method , url, **kwargs, proxies=self.proxies, timeout=self.timeout) 156 + re = super().request(method , url, **kwargs,timeout=self.timeout)
169 return re 157 return re
170 158
171 159
@@ -176,11 +164,8 @@ class mysession(): @@ -176,11 +164,8 @@ class mysession():
176 :param \*\*kwargs: Optional arguments that ``request`` takes. 164 :param \*\*kwargs: Optional arguments that ``request`` takes.
177 :rtype: requests.Response 165 :rtype: requests.Response
178 """ 166 """
179 - # 记录日志  
180 - log.info("{0:=^86}".format(''))  
181 - log.info("{}\n{}\n".format(url, kwargs))  
182 # 进行请求 167 # 进行请求
183 - re = self.se.get(url, **kwargs, proxies=self.proxies, timeout=self.timeout) 168 + re = super().get(url, **kwargs)
184 return re 169 return re
185 170
186 def post(self, url, data=None, json=None, **kwargs): 171 def post(self, url, data=None, json=None, **kwargs):
@@ -192,11 +177,8 @@ class mysession(): @@ -192,11 +177,8 @@ class mysession():
192 :param \*\*kwargs: Optional arguments that ``request`` takes. 177 :param \*\*kwargs: Optional arguments that ``request`` takes.
193 :rtype: requests.Response 178 :rtype: requests.Response
194 """ 179 """
195 - # 记录日志  
196 - log.info("{0:=^86}".format(''))  
197 - log.info("{}\n{}\n{}\n{}".format(url, data, json, kwargs))  
198 # 进行请求 180 # 进行请求
199 - re = self.se.post(url, data=data, json=json, proxies=self.proxies, **kwargs, timeout=self.timeout) 181 + re = super().post(url, data=data, json=json, **kwargs)
200 return re 182 return re
201 183
202 def options(self, url, **kwargs): 184 def options(self, url, **kwargs):
@@ -280,12 +262,15 @@ class mysession(): @@ -280,12 +262,15 @@ class mysession():
280 262
281 my = mysession() 263 my = mysession()
282 my.set_mark() 264 my.set_mark()
283 -my.cliLogin()  
284 -s1 = my.get_session_client("sg_user01")  
285 -s2 = my.get_session_client("sg_user02")  
286 -s3 = my.get_session_client("sg_user01")  
287 -# s3= my.get_session_client("sg_user02")  
288 -# sg01=my.get_session_client("sg_user01")  
289 -# sg02=my.get_session_client("sg_user02")  
290 -# sy=my.get_session_client("sy_user01") 265 +
  266 +# 沈阳客户端session
  267 +sessionSy = mysession().cliLogin("sy_userName_01")
  268 +# 哈尔滨客户端session
  269 +sessionHeb = mysession().cliLogin("hd_userName_01")
  270 +# print(sessionSy.userInfo)
  271 +# print(sessionHeb.userInfo)
  272 +
  273 +sy1=mysession().get_session_client("sy_user01")
  274 +heb=mysession().get_session_client("heb_user01")
  275 +# sg=mysession().get_session_client("sg_user01")
291 276
commons/SendEmail.py
@@ -7,8 +7,7 @@ from email.header import Header @@ -7,8 +7,7 @@ from email.header import Header
7 from email.mime.text import MIMEText 7 from email.mime.text import MIMEText
8 from email.mime.image import MIMEImage 8 from email.mime.image import MIMEImage
9 from email.mime.application import MIMEApplication 9 from email.mime.application import MIMEApplication
10 -from commons.Logging import Logger  
11 -log=Logger() 10 +from commons.Logging import log
12 11
13 def send_email_text(): 12 def send_email_text():
14 # 1. 编写邮件内容(Email邮件需要专门的MIME格式) 13 # 1. 编写邮件内容(Email邮件需要专门的MIME格式)
@@ -26,14 +25,16 @@ def send_email_text(): @@ -26,14 +25,16 @@ def send_email_text():
26 smtp.quit() 25 smtp.quit()
27 26
28 27
29 -def send_email(send_file,send_to=["lixi@diligrp.com"]): 28 +def send_email(send_file,send_to=["lixi@diligrp.com"],cc_to=["lixi@diligrp.com"]):
30 29
31 log_path=os.path.dirname(os.path.dirname(__file__)) 30 log_path=os.path.dirname(os.path.dirname(__file__))
32 log_path=log_path+"/report/test.log" 31 log_path=log_path+"/report/test.log"
33 send_msg=(",".join(str(i) for i in send_to)) 32 send_msg=(",".join(str(i) for i in send_to))
  33 + cc_msg = (",".join(str(j) for j in cc_to))
34 msg = MIMEMultipart() # 混合MIME格式 34 msg = MIMEMultipart() # 混合MIME格式
35 msg['From'] = 'autotest@diligrp.com' # 发件人 35 msg['From'] = 'autotest@diligrp.com' # 发件人
36 msg['To'] = send_msg # 收件人 36 msg['To'] = send_msg # 收件人
  37 + msg['cc'] = cc_msg # 抄送人
37 msg['Subject'] = Header('接口测试报告', 'utf-8') # 中文邮件主题,指定utf-8编码 38 msg['Subject'] = Header('接口测试报告', 'utf-8') # 中文邮件主题,指定utf-8编码
38 39
39 text = MIMEText('this is a test email', 'plain', 'utf-8') 40 text = MIMEText('this is a test email', 'plain', 'utf-8')
@@ -54,7 +55,7 @@ def send_email(send_file,send_to=["lixi@diligrp.com"]): @@ -54,7 +55,7 @@ def send_email(send_file,send_to=["lixi@diligrp.com"]):
54 try: 55 try:
55 smtp = smtplib.SMTP_SSL('smtp.exmail.qq.com') # smtp服务器地址 使用SSL模式 56 smtp = smtplib.SMTP_SSL('smtp.exmail.qq.com') # smtp服务器地址 使用SSL模式
56 re=smtp.login('autotest@diligrp.com', 'MvkuGGCfMtAdbJvE') # 用户名和密码 57 re=smtp.login('autotest@diligrp.com', 'MvkuGGCfMtAdbJvE') # 用户名和密码
57 - smtp.sendmail("autotest@diligrp.com", send_to, msg.as_string()) 58 + smtp.sendmail("autotest@diligrp.com", send_to+cc_to, msg.as_string())
58 print(re) 59 print(re)
59 except Exception as e: 60 except Exception as e:
60 log.error(str(e)) 61 log.error(str(e))
commons/clientSession.py
@@ -16,29 +16,27 @@ from commons.scripts.pwdCry import pwdCry @@ -16,29 +16,27 @@ from commons.scripts.pwdCry import pwdCry
16 16
17 class cliSession(object): 17 class cliSession(object):
18 def __init__(self): 18 def __init__(self):
19 - rConf = readConfig()  
20 -  
21 - def __init__(self):  
22 - rC = readConfig()  
23 - self.userName = rC.returnOptionsItems("loginInfo","userName")  
24 - self.password = pwdCry(rC.returnOptionsItems("loginInfo","password"))  
25 - self.loginUrl = rC.returnOptionsItems("host","uapHost")+"/api/authenticationApi/loginWeb"  
26 - self.loginData = {"userName":self.userName,"password":self.password} 19 + self.rC = readConfig()
27 self.webHeaders = {"X-Requested-With":"XMLHttpRequest", 20 self.webHeaders = {"X-Requested-With":"XMLHttpRequest",
28 "Content-Type":"application/x-www-form-urlencoded", 21 "Content-Type":"application/x-www-form-urlencoded",
29 "Cookie":"UAP_accessToken=${UAP_accessToken}; UAP_refreshToken=${UAP_refreshToken};UAP_firmId=${UAP_firmId}"} 22 "Cookie":"UAP_accessToken=${UAP_accessToken}; UAP_refreshToken=${UAP_refreshToken};UAP_firmId=${UAP_firmId}"}
30 -  
31 self.clientHeaders={"UAP_accessToken":"${UAP_accessToken}", 23 self.clientHeaders={"UAP_accessToken":"${UAP_accessToken}",
32 "UAP_refreshToken":"${UAP_refreshToken}", 24 "UAP_refreshToken":"${UAP_refreshToken}",
33 "UAP_firmId":"${UAP_firmId}", 25 "UAP_firmId":"${UAP_firmId}",
34 "Cookie":"UAP_accessToken=${UAP_accessToken}; UAP_refreshToken=${UAP_refreshToken}", 26 "Cookie":"UAP_accessToken=${UAP_accessToken}; UAP_refreshToken=${UAP_refreshToken}",
35 "Content-Type":"application/json"} 27 "Content-Type":"application/json"}
36 28
37 - def loginUser(self):  
38 - """  
39 29
  30 + def loginUser(self,user="sy_userName_01"):
  31 + """
40 :return: 32 :return:
41 """ 33 """
  34 + # 登录信息准备
  35 + self.userName,self.password = self.rC.returnOptionsItems("loginInfo",user).split(",")
  36 + self.password = pwdCry(self.password)
  37 + self.loginUrl = self.rC.returnOptionsItems("host","uapHost")+"/api/authenticationApi/loginWeb"
  38 + self.loginData = {"userName":self.userName,"password":self.password}
  39 +
42 # 返回登录信息,以及可用headers,clientHeaders用户客户端操作header,webHeaders用于web页面使用headers 40 # 返回登录信息,以及可用headers,clientHeaders用户客户端操作header,webHeaders用于web页面使用headers
43 res = requests.post(url=self.loginUrl,data=json.dumps(self.loginData)) 41 res = requests.post(url=self.loginUrl,data=json.dumps(self.loginData))
44 # print(res.json()) 42 # print(res.json())
@@ -51,3 +49,6 @@ class cliSession(object): @@ -51,3 +49,6 @@ class cliSession(object):
51 self.clientHeaders["UAP_firmId"] = str(UAP_firmId) 49 self.clientHeaders["UAP_firmId"] = str(UAP_firmId)
52 self.clientHeaders["Cookie"] = clientHeadersCookie 50 self.clientHeaders["Cookie"] = clientHeadersCookie
53 return self.webHeaders,self.clientHeaders,res.json() 51 return self.webHeaders,self.clientHeaders,res.json()
  52 +
  53 +# a,b,c = cliSession().loginUser()
  54 +# print(c)
54 \ No newline at end of file 55 \ No newline at end of file
commons/common.py
@@ -4,8 +4,7 @@ import os @@ -4,8 +4,7 @@ import os
4 import configparser 4 import configparser
5 import unittest 5 import unittest
6 from discover import DiscoveringTestLoader 6 from discover import DiscoveringTestLoader
7 -from commons.Logging import Logger  
8 -log=Logger() 7 +from commons.Logging import log
9 8
10 9
11 def get_global_config(file,section, key): 10 def get_global_config(file,section, key):
@@ -83,11 +82,15 @@ def run_one(name): @@ -83,11 +82,15 @@ def run_one(name):
83 runner = unittest.TextTestRunner() 82 runner = unittest.TextTestRunner()
84 runner.run(test_suite) 83 runner.run(test_suite)
85 84
  85 +
86 def run_list(name): 86 def run_list(name):
87 test_suite = unittest.TestSuite() 87 test_suite = unittest.TestSuite()
88 test_suite.addTests(name) 88 test_suite.addTests(name)
89 #显示运行用例 89 #显示运行用例
90 print("运行用例为{}".format(test_suite)) 90 print("运行用例为{}".format(test_suite))
  91 + # with open(file="E:\\PycharmWorkspace\\jmsf-re-local\\report\\test.log", mode="a", encoding="utf-8") as file:
  92 + # runner = unittest.TextTestRunner(stream=file,verbosity=2)
  93 + # runner.run(test_suite)
91 runner = unittest.TextTestRunner() 94 runner = unittest.TextTestRunner()
92 runner.run(test_suite) 95 runner.run(test_suite)
93 96
@@ -112,4 +115,8 @@ def run_Name(name): @@ -112,4 +115,8 @@ def run_Name(name):
112 runner = unittest.TextTestRunner() 115 runner = unittest.TextTestRunner()
113 runner.run(test_cases) 116 runner.run(test_cases)
114 117
115 -# print(get_market_config("test_config_hg2","loginInfo","userName"))  
116 \ No newline at end of file 118 \ No newline at end of file
  119 +def mylog(func):
  120 + def RebackTest(self):
  121 + log.info("{}".format(func.__name__))
  122 + return func(self)
  123 + return RebackTest
117 \ No newline at end of file 124 \ No newline at end of file
commons/scripts/dealContentType.py
@@ -9,10 +9,10 @@ @@ -9,10 +9,10 @@
9 用于hearders中Content-Type格式处理 9 用于hearders中Content-Type格式处理
10 """ 10 """
11 11
12 -def jsonCT(headers=None): 12 +def jsonCode(headers={}):
13 headers["Content-Type"] = "application/json; charset=UTF-8" 13 headers["Content-Type"] = "application/json; charset=UTF-8"
14 return headers 14 return headers
15 15
16 -def urlCode(headers=None): 16 +def urlCode(headers={}):
17 headers["Content-Type"] = "application/x-www-form-urlencoded" 17 headers["Content-Type"] = "application/x-www-form-urlencoded"
18 return headers 18 return headers
19 \ No newline at end of file 19 \ No newline at end of file
commons/scripts/readConf.py
@@ -19,7 +19,7 @@ class readConfig(object): @@ -19,7 +19,7 @@ class readConfig(object):
19 # 按市场读取配置文件数据 19 # 按市场读取配置文件数据
20 self.conf = configparser.ConfigParser() 20 self.conf = configparser.ConfigParser()
21 self.evn_name = os.name 21 self.evn_name = os.name
22 - self.file_name = r'test_config_hg.conf' 22 + self.file_name = r'conf_test.conf'
23 self.relative_path = r'/config/marketConfig/' 23 self.relative_path = r'/config/marketConfig/'
24 self.file_path = os.path.abspath( 24 self.file_path = os.path.abspath(
25 os.path.join(os.path.dirname(__file__), "../../")) + self.relative_path + self.file_name 25 os.path.join(os.path.dirname(__file__), "../../")) + self.relative_path + self.file_name
@@ -53,7 +53,7 @@ class readConfig(object): @@ -53,7 +53,7 @@ class readConfig(object):
53 print(self.file_path) 53 print(self.file_path)
54 return self.file_path 54 return self.file_path
55 55
56 -# rc = readConfig() 56 +rC = readConfig()
57 # rc.returnSections() 57 # rc.returnSections()
58 # rc.returnOptions("loginInfo") 58 # rc.returnOptions("loginInfo")
59 # rc.returnOptionsInfo("loginInfo") 59 # rc.returnOptionsInfo("loginInfo")
config/global_data.conf
1 # -*- coding: UTF-8 -*- 1 # -*- coding: UTF-8 -*-
2 2
  3 +[market]
  4 +#该字段存放市场的缩略名称,运行指定市场的用例,目前为着冗余配置
  5 +#list为空时,默认运行所有市场用例,需要指定市场时,参考demo格式
  6 +list=[]
  7 +demo=["sy","heb"]
  8 +
3 [account] 9 [account]
4 #取值字段根据市场拼音首字母缩写组合而成,尾号数字按照01-99叠加 10 #取值字段根据市场拼音首字母缩写组合而成,尾号数字按照01-99叠加
5 #账户和密码通过&符号隔开 11 #账户和密码通过&符号隔开
  12 +sy_user01=sy_chen&123456
  13 +sy_user02=sygangda&111111
  14 +heb_user01=哈尔滨田太子&a123456
  15 +heb_user02=sy_wenze&111111
6 sg_user01=sg_wenze&111111 16 sg_user01=sg_wenze&111111
7 -sg_user02=sgwanggang&111111  
8 -sg_user03=hz_wenze&111111  
9 -sy_user01=sy_wenze&111111  
10 17
11 [userId] 18 [userId]
12 #冗余配置字段,可不配置 19 #冗余配置字段,可不配置
@@ -16,21 +23,15 @@ user03=256 @@ -16,21 +23,15 @@ user03=256
16 23
17 [email] 24 [email]
18 #为空时[]不发邮件,若要发邮件,参考demo 25 #为空时[]不发邮件,若要发邮件,参考demo
19 -list=["lixi@diligrp.com","175930106@qq.com"]  
20 -demo=["tg@diligrp.com","175930106@qq.com"] 26 +to_list=["tianlichang@diligrp.com","liaokaihua@diligrp.com"]
  27 +cc_list=["lixi@diligrp.com","liujiqiang@diligrp.com","wenleiming@diligrp.com"]
  28 +demo=["lixi@diligrp.com","liujiqiang@diligrp.com","wenleiming@diligrp.com","tg@diligrp.com"]
21 29
22 [mark] 30 [mark]
23 #为空时[]运行所有用例,若要运行指定用例,参考demo 31 #为空时[]运行所有用例,若要运行指定用例,参考demo
24 list=[] 32 list=[]
25 -demo=["p1","P2",1,"test"] 33 +demo=["heb1","P3","v1.6","沈阳",None]
26 34
27 -[Database]  
28 -dbhost=10.35.100.34  
29 -dbport=3306  
30 -dbname=dili_trace  
31 -dbuser=root  
32 -dbpassword=123456  
33 -dbcharset=utf8  
34 35
35 [environment] 36 [environment]
36 #格式只能为一下几种 37 #格式只能为一下几种
@@ -41,6 +42,21 @@ dbcharset=utf8 @@ -41,6 +42,21 @@ dbcharset=utf8
41 en=http://test. 42 en=http://test.
42 43
43 44
  45 +[Database]
  46 +dbhost=10.35.100.34
  47 +dbport=3306
  48 +dbname=dili_jmsf
  49 +dbuser=root
  50 +dbpassword=123456
  51 +dbcharset=utf8
  52 +
  53 +
  54 +[host]
  55 +gateway=test.gateway.diligrp.com:8285
  56 +
  57 +
  58 +
  59 +
44 60
45 61
46 62