环球热推荐:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!
博客园 2023-06-07 20:22:26

接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求,验证接口是否符合设计规范和功能需求的过程。


(资料图)

如何用 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 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

2023-06-07 20:22:26

幼儿园大班绘本故事教案_适合幼儿园大班的绘本

2023-06-07 20:12:28

每日消息!什么情况下驾驶证会被扣12分

2023-06-07 19:42:43

东航第二架国产大飞机C919来了!最快6月中旬接收

2023-06-07 19:34:09

广汇汽车:2022年,公司在新能源汽车销售和服务方面,借助自身在行业内的影响力,积极参与新能源市场布局_天天快看

2023-06-07 18:57:21

天天热点!大宗交易:海源复材成交7654.4万元,溢价1.80%(06-07)

2023-06-07 18:17:04

鉴的部首视频_鉴的部首

2023-06-07 17:48:20

关于尘的文案-世界热门

2023-06-07 18:01:06

酒泉市城镇老旧小区改造加快推进 环球速讯

2023-06-07 17:41:01

环球热点评!美股锂电公司中比新能源研发钠离子电池,双轮驱动业绩增长

2023-06-07 17:07:41

云闪付6月作业:有礼乐开花降门槛,不消费也能抽红包?|环球视点

2023-06-07 16:59:46

天天速读:快手极速版如何发布作品 快手极速版发作品方法介绍

2023-06-07 16:52:15

ST鹏博士6月7日打开涨停 每日看点

2023-06-07 16:33:06

全球快资讯丨以新理念、新模式推动“汽车小镇”新发展

2023-06-07 16:21:45

《街头霸王6》全球销量突破百万套 系列销量超5千万套 全球视讯

2023-06-07 15:55:31

观天下!腾讯+万科!一种很新的合作

2023-06-07 15:05:19

当前观点:咳嗽吃什么饭菜好_咳嗽吃什么水果好

2023-06-07 15:00:52

速看:短端利率定价基本合理 机构提示关注调整风险

2023-06-07 14:09:44

当前热文:欣旺达APS项目实施

2023-06-07 13:48:28

小区封阳台一定要按照物业规定吗

2023-06-07 13:33:45

【天天速看料】让“充电焦虑”逐步变为“充电自由”

2023-06-07 12:51:23

道氏技术与韩国KH Energy成立合资公司 推进新能源电池项目合作

2023-06-07 11:54:05

美国弗吉尼亚州高中毕业典礼枪击事件已致2死5伤

2023-06-07 11:30:38

遏制隐形就业性别歧视需要破立并举 全球热议

2023-06-07 11:06:16

5G已融入超六成国民经济大类

2023-06-07 10:21:16

6月7日新疆蓝山屯河BDO装置正常运行_世界消息

2023-06-07 09:54:09

看热讯:大多数父母逼婚的潜在动机,就是因为这几点

2023-06-07 09:42:10

中铁十六局集团有限公司董梁_中铁十六局集团有限公司

2023-06-07 09:20:52

日语里的ga_日语gachi是什么意思 速递

2023-06-07 08:49:35

欢乐家

2023-06-07 07:54:44

北京宣布!公积金提取有大变化

2023-06-07 07:50:59

天天速讯:董子祠_关于董子祠的简介

2023-06-07 07:12:27

1609.68亿!TO3规模刷新!2023年1-5月广州房企排行榜公布|环球视点

2023-06-07 06:27:27

大便不成形但不是拉稀吃什么药_大便不成形但不是拉稀-世界速看料

2023-06-07 06:14:56

从地王、交际花到接盘奶爸 与中海结盟的信达地产多重身份 天天看点

2023-06-07 05:52:08

【环球热闻】av8d

2023-06-07 05:13:36

【全球聚看点】个人简历技能水平怎么写_简历技能水平怎么写

2023-06-07 04:46:14

中国进口商品有哪些 我国主要进口什么产品

2023-06-07 04:21:33

十善十恶_十善

2023-06-07 04:13:41

刘大年:台美贸易倡议对台难有太多实质助益

2023-06-07 03:25:58

全球短讯!春雨里洗过的太阳吉他谱_春雨里洗过的太阳

2023-06-07 02:29:44

获奖感言发言稿_离婚后的感言

2023-06-07 01:58:55

英语故事短文3分钟励志_英语故事短文300字

2023-06-07 01:31:58

纳斯达克金龙中国指数回吐盘初超过1.4%的涨幅,并转而下跌

2023-06-07 01:06:04

满易贷网贷7千逾期不还有起诉的风险吗

2023-06-07 00:59:19

广西2岁男童走失20小时后在山上找到,村民列队欢迎,家属:皮外伤无大碍

2023-06-07 00:32:38

汇盈软件官网_汇盈贷

2023-06-06 23:42:31

ALCO HOLDINGS(00328):香港高等法院颁令撤销清盘呈请 当前独家

2023-06-06 23:31:08

焦点速读:通威股份:拟在成都市双流区投资建设年产25GW太阳能电池暨20GW光伏组件项目

2023-06-06 23:06:31

南昌市西湖区政府网站官方网 南昌市西湖区政府网站

2023-06-06 22:44:44

中国无机盐工业协会:2023年中国钾肥海运进口合同达成 焦点热闻

