Python测试框架:pytest学习笔记
本文详细介绍Python中功能强大的pytest测试框架。内容涵盖pytest的核心特点、安装验证方法、基础用例编写规则(命名规范与断言),以及五种常用运行模式:生成HTML报告、指定用例执行、多进程并行测试、失败重试机制和打印调试信息。通过具体代码示例,帮助开发者快速掌握pytest在单元测试、接口测试及自动化测试中的应用。
在Python通用测试框架领域,许多开发者习惯于使用unittest结合HTMLTestRunner。近期,随着对pytest官方文档的深入研究,发现该框架配合丰富的插件生态使用体验极佳,因此特此整理一份pytest的学习笔记。

pytest框架核心特点
pytest是一个成熟且功能全面的Python测试框架,其核心优势主要体现在以下几个方面:
- 1. 简单灵活,易于上手
- 2. 支持参数化测试
- 3. 既能处理简单的单元测试,也能应对复杂的功能测试;此外,它还广泛应用于Selenium/Appium自动化测试以及基于requests的接口自动化测试中。
- 4. 拥有庞大的第三方插件生态,且支持自定义扩展。常用插件包括:pytest-selenium(集成Selenium)、pytest-html(生成完美的HTML测试报告)、pytest-rerunfailures(支持失败用例重跑)以及pytest-xdist(支持多CPU分发并行执行)等。
- 5. 提供完善的测试用例跳过(skip)和预期失败(xfail)处理机制。
- 6. 能够与Jenkins等CI工具无缝集成。
- 7. 支持Allure报告框架,生成更美观的测试报告。
pytest安装与验证
安装pytest非常简单,具体命令如下:
pip install -U pytest
验证安装是否成功及查看版本号:
pytest --version
基础用例编写示例
以下列举几个来自pytest官方文档的经典示例:
示例1:
import pytest
# content of test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
在命令行中切换至文件所在目录并执行测试(也可直接在IDE中运行):

该测试将返回失败报告,因为func(3)的计算结果不等于5。
示例2:
当需要编写多个测试样例时,可以将它们封装在一个测试类中,例如:
class TestClass:
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
运行上述示例:

从测试结果可以看出,该测试共执行了两个测试样例,其中一个失败,另一个成功。同时,我们也看到了失败样例的详细信息以及执行过程中的中间结果。参数-q(即-quiet)用于减少输出冗长,具体表现为不再展示pytest的版本信息。
测试样例编写规范
如何编写pytest测试样例
通过上述两个实例,我们可以发现编写pytest测试样例非常简单,只需遵循以下规则:
- 1. 测试文件必须以test_开头(或以_test结尾也可以)。
- 2. 测试类必须以Test开头,且不能包含__init__方法。
- 3. 测试函数必须以test_开头。
- 4. 断言直接使用基本的assert语句即可。
常用运行模式详解
运行模式
Pytest提供了多种运行模式,使测试和调试工作更加得心应手。下面介绍5种常用模式。在此需提醒:运行pytest时,它会查找当前目录及其子目录下所有符合test_*.py或*_test.py格式的文件,以及以test开头的方法或类;否则,系统会提示找不到可运行的用例。
生成HTML测试报告
1. 运行后生成测试报告(htmlReport)
首先安装pytest-html插件:
pip install -U pytest-html
运行模式:
pytest --html=report.html
报告效果:

在上述报告中,可以清晰地看到测试结果和错误原因,从而轻松定位问题。
指定用例执行
2. 运行指定的case
当编写的cases较多时,每次全量运行会浪费大量时间。通过指定特定case运行可以显著提高效率。
示例代码:
class TestClassOne(object):
def test_one(self):
x = "this"
assert 't'in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
class TestClassTwo(object):
def test_one(self):
x = "iphone"
assert 'p'in x
def test_two(self):
x = "apple"
assert hasattr(x, 'check')
运行模式:
模式1:直接运行test_se.py文件中的所有cases:
pytest test_se.py
模式2:运行test_se.py文件中TestClassOne类下的两个cases:
pytest test_se.py::TestClassOne
模式3:运行test_se.py文件中TestClassTwo类下的test_one:
注意:定义class时,必须以T开头,否则pytest不会运行该类。
多进程并行测试
3. 多进程运行cases
当cases数量庞大时,运行时间会显著增加。若希望缩短脚本运行时长,可采用多进程运行方式。
安装pytest-xdist插件:
pip install -U pytest-xdist
运行模式:
pytest test_se.py -n NUM
其中NUM代表并发的进程数。
失败用例重试机制
4. 重试运行cases
在进行接口测试时,偶尔会遇到503错误或短暂的网络波动,导致case运行失败,而这并非我们期望的结果。此时,可以通过重试运行cases的方式来解决此类问题。
安装pytest-rerunfailures插件:
pip install -U pytest-rerunfailures
运行模式:
pytest test_se.py --reruns NUM
其中NUM代表重试的次数。
显示调试打印信息
5. 显示print内容
在运行测试脚本时,为了调试或打印某些内容,我们常在代码中加入print语句。但在默认运行pytest时,这些内容不会显示。如果加上-s参数,即可显示这些内容。
运行模式:
pytest test_se.py -s
此外,pytest的多种运行模式可以叠加执行。例如,若想同时运行4个进程并打印出print的内容:
可以使用以下命令:
pytest test_se.py -s -n 4
以上就是Python测试框架pytest学习笔记的详细内容,更多关于python pytest的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









