Pytest-快速入门

为什么选用 pytest?

选择 pytest 的理由包括:

  • 简单易用:编写测试用例只需普通的 Python 函数,无需继承特定类。
  • 功能丰富:支持参数化、断言重写、插件扩展等功能。
  • 活跃社区:拥有大量插件和丰富的社区支持。
  • 兼容性:兼容 unittest 和 nose 测试框架。

安装 pytest

使用 pip 安装 pytest

1
pip install pytest

查看版本

查看当前安装的 pytest 版本:

1
pytest --version

快速开始

1
2
3
4
5
6
7
8
# 文件名必须以 test_ 开头或结尾
def add(x, y):
return x + y

def test_add():
assert add(2, 3) == 5 # 测试通过
assert add(2, -3) == -1 # 测试通过
assert add(0, 0) == 1 # 测试失败

运行测试:

1
pytest

结果显示:

1
2
3
4
5
6
7
8
____________________________ test_add ____________________________

def test_add():
...
> assert add(0, 0) == 1
E assert 0 == 1

test_sample.py:10: AssertionError

知识点

  • 如果只执行 pytest ,会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行
  • 如果只想执行某个文件,可以 pytest test_first.py
  • 加上-q,就是显示简单的结果: pytest -q test_first.py

用例设计原则

在编写测试用例时,需要遵循以下设计原则

  1. 独立性:测试用例之间不应互相依赖。
  2. 清晰性:用例名称和断言应简洁明了。
  3. 覆盖性:尽可能覆盖正常路径和异常路径。
  4. 可维护性:使用 fixtures 和参数化提高用例复用性。

pytest 执行与收集用例规则

用例收集规则(后面讲如何自定义)

  1. 文件名必须以 test_ 开头或以 _test 结尾。
  2. 测试函数名称必须以 test_ 开头。
  3. 测试类名称必须以 Test 开头,且不继承任何类。
  4. 测试类中的方法名称必须以 test_ 开头。

执行规则

运行指定文件:

1
pytest test_sample.py

运行指定用例:

1
pytest test_sample.py::test_add

运行指定目录:

1
pytest tests/

pytest 参数解释

pytest 提供了丰富的命令行参数,常用如下:

控制测试输出

  • -v:显示详细信息。
  • -q:只显示测试结果的摘要。

指定用例

  • -k '关键字':只运行名称包含关键字的测试用例。
    1
    pytest -k 'add'

并行执行

安装 pytest-xdist 后,可通过 -n 指定并行进程数:

1
2
pip install pytest-xdist
pytest -n 4