【世界速看料】领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

来源:博客园 |2023-06-08 05:02:09

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


【资料图】

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

关键词:

本文相关推荐

第三届江苏省知识产权系统法律知识竞赛落幕_观天下

第三届江苏省知识产权系统法律知识竞赛落幕

11月26日 16:23 要闻

11月26日生意社大豆油基准价为8342.00元/吨 精选

11月26日,生意社大豆油基准价为8342 00元 吨,与本月初(8322 00元 吨)

11月26日 16:10 热点

特斯联投资成立机器人科技新公司

近日,嘉兴特跃机器人科技有限公司成立,注册资本1000万元,经营范围包

11月26日 14:17 资讯

今日热文:7天Shibor报1.4530% 上涨2.00个基点

金吾财讯|11月26日,隔夜Shibor报1 3160%,无涨跌;7天Shibor报1 4530%

11月26日 14:07 快讯

大唐新能源10月发电量同比下降14.39% 风电承压 光伏强势增长

11月25日,大唐新能源(01798)发布公告,2025年10月本公司及其附属公司

11月26日 14:11 要闻

南网数字:公司传感器产品具体情况参见招股说明书-焦点热讯

此页面是否是列表页或首页?未找到合适正文内容。

11月26日 12:27 要闻

孤雨下午(11.26)主要商品操作建议 今头条

沪铜2601  下午86350-86550附近逢低择机轻仓低接  多单于86600-869

11月26日 12:04 热点

首批“月壤砖”完成太空实验返回 未来可能就是“广寒宫”

首批“月壤砖”完成太空实验返回,状态良好经过为期一年的舱外暴露实验

11月26日 11:02 要闻

当前看点!上班不请假,周末游襄阳 唐城汉服巡游等你来

楚天都市报极目新闻讯(记者邬晓芳通讯员何梦琴)11月22日,围绕“上班

11月26日 09:19 热点

惠普盈利展望不及市场预期 宣布将裁员4000至6000人

惠普盈利展望不及市场预期宣布将裁员4000至6000人

11月26日 08:30 快讯

5G-A规模商用有序推进,覆盖超300个城市

工业和信息化部近日组织开展2025年度5G应用“扬帆”行动重点城市总结评

11月26日 08:15 要闻

尿酸企业如何(2025/11/25)|播报

据南方财富网概念库数据显示,尿酸企业有:亿帆医药:2024年报显示,公

11月26日 08:07 热点

黑龙江省鸿业农业机械服务有限公司成立 注册资本3万人民币|焦点

天眼查App显示,近日,黑龙江省鸿业农业机械服务有限公司成立,法定代

11月26日 07:00 快讯

美国9月PPI年率2.7% 美国9月PPI月率0.3% 动态

美国9月PPI年率2 7%,预期2 7%,前值2 6%。美国9月PPI月率0 3%,预期0

11月25日 22:02 热点

快报:因知识产权与竞争纠纷,贵州茅台起诉李电辉

天眼查APP显示,近日,贵州茅台酒股份有限公司新增一则开庭公告,案由

11月25日 20:55 快讯

今日热搜:林皇猖狂老蒯凶猛!海港1-3首尔 维塔尔世界波,颜骏凌坐实射正王

林皇猖狂老蒯凶猛!海港1-3首尔维塔尔世界波,颜骏凌坐实射正王,海港,

11月25日 20:22 要闻

富士莱:瑞玞生物主要业务为医疗器械和化妆品系列医美产品的研发、生产和销售

证券日报网讯富士莱(301258)11月25日在互动平台回答投资者提问时表示

11月25日 20:26 热点

外交部:高市早苗的错误涉台言论恶化中日交流氛围 前沿资讯

11月25日,外交部发言人毛宁主持例行记者会。有记者就中日交流合作受到

11月25日 18:16 快讯

【焦点热闻】科蓝软件: 关于变更持续督导保荐代表人的公告内容摘要

北京科蓝软件系统股份有限公司于近日收到中信建投证券股份有限公司出具

11月25日 18:05 要闻

光纤激光器龙头,相关概念上市公司有哪些?(2025/11/25) 每日速讯

据南方财富网概念查询工具数据显示,光纤激光器上市龙头企业有:杰普特

11月25日 17:09 快讯

最新资讯:四中全会精神在基层丨钢与火的新生:沈阳1905文化创意园的焕新答卷

当钢花褪去炽热,老厂房迎来文创的星光,沈阳铁西,这片曾经书写中国工

11月25日 14:20 快讯

最资讯丨生意社:11月25日山东地区异辛醇行情上涨

据生意社商品分析系统:11月25日山东异辛醇市场均价为6283 33元 吨,较

11月25日 14:09 要闻

2025年11月25日达州市复兴市场管理有限责任公司价格行情 每日资讯

2025年11月25日达州市复兴市场管理有限责任公司价格行情

11月25日 13:12 资讯

每日观察!储蓄型保险和保障型有何差异?

在保险市场中,储蓄型保险和保障型保险是两种常见的类型,它们各自具有

11月25日 13:04 快讯

[快讯]红太阳12166万限售股11月27日解禁-视点

CFi CN讯:红太阳(股票代码:000525)在2025年11月27日新增可售A股121

11月25日 12:22 热点

区县动态丨南明区四项教育创新成果在全国教博会展示推广

贵阳网·贵阳新闻讯11月15日至17日,由北京师范大学主办的第七届中国教

11月25日 11:16 热点

龙蟠科技早盘大涨超25% 与楚能新能源签署补充协议二

龙蟠科技早盘大涨超25%与楚能新能源签署补充协议二

11月25日 10:33 要闻

人民银行开展3021亿元逆回购操作

人民银行开展3021亿元逆回购操作。

11月25日 10:14 热点

每日报道:韩国“国民爷爷”李顺载去世,终年91岁,代表作《搞笑一家人》

韩国“国民爷爷”李顺载去世,终年91岁,代表作《搞笑一家人》

11月25日 09:31 资讯

深信服:11月24日持仓该股ETF资金净流入1217.49万元,3日累计净流入8463.33万元

据同花顺(300033)iFind,深信服(300454)11月24日ETF资金当日净流入

11月25日 09:26 快讯