Pytest 测试用例执行顺序自定义 Pytest-ordering
接下来我们来学习 pytest 中如何自己指定测试用例的执行顺序。
简介
Pytest-ordering 是一个 Pytest 插件,可自定义 Pytest 测试用例的执行顺序。这对于确保特定的测试用例在其他测试用例之前或之后运行非常有用。
pytest-ordering 是一个 pytest 插件,它可以帮助我们自定义测试用例的执行顺序。在默认情况下,pytest 会按照测试用例在代码中出现的顺序来执行。但是有时候,我们希望某些测试用例先执行,某些测试用例后执行,尤其在有依赖关系的集成测试中,这个功能就显得特别有用。例如,假设有一个测试场景,其中一个测试步骤必须在另一个步骤之后执行,或者我们希望某些测试用例先跑,某些测试用例后跑,pytest-ordering 就能帮我们轻松实现这一点。
使用场景
对于集成测试,经常会有上下文依赖关系的测试用例。比如 10 个步骤,拆成 10 条 case,这时候能知道到底执行到哪步报错。
而用例默认执行顺序是自上而下执行的。
这时可以通过 setup,teardown 和 fixture 来解决。也可以使用对应的插件。
给大家举个例子,在集成测试中,测试用例是可能会出现上下文依赖关系的。比如在一个复杂的系统中,测试用例可能是按照步骤分开的。比如你有一个 10 步骤的流程测试,拆分成 10 个不同的用例。如果没有自定义执行顺序,测试可能会出现先后顺序不对,导致无法准确知道在哪个步骤出现了问题。默认的执行顺序是自上而下,但如果步骤间有依赖关系,就可以使用像 pytest-ordering 这样的插件来控制执行顺序。
使用步骤
- 安装:
pip install pytest-ordering
- 用法:
@pytest.mark.run(order=2)
注意:多个插件装饰器(>2)的时候,有可能会发生冲突。
那具体如何使用呢?首先,需要通过 pip install pytest杠ordering 来安装它。安装完成后,就可以使用 @pytest点mark点run 然后通过设置 order 参数的值来指定测试用例的执行顺序。比如,如果我们希望某个测试在另一个测试之前执行,你可以给它加上 order等于1,这样它会被优先执行。
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点mark点first、@pytest点mark点second 和 @pytest点mark点third。默认情况下,测试用例是按从上到下的顺序执行的。然后我们通过在每个测试用例上使用 @pytest点mark点run(order等于n) 来明确指定它们的执行顺序。如果你希望 test foo 后执行,test bar 先执行,可以将 test bar 的 order 设置为 1,test foo 设置为 2,像这样控制顺序。
在未使用 Pytest-ordering 时执行顺序默认为从上到下。
如果没有使用 pytest-ordering 插件,pytest 会默认按照代码中的顺序执行测试用例。所以,在没有插件的情况下,测试用例总是自上而下执行,按写的顺序一条一条运行。
使用 Pytest-ordering 自定义执行顺序。
通过使用 pytest-ordering,我们就能自定义测试用例的执行顺序。比如在这张图中,我们通过设置 order等于1,order等于2 等来控制测试用例的执行顺序。这样,我们就可以确保在复杂的测试场景中,先执行某些测试,后执行其他测试,从而避免因执行顺序不当导致的测试错误。
下面来给大家演示一下具体操作。进入项目之后,我们先打开terminal,然后来安装一下,使用 pipe install 它 test ordering 好。安装好之后,我们在 tests 下面来创建一个新的测试文件,比如说就叫做 test ordinary。在这个里面我们来定义三个测试方法,比如说它叫 test for,然后我们就直接给他写成这个通过的这种,这个叫 test bug。然后也是写成通过的这种。后面我们改写 test button,然后也是给他简单的写一个断言。好,那下面的话我们就来指定一下它的执行顺序,因为直接这么执行的话,我们先来看一看它是不是按照上下的顺序这样来执行的,对吧?那下面比如说我们来给他指定一下这个第一个执行,那么我们就可以用 Pad test,点。mark、点2,然后比如说我们用run, run 里面的话我们就可以用 order 等于一来指定好,比如说这个我们第二个直行,那这块呢?我们的 order 就可以等于2,这个第三个直行,我们就给它这个等于3。好,那么这个指定完了之后,我们再来执行一下。哎,可以看到第二个里面的它第一个执行了,然后指定为 2 的第二个执行了,指定为 3 的第三个执行了。
./assets/Pytest测试用例执行顺序自定义Pytest-ordering.mp4
总结
- 插件使用场景
- 插件使用步骤
下面来总结一下,这个章节我们学习了如何使用 pytest杠ordering 插件来指定用例的执行顺序。好了,关于如何指定执行顺序我们先介绍到这里。