基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言
在上一篇《基于Python接口自动化测试框架(初级篇)附源码》讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构:
可以看出testcase下有很多测试用例,并且每个测试用例都写了请求地址,请求参数,请求头等相关数据,还有一些断言的数据。如果接口很多的话,这样每个case写都要写,导致后期工作量大,维护起来不方便。
针对上述情况,引入python一个非常好用的第三方库ddt,其作用就是数据驱动,将数据与代码分离,可以把所有的接口相关的测试用例数据存放在excel里,然后维护一个API文件,这样做就不需要写很多case代码。
框架设计思路
1.大致处理流程:
2.接口自动化测试框架处理过程:
- 首先,测试数据初始化,维护的业务数据到数据库中,也就是截图中的第一步
- 第二步,用Excel维护一份接口测试用例数据(用例id、请求方法、请求参数、请求头、请求类型、返回数据,测试结果等)。
- 测试框架只需写一份调用API的代码,读取第二步的维护的接口测试数据,然后向被测系统发送请求,也就是图中的第三步。
- 当调用接口的时候,会查询数据库,就是第四步。
- 测试框架根据接口返回的数据和Excel的数据进行比较,生成最终测试结果写入Excel中,并且生成测试报告。
大致流程:初始化测试数据→读取测试数据→发送请求→写入测试结果→生成测试报告→发送测试邮件。
如图:
框架结构
这里就不重复介绍了,可以参考初级篇,对比一下。
运行程序:
............... Time Elapsed: 0:00:01.106878 邮件发送成功!
测试报告:
PS:右侧那个饼图是鼠标放上去自动会放大。
邮件模块
import os,sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) from config import setting import smtplib from main.newReport import new_report import configparser from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_mail(file_new): """ 定义发送邮件 :param file_new: :return: 成功:打印发送邮箱成功;失败:返回失败信息 """ f = open(file_new,'rb') mail_body = f.read() f.close() #发送附件 con = configparser.ConfigParser() con.read(setting.TEST_CONFIG,encoding='utf-8') report = new_report(setting.TEST_REPORT) sendfile = open(report,'rb').read() # --------- 读取config.ini配置文件 --------------- HOST = con.get("user","HOST_SERVER") SENDER = con.get("user","FROM") RECEIVER = con.get("user","TO") USER = con.get("user","user") PWD = con.get("user","password") SUBJECT = con.get("user","SUBJECT") att = MIMEText(sendfile,'base64','utf-8') att["Content-Type"] = 'application/octet-stream' att.add_header("Content-Disposition", "attachment", filename=("gbk", "", report)) msg = MIMEMultipart('related') msg.attach(att) msgtext = MIMEText(mail_body,'html','utf-8') msg.attach(msgtext) msg['Subject'] = SUBJECT msg['from'] = SENDER msg['to'] = RECEIVER try: server = smtplib.SMTP() server.connect(HOST) server.starttls() server.login(USER,PWD) server.sendmail(SENDER,RECEIVER,msg.as_string()) server.quit() print("邮件发送成功!") except Exception as e: print("失败: " + str(e))
运行代码后:
Excel写入测试结果
报告和邮件都有了,再来看看测试结果回写Excel的数据:
结果和测试报告中结果一致。
总结
到此,接口自动化测试框架开发基本完成,本文主要讲述利用ddt进行数据驱动,实现测试数据与测试代码分开模式,以便提高可读性、执行效率和降低维护成本。
还有一点需要说明,这套测试用例中的接口基本上是没有关联关系的,如果有上下关联的,就不能这样写了,不然第一个接口执行失败,后面基本全部失败。所以只适用于没有上下依赖关系的接口测试。
虽然代码已经完成,还有一些细节的地方需要优化,比如日志、报告自动清理,定时发送邮件,Jenkins集成等等。
附录
更多干货:加入测试开发交流QQ群:696400122
微信公众号:全栈测试开发日记,
CSDN地址:https://blog.csdn.net/liudinglong1989/article/details/104457379
作者:全栈测试开发日记
出处:https://www.cnblogs.com/liudinglong/
csdn:https://blog.csdn.net/liudinglong1989/
微信公众号:全栈测试开发日记
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。