当前位置: 首页 > news >正文

3.Python 接口自动化之 Pytest 测试框架

一、前言:主流 Python 自动化测试框架横向对比

在 Python 自动化测试领域,unittest、pytest、Robot Framework是目前工业界最常用的三大测试框架,做接口自动化选型时,可根据项目规模、团队技术栈选择,先通过对比表理清三者核心差异:

对比维度unittest (Python 内置)pytestRobot Framework
安装方式Python 标准库,无需额外安装pip install pytestpip install robotframework
语法风格基于类继承TestCase函数式 / 面向对象,无强制样板代码关键字驱动,表格化编写用例
断言写法self.assertEqual()等固定断言方法原生 Pythonassert表达式,写法灵活关键字断言(Should Be Equal 等)
参数化依赖subTest或第三方库内置@pytest.mark.parametrizeTest Template 数据驱动
插件生态匮乏,拓展依赖第三方(HTMLTestRunner)极其丰富:pytest-html、allure-pytest、pytest-xdist 等中等,需额外安装 RequestsLibrary 等库
测试报告需手动引入插件生成原生支持多格式报告,搭配插件实现 HTML/Allure框架自带日志 + 测试报告
学习成本中等(需要熟悉 unittest 固定格式)低,语法简洁上手快偏高,需要熟记关键字语法
BDD 支持不支持通过pytest-bdd插件扩展原生 robotframework-bdd 支持
适用场景小型项目、老旧遗留系统维护中大型项目、高扩展性接口 / UI 自动化非技术人员参与、团队协作落地自动化

选型总结:中小型接口自动化项目优先选用pytest,兼顾开发效率与拓展性;纯手工转自动化、业务人员参与编写用例选 RF;老旧 Python 项目兼容改造用原生 unittest。

二、Pytest 框架介绍:为什么自动化测试首选 Pytest?

Pytest 是一款开源高效的 Python 全功能测试框架,官方文档:https://docs.pytest.org/en/stable/getting-started.html,也是当前接口自动化、Web 自动化、APP 自动化主流底层执行框架,核心优势如下:

  1. 入门简单:无冗余样板代码,函数式编写用例,零基础几分钟即可上手编写第一条测试用例;
  2. 断言灵活:直接使用 Python 原生assert做结果校验,不用记忆各类框架专属断言方法,报错信息精准直观;
  3. 原生参数化:内置参数化装饰器,轻松实现一组接口多组入参循环执行,接口自动化必备能力;
  4. 海量插件生态:依托插件可实现测试报告生成、失败用例重跑、多进程并发执行、覆盖率统计、Allure 精美报告等功能,无缝对接 requests、Selenium、Appium;
  5. 灵活用例管控:支持用例跳过、预期失败标记、自定义用例标签分组执行,适配迭代版本灵活的项目。

三、Pytest 环境安装(版本适配说明)

3.1 指定版本安装

文档示例固定版本pytest==8.3.2,该版本最低依赖 Python3.8+,安装命令:

# 固定版本安装,统一项目环境避免版本差异 pip install pytest==8.3.2

建议团队统一 pytest 版本,防止不同版本 API 变动导致脚本报错。

3.2 pytest 与 Python 版本适配对照表

若本地 Python 版本低于 3.8,按需降级 pytest 版本:

pytest 版本最低支持 Python 版本
8.0+3.8+
7.1+3.7+
6.2~7.03.6+
5.0~6.13.5+
3.3~4.62.7/3.4+

3.3 安装验证

安装完成后在 Pycharm 确认项目解释器已加载 pytest,对比普通 py 脚本与 pytest 用例运行区别:

  • 原生 python 脚本:必须编写if __name__ == '__main__':主动调用函数才能执行;
  • pytest 用例脚本:遵循命名规则后,代码左侧自带绿色运行箭头,一键执行,无需手动调用方法。

示例简易接口用例:

# test_01.py import requests def test_baidu_req(): res = requests.get(url="https://www.baidu.com") print(res.status_code)

四、Pytest 用例命名 & 收集规则(核心必记)

pytest 拥有自动用例收集机制,只有满足命名规范,框架才能自动识别并执行用例,三条硬性规则:

  1. 文件:测试文件必须以test_开头 或_test结尾(推荐统一 test_开头,规范统一);
  2. 测试类:类名必须以Test开头,禁止自定义__init__构造方法
  3. 测试方法:函数 / 类内方法必须以test开头。

重点坑点:测试类不能写__init__方法

# 错误示例:类中定义__init__会导致pytest无法收集用例 class TestDemo(): def __init__(self): print("初始化构造") def test_a(self): pass