2023-06-06 21:55:10

买手机除了花呗分期还有什么?

2023-06-06 21:29:21

极米、坚果“扯头花”,便宜了“小弟们”? 环球要闻

2023-06-06 20:30:51

海都学院官网招聘网_海都学院官网-世界讯息

2023-06-06 20:06:54

洛克王国木条在哪刷木条有什么用_洛克王国木条怎么获得

2023-06-06 19:17:20

当前信息:又一批移民被转运至加州 美国党争闹剧再度上演

2023-06-06 18:50:44

贵阳工伤认定标准有哪些

2023-06-06 18:22:23

森霸传感收购格林通 被要求补充披露拟形成商誉金额-天天快资讯

2023-06-06 17:58:04

银色枪骑兵_银色小步兵

2023-06-06 17:16:35

【环球聚看点】上汽集团子公司裁员 安亭一厂永久关停

2023-06-06 14:52:54

热讯:美国假扮“和平缔造者”的人设宣告破产

2023-06-06 14:07:34

55999元起!苹果最强电脑发布 搭载M2 Ultra芯片 热点

2023-06-06 13:25:24

美畅股份全资子公司因违规排污被处罚_环球百事通

2023-06-06 12:17:37

关注:预计高考期间郑州天气总体晴好

2023-06-06 11:44:42

早盘开盘 玻璃跌超2%

2023-06-06 10:36:22

6月5日基金净值:华安新兴消费混合A最新净值0.5987,跌0.6%

2023-06-06 09:28:18

15年总资产从1.18万亿到8.7万亿 中信银行高质量硬核实力密码背后

2023-06-06 08:44:32

粽组词(米组词) 天天视讯

2023-06-06 07:50:01

每日热闻!猎人求生2中文版下载,7k7k小游戏(猎人求生2中文版4399)

2023-06-06 06:35:54

铁电存储器选型(铁电存储器)

2023-06-06 05:57:58

当前报道:柴桑认定28案就是偷换,铁证触及天花板,杨记者忽遇难老杜失眠

2023-06-06 04:49:19

世界聚焦:360木马防火墙在哪里(360木马防火墙)

2023-06-06 03:42:42

按派点占比定岗!国盛证券试行研究人员淘汰新方案 有部分券商或跟进 全球快讯

2023-06-06 03:12:36

首都机场:携手管控风险 共推隐患清零-世界观热点

2023-06-06 02:18:35

【全球速看料】?药师帮通过港交所上市聆讯:年营收143亿!百度、顺为与复星为股东

2023-06-06 01:11:09

石家庄市第三十五中学举行“爱眼护眼”主题宣传画竞赛活动-天天热讯

2023-06-06 00:09:32

地坛小学 王菲北京地坛小学|当前简讯

2023-06-05 23:27:07

东莞茶山两条碧道预计7月底完工

2023-06-05 22:39:33

石油的计算单位为什么是桶不是吨?一桶石油有多重?今天才明白_环球快消息

2023-06-05 22:02:13

中国银河给予风电设备推荐评级:广东发布2023海风竞配方案,属地布局公司有望受益 每日信息

2023-06-05 20:39:29

工匠汇·第二批中国纺织大工匠|曹春祥:以“匠心”做中国好内衣

2023-06-05 20:07:32

天天观点:秋天的诗歌自己创编(秋天的诗歌现代诗)

2023-06-05 18:27:06

武连镇村支部志愿服务队 全球关注

2023-06-05 18:05:18

4-氯丁酰氯商品报价动态(2023-06-05)

2023-06-05 16:53:31

观热点:四川电信总经理郑成渝出席一大会 计划2025年5G基站超过10万?

2023-06-05 16:44:49

世界关注:上周新成立基金28只 合计发行份额为279.86亿份

2023-06-05 15:51:41

护航中高考 兰州公安交警发出倡议

2023-06-05 14:59:48

我国民用无人机领域首项强制性国家标准正式发布 每日报道

2023-06-05 14:03:19

世界环境日丨将“减塑”进行到底 共建绿色新生活|全球焦点

2023-06-05 13:54:41

全球新资讯:深圳最大儿童公园龙岗儿童公园预计年底开园

2023-06-05 13:11:37

江西:重点加强分布式电源、储能接入影响研究 多渠道解决省内电源调峰问题_世界观察

2023-06-05 12:47:35

正联同人文【1】:组建正联_热点聚焦

2023-06-05 11:48:19

温州入城的“门面路” 何时才能“旧貌换新颜”?

2023-06-05 11:13:48

工信部:全面推进6G技术研发 前瞻布局下一代互联网等前沿领域

2023-06-05 10:25:58

今日热文:6月5日生意社煤焦油基准价为4372.50元/吨

2023-06-05 09:27:09

交通100《淄博好医生》——膝关节骨性关节炎的阶梯治疗-看点

2023-06-05 09:03:00

快资讯:6月5日有211只新债上市

2023-06-05 07:48:55

【世界聚看点】热火总决赛G2变阵!乐福从DNP变首发 马丁带病打替补希罗继续伤停

2023-06-05 06:41:12

燕京医学院是几本大学(燕京医学院)

2023-06-05 05:22:22

五年级日记200字左右_五年级日记|焦点热讯

2023-06-05 02:43:07