环球快看:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

来源:博客园 |2023-06-08 02:58:42

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


(资料图片)

如何用 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

责任编辑:【henankuaibao】

关键词:

本文相关推荐

环球快看:领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

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

06月08日 02:58 要闻

新型火车票来了:7天内任意时间可乘车 过期退款 观察

6月6日起,中国铁路昆明局集团有限公司推出了“计次票”。旅客可通过席位预约和直接刷证两种方式,在7天有

06月08日 03:12 业界

安置房是属于什么性质的房子_安置房是什么性质的房子

一、安置房是什么性质的房子安置房是当地政府对城市建设进行施工时,对被拆迁住户进行补偿安置所建设的房屋

06月08日 03:01 要闻

炸鸭翅要多久?

炸鸭翅大概需要5分钟左右。炸鸭翅是家常菜中的热门菜,也是去家常菜馆最受欢迎的一道名菜之一,制作炸鸭翅

06月08日 02:41 业界

东星医疗:吻合器产品目标海外市场主要集中在南美、中东以及欧洲三大区域

东星医疗6月7日披露投资者关系活动记录表显示,在海外市场方面,公司吻合器产品目标海外市场主要集中在南美

06月08日 02:47 要闻

23旭越惠诚2优先C票面利率为3.5000%

23旭越惠诚2优先C票面利率为3 5000%

06月08日 03:00 业界

吉林信托增资至31.5亿元 2022年报姗姗来迟 营收“斩腰”缩水

继上月本金6折兑付了旗下一款违约多年的信托产品后,吉林信托终于迎来重磅好消息。6月6日,国家金融监督管

06月08日 02:33 要闻

渤海化学拟22.5亿元投建丙烯酸酯和树脂新材料项目

6月7日,渤海化学公告,全资子公司渤海石化拟投资建设丙烯酸酯和高吸水性树脂新材料项目。项目总投资22 5亿

06月08日 02:49 业界

杰创智能:公司暂未有工业机器人相关产品

每经AI快讯,有投资者在投资者互动平台提问:董秘你好,请问公司产品是否有在工业机器方面的应用?杰创智能

06月08日 02:36 要闻

全球最资讯丨酒泉市城镇老旧小区改造加快推进

今年以来,酒泉市继续把城镇老旧小区改造作为推进城市更新、促进有效投资,改善居民生活环境和居住条件的重

06月08日 02:27 业界

比亚迪发布纯电大巴:车长近 19 米,可坐 140 人,续航 470 公里_每日热闻

IT之家6月7日消息,在巴塞罗那举办的2023世界公共交通峰会(UITP)上,比亚迪发布了两款纯电动巴士新车:铰

06月08日 02:41 要闻

新款特斯拉Model 3实车曝光:全新大灯、辅助驾驶能力再升级

6月7日消息,日前马斯克访华参观特斯拉上海超级工厂时,据称其考察了新款Model3的产线和试产品,不过该车具

06月08日 02:32 业界

山东滨州:努力让残疾人“好就业、就好业”

近日,全省残疾人权益保障和教育就业工作现场调研活动在山东省博兴县举办。滨州市聚焦残疾人就业,打造“滨

06月08日 02:33 要闻

环球精选!@端午节有出行计划的小伙伴们 该买火车票啦!

从6月8日起可以购买端午节假期首日的车票啦准备出行的小伙伴↓↓赶紧收下这份购票日历↓↓有小伙伴要问了既

06月08日 02:14 业界

即将发布全球车型,哪吒汽车参加9月慕尼黑车展-聚焦

6月7日,买车网Buycar获悉,哪吒汽车将参加9月开幕的德国慕尼黑车展,未来还将发布一款重量级全球车,此外

06月08日 02:06 要闻

各地出台全方面服务保障 营造温馨、舒适高考环境_焦点要闻

央视网消息:日前,教育部已经会同有关部门多次作出部署,要求各地坚持以考生为本,紧密围绕“平安高考”工

06月08日 02:11 业界

欧盟将对实施“经济勒索”的国家加征关税是针对中国?外交部回应|短讯

汪文斌称,中国和欧盟都是美国经济胁迫的受害者,美国公然胁迫欧盟等国家限制对华出口半导体生产设备,这种

06月08日 02:12 要闻

洛江区政府主要领导带队开展巡林|全球独家

6月6日,洛江区政府区长郭宁带队开展巡林,调研松材线虫病防控整治工作。郭宁一行先后深入罗溪镇建兴村、马

06月08日 02:03 业界

小鹏拯救小鹏

“G6上了后再看结果,如果G6不成功,我不跑路,估计公司也得直接开掉1 3的人。”小鹏汽车员工何帆对《最话

06月08日 02:03 要闻

申万宏源:首予洲际船务(02409)“买入”评级 三大业务板块营收持续增长-世界看热讯

申万宏源认为,洲际船务(02409)船舶管理业务中的资讯管理类业务会随着其规模扩大而稳步增长。

06月08日 02:07 业界

杰创智能:与南方电网等有业务合作并承接部分智能化业务 视焦点讯

杰创智能在互动平台表示,公司与中国南方电网、广东电网、海南电网、贵州电网、广西电网等公司均保持有良好

06月08日 02:08 要闻

世界最新:华福证券给予博威合金买入评级 新材料业务蓄势待发 新能源业务持续景气

华福证券06月06日发布研报称,给予博威合金(601137 SH,最新价:13 29元)买入评级。评级理由主要包括:1

06月08日 02:18 业界

快讯:短视频和直播成读者购书新方式,抖音电商年销售图书2.5亿单

抖音电商5月16日在广州举办了第三届生态大会,公布了一系列的数据。在我看来,最让人惊喜的其实是一个“小

06月08日 01:55 要闻

当前报道:白癜风与免疫功能有什么关系?白癜风治的好吗?

白癜风皮肤的黑素细胞功能消失引起,全身各部位可发生,常见于指背、腕、前臂、颜面、颈项及生殖器周围等。

06月08日 02:10 业界

双星新材(002585.SZ):公司产线并未出现大量停产情况,请勿听信谣言_世界消息

格隆汇6月7日丨有投资者在投资者互动平台向双星新材002585002585SZ提问请问贵司目前停产了几条线分别是什么

06月08日 01:49 要闻

奥海科技(002993.SZ):智新控制有相关逆变器产品,已在相关客户车型中实现大规模应用 世界滚动

格隆汇6月7日丨有投资者在投资者互动平台向奥海科技002993SZ提问本公司生产的逆变器能用在新能源汽车上吗公

06月08日 01:42 业界

【全球速看料】【清一色午报】三大股指涨跌不一,宁德时代跌超5%,AI概念股再迎集体反弹

①宁德时代跌超5%,在其拖累下创业板续创年内新低;②两市共38只个股涨停,8股未封住涨停,两市封板率88%。

06月08日 01:27 要闻

雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警

龙卷预警黑龙江省气象台2023年6月7日14时20分发布龙卷预警:预计未来2小时,铁力、大箐山将有雷雨大风天气

06月08日 01:32 业界

青年志愿者“爱心助考”_天天热闻

6月7日上午,中国中铁北京局广州白云机场项目部工会组织党员及青年志愿者在驻地区域高考考点——广州市黄广

06月08日 01:24 要闻

动静影像丨进入高考时间!无畏挑战,少年加油!

今天(6月7日)9:00贵州省2023年普通高校招生全国统一考试正式开考34 1万余名考生走进考场迎接挑战龙颖摄不

06月08日 01:24 业界