武汉首支数字产业基金成立,总规模10亿元
06-18
本文内容基于上海悠游版本。对其进行了优化,并添加了一些内容。
详情请参阅以下内容。 1、原链接 python+requests+excel+unittest+ddt 接口自动化数据驱动并生成html报告 2、修改前后框架差异 修改前:此处插入图片描述 修改后:此处插入图片描述 3、添加的主要修改内容:令牌关联(令牌获取和保存)添加:cookie关联(cookie获取和保存)添加:发送电子邮件(使用SMTP)修改:HTML报告模板中的样式和ddt用例的标题添加:徽标日志4.详细修改内容说明 4.1、增加token关联 4.1.1、获取token get_token.py 代码语言:python 代码运行次数:0 copy Cloud Studio code run import jsonimport requests from common.operation_json import OperattionJsonclass OperationHeader: def __init__(self, response) : # self.response = json.loads(response) self.response = response def get_response_token(self): ''' 获取登录返回的token ''' token = {"data":{"token":self.response ['data']['token']}} #token = {"token": self.response['data']['token']} return token def write_token(self): op_json = OpretionJson() op_json.write_data (self.get_response_token())def get_response_msg(self): response_msg = {"msg":self.response['msg']} #print("reponse_msg:", response_msg) return response_msg4.1.2,token保存操作_json.py 代码语言: python 代码运行次数: 0 复制 Cloud Studio 代码以运行 #coding:utf-8import jsonclass OpetionJson: def __init__(self,file_path=None): if file_path == None: self.file_path = '../case/cookie.json' else: self. file_path = file_path self.data = self.read_data() #读取json文件 def read_data(self): with open(self.file_path, 'r',encoding='utf-8') as fp: data1 = fp.read( ) if len(data1) > 0: data = json.loads(data1) else: data = {} return data #根据关键字获取数据 def get_data(self,id): print(type(self.data)) return self .data[id] #写入json def write_data(self,data): with open('../case/token.json','w') as fp: fp.truncate() # 先清除之前的数据,然后写入,这样每次登录时token都会不同 fp.write(json.dumps(数据))4.1.3。
token读取base_api.py在原代码中添加token读取,即在heasers中添加token 代码语言:python 代码运行次数:0 复制Cloud Studio代码运行 # 请求头 try: headers = eval(testdata["headers"] ) if testdata["token"] == "yes": op_json = OpretionJson("../case/token.json") token = op_json.get_data('data') headers = dict(headers, **token) print ("请求标头:", headers) log.info("请求标头:", headers) 除外: headers = None4.2.添加cookie关联的实现逻辑与获取token4.2 .1完全相同。 Cookie 获取 get_token.py。
直接添加到get_token.py即可获取token。这里的token格式需要根据你的业务进行修改。
代码语言:python 代码运行次数:0。复制Cloud Studio代码并运行 def get_response_cookie(self): cookie1 = requests.utils.dict_from_cookiejar(self.response.cookies) cookie = {"data":{"gfsessionid":cookie1["gfsessionid"]}} # {"data": {"token": self.response['data']['token']}} print("cookie:", cookie) return cookie def write_cookie (自身):op = OperationJson() op.write_mydata(self.get_response_cookie()) 4.2.2。
Cookie 保存 operation_json.py 直接将代码添加到 operation_json.py 语言:python 代码运行次数:0 复制 Cloud Studio 代码 run def write_mydata(self,data): with open('../case/cookie.json','w' ) as fp: fp.truncate() # 先清除之前的数据再写入,这样每次登录都会用到token 都是不一样的 fp.write(json.dumps(data)) 4.2.3 、cookie读取base_api.py直接在base_api.py中添加代码语言: python code run times: 0 Copy Cloud Studio code run try: headers = eval(testdata["headers"]) if testdata["cookie"] == "是”:op_json = OperaetionJson(“../case/cookie.json”) token1 = op_json.get_data('data') headers = dict(headers,**token1) print("请求头:", headers) log.info("请求头:", headers) except: headers = None4.3,添加邮件服务4.3.1,邮件服务包send_mail.py代码语言: python 代码运行次数:0 Copy Cloud Studio code run #coding=utf-8from email.mime.text import MIMETextimport timeimport smtplibimport getpassfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email import Encodersimport emailimport osdef sendmain(file_path,mail_to = 'xxxxx@.com'): mail_from = 'yyyyy@.com' f = open(file_path,'rb') mail_body=f.read() f.close() # msg = email.MIMEMultipart.MIMEMultipart() msg?? ??= MIMEMultipart() # 构造一个MIMEBase对象作为文件附件内容,并将其附加到根容器 contype = 'application/octet-stream' maintype, subtype = contype.split('/ ', 1 ) ## 读取文件内容并格式化 data = open(file_path, 'rb') #file_msg = email.MIMEBase.MIMEBase(maintype, subtype)file_msg = MIMEBase(maintype, subtype) file_msg.set_payload(data.read( )) data.close( ) #email.Encoders.encode_base64(file_msg)encoders.encode_base64(file_msg) ## 设置附件头 basename = os.path.basename (file_path) file_msg.add_header('Content-Disposition', 'attachment', filename = basename) msg??.attach(file_msg) print(u'消息附件添加成功') msg??1 = MIMEText(mail_body,_subtype='html',_charset ='utf-8') msg??.attach(msg1) if isinstance(mail_to,str): msg['To'] = mail_to else: msg['To'] = ','.join(mail_to) msg??['From '] = mail_from msg['Subject'] = u'xxxxxxxxx接口自动化测试' # 邮件标题 msg['date']=time.strftime('%Y-%m-%d-%H_%M_%S') print(msg['date']) smtp = smtplib.SMTP() smtp.connect('smtp..com') smtp.login('yyyyyy@.com','aaaaaaaaaa') # 这里的密码是第三方邮件客户端认证密码 smtp.sendmail(mail_from, mail_to, msg.as_string()) smtp.quit() print('邮件已发送出去')'''如果 __name__=='__main__': sendmain('../report/08-18-10_18_57_result.html')'''4.3.2.邮件调用 run_this.py 直接调用 main 函数入口中的代码 语言:python 代码运行次数:0 复制 Cloud Studio 代码并运行 sendmain(htmlreport, mail_to=['hhhhhhhh@.com', 'jjjjjj@.com' , 'uuuuuu@.com']) #如果有多个收件人,直接在列表中,用“,”分隔 4.4. 4.4.1. 修改html报告模板。修改报告中用例的标题,修改ddt源码 ① 原报告用例的标题:因为使用了ddt,所以ddt格式的用例标题为 以testapi编号开头的用例名称。
如果要自定义,需要修改ddt源码。此处插入图片描述 ② 修改报告标题: 此处插入图片描述 ③ 如何修改?可以参考之前的博文:如何修改unittest中使用ddt后生成的测试报告名称? (例如test_api_0改为test_api_0_titile) 代码语言:python 代码运行次数:0 Copy Cloud Studio code run def mk_test_name(name, value, index=0): """ 为测试用例生成一个新名称。
将采用原始测试名称并附加序数索引和字符串表示形式值,并通过用“_”替换无关字符将结果转换为有效的 python 标识符。如果处理非平凡的值,我们会避免执行 str(value) 。
问题是不同的运行可能有不同的名称,例如字典键的不同顺序(请参阅 PYTHONHASHSEED)或处理模拟对象。简单的标量值按原样传递。
“平凡”值是一个简单的标量,或者是仅由平凡值组成的元组或列表。 """ # 在索引前添加零以保持顺序 index = "{0:0{1}}".format(index + 1, index_len, ) if not is_trivial(value) and type(value) is not dict: # 其中添加,添加value字典判断 return "{0}_{1}_{2}".format(name, index, value.name) # 修改处,增加返回值 if type(value) is dict: # 其中add try: # 添加到哪里 value = value["name"] + "_" + value["function"] # 添加到哪里,execl 用例中的名称和函数必须正确现有的 headers,这里我将两个 headers 合并了(name 是我表中接口的名称,function 是表中接口的功能描述) except: # 添加的地方 return "{0}_{1}" 。
format(name.index) #添加位置 try: value = str(value) except UnicodeEncodeError: # python2 的后备 value = value.encode('ascii', 'backslashreplace') test_name = "{0}_{1} _{ 2}".format(name, index, value) # 修改的地方 return re.sub(r'\W|^(?=\d)', '_', test_name)4.4.2.添加用例执行 将以下内容添加到 HTMLTestRunner.py 以获取当前用例执行的负载机的用户名。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-21
06-18
06-17
06-06
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用