报错原因:pytest 自动实例化测试类,自定义__init__会干扰框架实例化逻辑,如需前置初始化,改用setup()fixture实现。

满足命名规则后,终端输入pytest即可自动扫描当前目录所有符合规则的用例并执行。

五、Pytest 常用命令行参数(日常高频使用)

通过命令行参数灵活控制用例执行范围、日志输出、报告生成,整理高频命令:

命令作用说明补充备注
pytest默认扫描当前目录 + 子目录所有符合规则用例并执行
pytest -v详细打印用例执行结果,展示用例名称和执行状态v=verbose 详情
pytest -s控制台输出用例中 print () 打印内容默认 pytest 屏蔽 print 输出
pytest -vs-v 和 - s 组合简写,最常用调试命令日常调试首选pytest -vs
pytest test_xxx.py仅执行指定 py 文件内所有用例精准执行单文件
pytest test_dir/执行指定文件夹下全部用例批量跑目录
pytest -k "关键词"只运行用例名包含指定关键词的用例模糊匹配筛选用例
pytest -m "标记名"只执行打了对应 marker 标签的用例用于环境分组(冒烟 / 回归)
pytest --html=report.html生成 html 格式测试报告需提前安装:pip install pytest-html
pytest --cov = 项目目录统计代码覆盖率依赖 pytest-cov 插件

实操示例

  1. 调试单文件,打印详情 + print 内容
pytest -vs test_01.py
  1. 只执行 test_case 目录全部用例并生成 html 报告
pytest test_case/ --html=report/report.html

六、pytest.ini 全局配置文件(简化命令行)

频繁敲长串命令繁琐,在项目根目录新建pytest.ini配置文件,提前预设默认参数,后续直接输入pytest即可按配置执行。

常用配置模板

[pytest] # 默认追加命令行参数,等价每次执行自带 -vs addopts = -vs # 指定自动扫描用例的目录 testpaths = test_case # 自定义用例文件匹配规则(默认test_*.py) python_files = test_*.py # 测试类匹配规则 python_classes = Test* # 测试方法匹配规则 python_functions = test_* # 自定义用例标签(后续-m参数使用) markers = smoke: 冒烟测试用例 regression: 回归测试用例

配置完成后,终端直接执行pytest,自动读取配置,省去重复输入参数。

七、拓展补充(自动化落地延伸)

  1. 后续学习方向:pytest 夹具 Fixture(替代 setup/teardown 实现前后置、接口全局 cookie/headers 封装)、参数化实战、Allure 精美报告集成、多进程并发执行(pytest-xdist)、失败用例重跑;
  2. 接口自动化落地搭配:pytest+requests+Allure+yaml(用例数据分离)是当前主流接口自动化技术栈;
http://www.jsqmd.com/news/938858/

相关文章:

  • 西安母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 旅游MCN紧急预警:Sora 2已上线动态光影引擎,你的旧脚本将在72小时内批量过时,速查兼容性自查表
  • 金华母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 灵芽社区:AI创作发布一体化平台评测
  • 【Claude机会点识别避坑清单】:12个被90%团队忽略的伪机会信号,含真实客户ROI对比数据
  • 金华母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 上饶母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 铜陵CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • 4.前后置处理:setup_class/setup_method 详
  • 印度电子维修市场行话解析:从COMB IC到PF,连接理论与实践的桥梁
  • 苏州母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • AI瞄准助手终极指南:3分钟让普通玩家拥有职业级瞄准精度
  • 营销人必抢的AI协同工作流(2024 Q2最新兼容矩阵已发布)
  • 锦州CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • Lindy自动化上线前必须完成的11项合规性验证:GDPR、SOX及海关AEO认证交叉校验清单
  • |____2.5 FreeRTOS 深度解析--多优先级
  • 从‘选最早结束’到‘证明它最优’:给算法新手的贪心算法通关指南(附活动选择问题详解)
  • 黑河母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 2026年发电机组靠谱排名,济宁明恒发电怎么样? - 工业推荐榜
  • 上饶母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 5:原生 assert 断言
  • 代理现货NCP360SNT1G是安森美(onsemi)推出的带过压保护功能的‌电压监控芯片‌,同时也可作为USB接口过压保护控制器使用
  • 2026年无代码AI应用生成平台盘点:10款推荐
  • 锦州母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 广元母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 金诚回收
  • 衡水CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • 纯HTML+PHP表单交互实战:新闻列表的提交、处理与动态渲染
  • 5分钟掌握B站视频下载器:解锁4K大会员内容的终极指南
  • 韶关CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • 6:参数化