Pytest计划测试组之间的间隔



有没有什么方法可以告诉pytest运行一组特定的测试,然后等待一段已知的时间,然后运行另一组测试?例如,如果我有以下要求的测试:

  • 每个测试有3个部分(要执行的3种方法(
    • 在运行第1部分后经过特定的已知时间后,才能为每个测试运行第2部分
    • 在运行第2部分后经过特定的、已知的时间量之前,不得为每个测试运行第3部分
  • 如果我为每个测试将第1、2和3部分缝合在一起,并且只使用time.sleep((,那么执行所有测试将花费太长时间
  • 相反,我想连续运行所有的第1部分,然后等待一段已知的时间,然后连续运行所有第2部分,然后再等待一段未知的时间,再运行所有第3部分

似乎可以使用标记来实现https://docs.pytest.org/en/stable/example/markers.html并且可能实现钩子https://docs.pytest.org/en/latest/reference.html#hooks基于所使用的标记来实现某些行为,尽管我对pytest钩子不是很熟悉。

我还遇到了pytest订购https://pytest-ordering.readthedocs.io/en/develop/这似乎提供了接近我想要的行为。我只是需要一种在某些测试组之间等待的方式。

您可以将所有第一部分的测试合并到一个类中,将所有第二部分的测试组合到另一个类,并使用类作用域fixture来处理延迟,类似于以下内容:

import pytest
import time

@pytest.fixture(scope='class')
def delay():
time.sleep(5)

class TestPart1:
def test_one_part_1(self):
assert 1 == 1
def test_two_part_1(self):
assert 2 == 2

@pytest.mark.usefixtures("delay")
class TestPart2:
def test_one_part_2(self):
assert 1 == 1
def test_two_part_2(self):
assert 2 == 2

最新更新