pytest快速上手指南【pytest】

发布于:2025-07-16 ⋅ 阅读:(27) ⋅ 点赞:(0)

pytest 框架简介与入门指南

在基于 Python 的自动化测试领域,最常见的三大测试框架包括:

  • unittest
  • pytest
  • robotframework

其中,unittestpytest 更多用于白盒测试,主要聚焦在单元测试层面;而 robotframework 则偏向于系统级的黑盒测试,更适合自动化验收测试等场景。

尽管 pytest 本身定位为单元测试框架,但它同样可以胜任系统测试的自动化任务。相比其他框架,pytest 拥有以下优势:

  • 使用简单:测试用例用原生 Python 编写,语法直观。
  • 结构清晰:测试目录和文件的组织可以自然地映射到人工测试用例的分层结构。
  • 灵活的初始化和清理机制:支持精细化控制测试资源的 setup 和 teardown。
  • 用例选择方便:支持按模块、类、方法甚至标签选择要执行的用例。
  • 插件生态丰富:通过插件(如 pytest-html)可生成详尽的测试报告等。

一、安装 pytest 及报告插件

安装 pytest 非常简单,直接运行以下命令即可:

pip install pytest

为了生成图形化的测试报告,还需要安装插件 pytest-html

pip install pytest-html

二、pytest 自动发现测试用例的规则

pytest 会自动识别哪些是测试用例,主要依据如下规则:

  • 若未指定路径,则从当前目录(或配置中的 testpath)开始递归查找;
  • 默认会搜索以 test_*.py*_test.py 命名的 Python 文件;
  • 在这些文件中,pytest 会寻找:
    • test 开头的函数;
    • Test 开头的类中,以 test 开头的方法。

✅ 小提示:为了让 pytest 能正确发现用例,类名和函数名的命名非常关键。


三、测试用例示例

假设我们在项目根目录 autotest 下的 cases/登录/ 目录中创建了一个文件 test_错误登录.py,其中包含如下用例类:

class Test_错误密码:

    def test_C001001(self):
        print('\n用例C001001')
        assert 1 == 1

    def test_C001002(self):
        print('\n用例C001002')
        assert 2 == 2

    def test_C001003(self):
        print('\n用例C001003')
        assert 3 == 2

该类符合 pytest 要求的结构:类名以 Test 开头,方法名以 test_ 开头。断言语句 assert 是 pytest 中判断测试结果的核心机制:只要表达式结果为 True,用例就通过;否则失败。


四、运行测试

进入项目根目录(如 autotest),可以通过以下命令执行测试:

python -m pytest

执行后,pytest 会自动查找并运行当前目录下的所有测试用例,并在终端输出结果:

  • 绿色的 . 表示通过;
  • 红色的 F 表示失败;
  • 失败用例后会展示失败原因和具体断言语句位置。
常用运行参数
  • -s:显示测试用例中的 print() 输出,适用于调试;
  • -v:显示每个用例的详细名称;
  • -sv:同时启用上述两个选项。
python -m pytest -sv

此外,为了避免 pytest 误将其他目录(如 libcfg)下的文件识别为用例,可以在命令中指定测试用例目录:

python -m pytest cases

五、生成测试报告

借助 pytest-html 插件,我们可以通过以下命令生成图形化的测试报告:

python -m pytest cases --html=report.html --self-contained-html

这样会在当前目录生成名为 report.html 的报告文件,使用浏览器打开即可查看详细信息。

🔍 注:旧版本插件存在中文显示乱码的问题,但在最新版中已被修复,测试类名或路径中包含中文也能正常显示。


补充建议

  • 在中大型项目中,建议结合 pytest.ini 配置文件自定义测试路径、添加标记(markers)、忽略目录等设置;
  • 可进一步了解 fixture参数化断言重写 等高级功能,提升自动化能力;
  • 利用 CI 工具(如 Jenkins、GitHub Actions)集成 pytest 测试流程,可实现持续测试与报告归档。

网站公告

今日签到

点亮在社区的每一天
去签到