Skip to content

Pytest插件

Pytest 插件

简介

Pytest 插件是 Python 包或模块,可以提供额外的功能、自定义行为或报告,可以根据项目的需求选择并使用不同的插件。

pytest 常用的插件

pip install pytest-ordering  控制用例的执行顺序(重点)
pip install pytest-xdist    分布式并发执行测试用例(重点)
pip install pytest-dependency   控制用例的依赖关系 (了解)
pip install pytest-rerunfailures   失败重跑(了解)
pip install pytest-assume          多重较验(了解)
pip install pytest-random-order  用例随机执行(了解)
pip install pytest-html            测试报告(了解)

Pytest 插件分类

Pytest 插件可以按其功能和用途进行分类。以下是一些常见的 Pytest 插件分类:

  1. 外部插件: 这些是通过 pip install命令从 PyPI 或其他 Python 包索引安装的插件。外部插件是独立于项目的,可以在项目外安装它们并在项目中引用。例如,可以使用 pip 来安装 pytest-html 插件:pip install pytest-html。一旦安装,可以在任何项目中使用它来生成 HTML 测试报告。

  2. 本地插件: 这些插件是与特定项目相关的,通常是存储在项目目录中的 conftest.py 文件中。conftest.py 可以包含夹具(fixtures)、自定义命令行选项、标记(markers)、钩子函数等。这些插件仅对特定项目可见,并在项目的测试中使用。它们不需要额外的安装步骤,只需在项目中定义和使用。

  3. 内置插件: Pytest 内置了一些插件,这些插件提供了许多常见的功能和扩展。这些插件存储在 pytest 的内部目录(通常是_pytest目录)中,并自动加载,无需额外的安装或配置。例如,pytest-cov 是一个内置插件,它用于测试覆盖率分析。可以使用--cov选项来启用测试覆盖率分析,而无需额外安装插件。

Pytest 插件的使用

Pytest 测试用例执行顺序自定义

Pytest-ordering 是一个 Pytest 插件,可自定义 Pytest 测试用例的执行顺序。这对于确保特定的测试用例在其他测试用例之前或之后运行非常有用。

  • 场景: 对于集成测试,经常会有上下文依赖关系的测试用例。 比如 10 个步骤,拆成 10 条 case,这时候能知道到底执行到哪步报错。 用例默认执行顺序:自上而下执行。

  • 解决: 可以通过 setup,teardown 和 fixture 来解决。也可以使用对应的插件。

  • 安装:pip install pytest-ordering
  • 用法:@pytest.mark.run(order=2)

注意:多个插件装饰器(>2)的时候,有可能会发生冲突。

import pytest


#@pytest.mark.run(order=2)
@pytest.mark.third
def test_foo():
    assert True

# @pytest.mark.run(order=1)
@pytest.mark.first
def test_bar():
    assert True

# @pytest.mark.run(order=2)
@pytest.mark.second
def test_bar1():
    assert True

在未使用 Pytest-ordering 时执行顺序默认为从上到下。

使用 Pytest-ordering 自定义执行顺序。

Pytest 测试用例并行运行与分布式运行

Pytest 支持测试用例的并行运行和分布式运行,这可以加速测试执行,特别是在大型测试套件中。

场景 1: 测试用例 1000 条,一个用例执行 1 分钟,一个测试人员执行需要 1000 分钟。 通常我们会用人力成本换取时间成本,加几个人一起执行,时间就会缩短。 如果 10 人一起执行只需要 100 分钟,这就是一种分布式场景。

场景 2: 假设有个报名系统,对报名总数统计,数据同时进行修改操作的时候有可能出现问题,需要模拟这个场景,需要多用户并发请求数据。

解决: 使用分布式并发执行测试用例。 分布式插件:pytest-xdist 安装及运行: pip install pytest-xdist

注意: 用例多的时候效果明显,多进程并发执行,同时支持allure

from time import sleep

def test_foo():
    sleep(1)
    assert True

def test_bar():
    sleep(1)
    assert True

def test_bar1():
    sleep(1)
    assert True

执行 pytest -n auto 启用并行测试,它会自动检测计算机的 CPU 核心数量,并根据可用的核心数来并行运行测试用例,以加快测试执行速度。

总结

  • pytest 常用的插件。
  • Pytest 常用插件的使用。