基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言
在上一篇《基于Python接口自动化测试框架(初级篇)附源码》讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构:
可以看出testcase下有很多测试用例,并且每个测试用例都写了请求地址,请求参数,请求头等相关数据,还有一些断言的数据。如果接口很多的话,这样每个case写都要写,导致后期工作量大,维护起来不方便。
针对上述情况,引入python一个非常好用的第三方库ddt,其作用就是数据驱动,将数据与代码分离,可以把所有的接口相关的测试用例数据存放在excel里,然后维护一个API文件,这样做就不需要写很多case代码。
框架设计思路
1.大致处理流程:
2.接口自动化测试框架处理过程:
- 首先,测试数据初始化,维护的业务数据到数据库中,也就是截图中的第一步
- 第二步,用Excel维护一份接口测试用例数据(用例id、请求方法、请求参数、请求头、请求类型、返回数据,测试结果等)。
- 测试框架只需写一份调用API的代码,读取第二步的维护的接口测试数据,然后向被测系统发送请求,也就是图中的第三步。
- 当调用接口的时候,会查询数据库,就是第四步。
- 测试框架根据接口返回的数据和Excel的数据进行比较,生成最终测试结果写入Excel中,并且生成测试报告。
大致流程:初始化测试数据→读取测试数据→发送请求→写入测试结果→生成测试报告→发送测试邮件。
如图:
框架结构
这里就不重复介绍了,可以参考初级篇,对比一下。
运行程序:
1 2 3 | ............... Time Elapsed: 0:00:01.106878 邮件发送成功! |
测试报告:
PS:右侧那个饼图是鼠标放上去自动会放大。
邮件模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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/
微信公众号:全栈测试开发日记
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架