【问题标题】:How to run all test script file inside a directory in a specific order using pytest如何使用pytest以特定顺序运行目录中的所有测试脚本文件
【发布时间】:2021-12-27 07:00:32
【问题描述】:

在 pycharm 中我有一个名为 Tests 的测试目录,里面有 3 个测试脚本文件 - test_1.py、test_2.py 和 test_3.py。

我想使用 pytest 以特定顺序执行上述文件。

顺序应该是:

test_2.py, test_1.py, test_3.py

我看到我们可以使用标记以特定顺序在测试脚本文件中运行测试方法,但我不知道如何以特定顺序运行测试文件。

注意-我只给出了 3 个测试文件的示例。在我的项目中,我有大约 25 个测试文件,因此我需要一个可以应用于所有测试文件的通用解决方案。

【问题讨论】:

  • 通常,测试执行的顺序无关紧要。您能解释一下为什么需要按特定顺序执行它们吗?您的问题可能还有其他解决方案。
  • 这能回答你的问题吗? Test case execution order in pytest
  • @Virtuoz 我在 test_2.py 文件中有一些需要首先执行的依赖测试方法。这适用于它们相互依赖的所有测试文件。这就是我想按特定顺序执行的原因。
  • @zr0gravity7 此解决方案适用于 2 或 3 个文件。但是我有多个文件(我只举了 3 个文件的例子。在我的项目中,我有大约 25 个文件)。所以我想要一个适用于所有测试文件的通用解决方案
  • @GauravChauhan 我建议研究 pytest 固定装置:docs.pytest.org/en/6.2.x/fixture.html。他们似乎可以用更简洁的方式解决您的问题。

标签: python pytest


【解决方案1】:

如果您无法删除测试依赖项(这始终是最好的解决方案),最简单的方法可能是按照您需要的顺序在命令行上调用测试,例如在你的例子中是这样的:

python -m pytest test2.py test1.py test3.py

如果这不是一个选项,您可以使用带有pytest-order 的测试标记,如上所述。如果您只想订购测试模块,而不是模块内的测试,您可以在每个模块的第一个测试中添加一个标记,并在 pytest 调用中使用 --order-group-scope="module" 参数。鉴于您拥有问题中给出的测试模块,您必须执行以下操作:

test_2.py

@pytest.mark.order(0)
def test_something():
   ...

def test_something_else():
   ...

... # more tests

test_1.py

class TestSomething:
    @pytest.mark.order(1)
    def test_1(self):
        ...

... # more tests

test_3.py

@pytest.mark.order(2)
def test_something():
   ...

... # more tests

然后运行 ​​pytest,例如:

python -m pytest -vv --order-group-scope="module"

这将首先对模块内的测试进行排序(例如,在这种情况下什么都不做),然后根据标记对模块本身进行排序。

免责声明
我是pytest-order的维护者。

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多