python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)

发布于:2024-10-24 编辑:匿名 来源:网络

本文内容基于上海悠游版本。对其进行了优化,并添加了一些内容。

详情请参阅以下内容。 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 以获取当前用例执行的负载机的用户名。

python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 武汉首支数字产业基金成立,总规模10亿元

    武汉首支数字产业基金成立,总规模10亿元

    据投资界(ID:pedaily)11月24日消息,近日,武汉首支数字产业基金成立。 由武汉青山国有资本投资运营控股集团有限公司、湖北高新投资引导基金管理有限公司、武汉富仁投资管理有限公司出资,总规模10亿元人民币。 据了解,未来该基金将主要投资于武汉市青山区发展的人工智能

    06-18

  • 青岛科技创新母基金投资华盖资本

    青岛科技创新母基金投资华盖资本

    据投资界3月18日消息,据青岛新闻网报道,青岛科技创新母基金投资子基金“青岛慧珠华盖”智能产业投资基金合伙企业(有限合伙)”(以下简称汇珠华盖)完成首期基金交割并正式落地城阳区。 此外,还有多只子基金已完成产业投资。 据介绍,慧珠华盖投资基金总规模4.45亿元,重

    06-17

  • 创维变形电视W82体验:我弯了,你想怎样就怎样吧

    创维变形电视W82体验:我弯了,你想怎样就怎样吧

    我们经常用“不变”来形容墨守成规、不知道如何适应的人或事。 在手机形态固化多年之后,我们欣喜地看到折叠屏的出现,为智能手机市场增添了一丝优雅。 去年年底,拥有电致变色后盖的Reno 5 Pro+艺术家限量版也让我们感受到了“变化”的魅力。 这也为手机的CMF提供了新的赛道

    06-21

  • 中小企业的好消息!阿里云大模型“统一钱文”已开启邀请测试

    中小企业的好消息!阿里云大模型“统一钱文”已开启邀请测试

    4月7日,阿里云正式宣布旗下大模型“统一钱文”已开放企业邀请测试。 现阶段该模式主要邀请企业用户进行体验测试。 符合条件的用户可以参与体验。 申请入口:统一钱文 新趋势来了。 人工智能正在从文本、语音、视觉等单模态智能向多模态智能转变。 基于模态融合的通用人工智能

    06-17

  • 清科季报:2022Q1新增资金募集总额同比小幅下降,其中外币资金大幅下滑

    清科季报:2022Q1新增资金募集总额同比小幅下降,其中外币资金大幅下滑

    01 市场总体情况 募资市场复苏趋势放缓,募集资金总额今年一季度募集资金同比小幅下降,受国际形势和国内疫情反复影响,受疫情影响,我国股权投资市场募资环境恢复速度放缓。 经历同比补充性增长后,今年一季度新增募集资金数量和规模在疫情防控常态化下逐渐回归正常水平,总

    06-18

  • 康希诺生物声明:尚未终止与加拿大的COVID-19疫苗合作项目

    康希诺生物声明:尚未终止与加拿大的COVID-19疫苗合作项目

    针对近期媒体报道加拿大国家研究委员会(NRC)终止与康希诺生物的疫苗合作生产项目,康希诺生物( .HK(85.SH))于8月27日晚间发布澄清公告,称合作并未终止;近期,公司管理层未接受任何有关Ad5-nCoV在加拿大临床试验的采访;公司目前正在与多个国家合作推进Ad5-nCoV的国际

    06-18

  • 字节跳动卷入虚拟女团风波

    字节跳动卷入虚拟女团风波

    字节跳动大概也没有想到,旗下虚拟女团的一名成员被踢出群,引起轩然大波。 事件始于几天前——5月10日,A-SOUL运营团队突然宣布,珈乐因身体和学业原因,将终止本周开始的每日直播(包括单播和群播)以及大部分偶像活动。 ,进入直播睡眠。 很快,在大家一脸茫然的情况下,#

    06-18

  • 据悉,百果园已敲定在深交所创业板上市

    据悉,百果园已敲定在深交所创业板上市

    全球最大的水果连锁企业“百果园”已敲定在深交所创业板上市。 今年11月,百塔与民生证券签署上市辅导协议,目前正在进行第一阶段辅导工作。

    06-17

  • 应用材料公司 (AMAT.US) 扩大与 ASTAR 微电子研究所

    应用材料公司 (AMAT.US) 扩大与 ASTAR 微电子研究所

    应用材料公司 (AMAT.US) 和微电子研究所 (IME) 的研究合作,微电子研究所是隶属于科学、技术和研究机构 (A新加坡*STAR)签署为期五年的研发合作协议,包括扩建新加坡微电子研究所先进封装中心。 总投资约2.1亿美元,旨在加速混合键合及其他新兴3D芯片集成技术的材料、设备和工

    06-08

  • 新思科技荣获台积电四项合作伙伴奖

    新思科技荣获台积电四项合作伙伴奖

    新思科技荣获接口IP、联合开发5纳米设计基础设施、联合开发VDE云解决方案、联合交付WoW设计解决方案四项合作伙伴奖亮点:新思科荣获“台积电合作伙伴奖”连续八年荣获台积电接口IP及工具支持年度大奖。 Synopsys 的数字和模拟定制平台和参考流程均经过 TSMC 认证,包括用于

    06-06

  • 糖纸公测丨轻松7号经络枪:定制黑色磁锥头,穴位按摩焕发青春

    糖纸公测丨轻松7号经络枪:定制黑色磁锥头,穴位按摩焕发青春

    本文作者为体验者@科技能量站,首发于糖纸公测。 大家好,这里是科技能源站。 在介绍今天的产品之前,我要特别感谢唐智中泰为本期提供的免费产品试用机会。 如果你想玩更多炫酷产品,记得关注糖智中泰!筋膜枪一直深受运动人士的喜爱,因为当他们发挥大量体力时,肌肉处于紧绷

    06-21

  • 李国庆和俞渝失去了所有尊严

    李国庆和俞渝失去了所有尊严

    语音播放文章内容由深声科技提供支持 您的浏览器不支持音频元素。 本月早些时候,当当网创始人李国庆在脱口秀节目中将水杯砸在地上,并指责当当网另一位创始人、他的妻子俞渝利用“阴谋”将他“踢出”当当网(详情见雷锋网)之前报道过)。 随后,“扔水杯”事件迅速在网络上

    06-18