环球速讯:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!
“接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求,验证接口是否符合设计规范和功能需求的过程。”
如何用 python +ddt+excel 实现接口自动化测试
接口自动化测试可以提高测试效率和质量,节省测试成本和时间,保证测试覆盖率和可维护性。
(资料图片仅供参考)
让勇哥带你入门如何用 python +ddt+excel 实现接口自动化测试,请瞧如下内容:
一、准备工作
1. 安装 python 环境
python 是一种简洁、优雅、易学的编程语言,它有丰富的第三方库和社区支持,非常适合用来进行接口自动化测试。安装 python 的3.0以上的版本),并配置好环境变量,以便在命令行中使用 python 命令。
2. 安装相关库
为了进行接口自动化测试,我们需要安装以下几个库:
requests:用来发送 HTTP 请求,支持各种方法、参数、头部、身份验证等。
xlrd:用来读取 excel 文件中的数据,支持 xls 和 xlsx 格式。
openpyxl:用来写入 excel 文件中的数据,支持 xlsx 格式。
ddt:用来实现数据驱动测试,可以从 excel 文件中读取多组数据,并生成多个测试用例。
unittest:用来编写和执行测试用例,支持断言、前置后置条件、测试套件等。
HTMLTestRunner_api:用来生成 HTML 格式的测试报告,支持图表、日志、截图等。
我们可以使用 pip 命令来安装这些库,例如:
pip install requests
二、设计测试
1. 编写 excel 文件
我们需要在 excel 文件中填写接口的相关信息,包括:
接口名称
请求地址
请求方法
请求参数
预期结果
例如:
我们可以将这个 excel 文件保存为 test_data.xlsx,并放在项目的 test_datas 目录下。
2. 封装 excel 操作
为了方便地读取和写入 excel 文件中的数据,我们需要封装一些 excel 操作的函数,例如:
打开表单
获取表头
获取所有数据
写入数据
我们可以将这些函数定义在一个类中,并保存为 excel_handler.py,并放在项目的 Lib 目录下。具体代码如下:
from openpyxl import load_workbookfrom openpyxl.worksheet.worksheet import Worksheetclass ExcelHandler(): """操作Excel""" def __init__(self, file): """初始化函数""" self.file = file def open_sheet(self, sheet_name) -> Worksheet: """打开表单""" wb = load_workbook(self.file) sheet = wb[sheet_name] return sheet def read_rows(self,sheet_name): """读取除表头外所有数据(除第一行外的所有数据)""" sheet = self.open_sheet(sheet_name) rows = list(sheet.rows)[1:] data = [] for row in rows: row_data = [] for cell in row: row_data.append(cell.value) data.append(row_data) return data def read_key_value(self,sheet_name): """获取所有数据,将表头与内容结合整...."""... return data
3. 封装 requests 请求
为了方便地发送 HTTP 请求,我们需要封装一些 requests 请求的函数,例如:
初始化 session
发送请求
关闭 session
我们可以将这些函数定义在一个类中,并保存为 requests_handler.py,并放在项目的 Lib 目录下。具体代码如下:
import requestsclass HTTPHandler: # 初始化 def __init__(self): self.session = requests.Session() # 定义一个方法,接收访问http请求的方式 def visit(self, url, method, params=None, data=None, json=None, **kwargs): res = self.session.request(method, url, params=params, data=data, json=json, **kwargs) try: return res.json() except ValueError: print("return not json") # 关闭session会话 def close_session(self): self.session.close()
三、执行测试
1. 编写测试用例
我们需要使用 unittest 和 ddt 来编写和执行测试用例,具体步骤如下:
导入相关库和模块
定义一个测试类,继承 unittest.TestCase
定义一个类方法,用来初始化 session 和读取 excel 文件中的数据
使用 @ddt.data 装饰器,传入 excel 文件中的数据
定义一个测试方法,用来发送请求,并断言响应结果是否符合预期
我们可以将这些代码保存为 test_api.py,并放在项目的 test_cases 目录下。具体代码如下:
from Lib.excel_handler import ExcelHandlerfrom Lib.requests_handler import HTTPHandlerimport requestsimport ddtimport unittestdata = ExcelHandler("test_datas/test_data.xlsx").read_key_value("Sheet1")@ddt.ddtclass TestAPI(unittest.TestCase): @classmethod def setUpClass(cls): cls.s = HTTPHandler() @ddt.data(*data) def test_api(self,params): print("params:%s" % params) case_name = params.get("接口名称") url = params.get("请求地址") args = eval(params.get("请求参数")) if isinstance(params.get("请求参数"), str) else params.get("请求参数") method = params.get("请求方法") expct_res1 = params.get("预期结果") # 发起请求,获取返回数据 result = self.s.visit(url, method, params=args) # 分析返回数据 response_data = result["name"] # 断言响应结果是否符合预期 self.assertEqual(expct_res1, response_data) @classmethod def tearDownClass(cls): cls.s.close_session()
2. 生成测试报告
我们需要使用 HTMLTestRunner_api 来生成 HTML 格式的测试报告,具体步骤如下:
导入相关库和模块
定义一个测试套件,添加测试用例
定义一个测试报告的文件名和路径
定义一个测试运行器,传入测试报告的文件对象和相关参数
使用测试运行器来运行测试套件
我们可以将这些代码保存为 run.py,并放在项目的根目录下。具体代码如下:
import unittestfrom HTMLTestRunner_api import HTMLTestRunnerfrom test_cases.test_api import TestAPI# 定义一个测试套件suite = unittest.TestSuite()# 添加测试用例suite.addTest(unittest.makeSuite(TestAPI))# 定义一个测试报告的文件名和路径report_file = "reports/test_report.html"# 定义一个测试运行器,传入测试报告的文件对象和相关参数with open(report_file, "wb") as f: runner = HTMLTestRunner(f, title="接口自动化测试报告", description="用例执行情况") # 使用测试运行器来运行测试套件 runner.run(suite)
四、查看结果
运行 run.py 文件后,我们可以在 reports 目录下看到生成的 test_report.html 文件,打开它,我们可以看到以下内容:
我们可以看到,共有 11 个测试用例,通过 6 个,失败 5 个。我们还可以看到每个测试用例的详细信息,包括用例名称、请求地址、请求参数、预期结果、实际结果等。我们还可以看到一些图表、日志、截图等。
这样,我们就完成了用 python +ddt+excel 实现接口自动化测试的过程。
总结
以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注:
我的公众号:百态测试
博客(奈非天的主页 - 博客园 (cnblogs.com))
我会不定期地分享更多的精彩内容。感谢你的阅读和支持!
本文来自博客园,作者:奈非天,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/p/17460169.html
标签:
精彩推送
环球速讯:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!
“& 160;接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求
环球微头条丨奥海科技(002993.SZ):智新控制有相关逆变器产品,已在相关客户车型中实现大规模应用
格隆汇6月7日丨有投资者在投资者互动平台向奥海科技002993SZ提问本公司
【天天聚看点】高考生被困电梯 “蓝朋友”紧急救援一路护送
resource newssc org group1 M00 09 AB wqgQj2SAZDCEf5eFAAAAADl-CXI580 mp4视频地址
新闻快讯
新闻快讯
- 环球速讯:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!
- 【收评】纯碱日内下跌2.27% 机构称纯碱是处在“主动去库”的阶段|天天微动态
- 肯尼亚曼德拉郡警方再次遭袭 7人受伤_全球播报
- 天天要闻:苹果手机快捷指令更改步数的具体操作方法
- 环球微头条丨奥海科技(002993.SZ):智新控制有相关逆变器产品,已在相关客户车型中实现大规模应用
- 孚能科技(688567.SH)股东深圳安晏减持期满未减持
- 比较悲伤的句子 遗憾的是 世界视讯
- 吉视传媒董秘回复: 感谢关注公司。近几年受整体行业及资本市场影响,股价有所波动|全球观察
- 【天天聚看点】高考生被困电梯 “蓝朋友”紧急救援一路护送
- 林下“有路” 田地“生金”
- 每日观察!2023金昌中考具体时间安排 什么时候考试
- 环球热议:陕西已累计收获小麦340.28万亩
- 天天报道:强化斯特林制冷技术供应链自主可控,海尔生物拟向超立安增资4300万元
- 尖山街居家养老中心启用 天津再添一家养老服务综合体
- 速看:渐行渐远的“榴莲自由”
- 天源环保:污泥碳化和生物质秸秆碳化研发项目采用了热储能技术
- 每日速读!铜陵有色:公司阴极铜的原材料来源分为自产铜精矿和国内、国外采购铜精矿模式
- 上思:高考首日,爱心送考暖人心
- 【当前独家】科普助推“双减” 科技探索让孩子快乐成长
- 世界热头条丨如何破解城市综合体治理难题?普陀这里有一套→
- 乌龟吃什么食物_乌龟相四脚朝天打三个数字
- 【独家焦点】浙江第四批集采确认纳入重组人生长激素
- 中集来福士获世界级“滚装船技术与环境奖”_世界最新
- 三友化工(600409)6月7日主力资金净卖出67.37万元 天天新动态
- 焦点讯息:广汇汽车董秘回复: 公司的融资渠道较多元化
- 5月全国城市轨道交通客运量24.9亿人次_当前速讯
- 官旗促销 爱奇艺黄金会员年卡+京东plus年卡 138元|世界头条
- 建研设计:公司有承接新型城镇化项目 全球今头条
- 岳阳兴长:公司惠州项目预计于2023年9月投产-微头条
- 环球快资讯丨苹果手机怎么录屏 苹果手机录屏方法
- 动态焦点:智慧养老【1002】江苏:跨国协同合作,推动智慧农业发展
- 【天天聚看点】国鸟简介
- 环球百事通!世界第一!我国一季度汽车出口107万辆 还带火了这个行业
- 普莱得:6月6日融资净买入338.91万元,连续3日累计净买入714.38万元-天天热推荐
- 起点游戏网页平台官网(起点游戏网)
- 长安神骐t20双排(长安神骐t20跟T20L的区别)
- 美加州州长:德桑蒂斯或因运送非法移民面临指控
- 北京警方多措护航高考 揭秘试卷如何押运至各考点
- 信德新材:6月6日融资买入416.53万元,融资融券余额8743.04万元
- 环球观焦点:恒信东方:公司目前没有与英伟达开展合作
- 青海春天、首都在线等38股获陆股通增仓超50%|世界今亮点
- 熵基科技:6月6日融资买入2049.05万元,融资融券余额1.22亿元-全球时讯
- 香港波肖门尾图库_香港波肖门尾图库大型免费图库-当前短讯
- 美国八大科技股目前占标普500指数市值近三分之一,高于年初_环球快讯
- 永夜帝君最新激活码2023
- 北路智控:融资净偿还328.81万元,融资余额8130.09万元(06-06) 当前热讯
- 谁遗落了“潜水靴”?“北溪”管道爆炸新线索能否让真凶浮出水面-天天精选
- 西藏税务聚焦纳税人急难愁盼 多举措推动主题教育走深走实
- 环球今日报丨饰品进货渠道小饰品进货_饰品店进货渠道
- 魔兽世界塞纳里奥远征队军需官在哪(wowtbc怀旧服塞纳里奥远征队军需官位置坐标)