我想按顺序而不是并行地运行我的Python unittest类的各个测试(函数)。我可以告诉它是并行的,因为第一个函数/test将一条记录写入TinyDB,而另一个函数/test(失败)需要读取新记录并进行存在测试。
那么,我如何强制严格的顺序测试执行呢?如果这是不可能的,我可以在创建多个测试时强制执行严格的顺序处理吗?(我不喜欢这样做,因为我希望模块和它们的test_modules之间有1:1的关系。)
unittest的答案
我可以通过创建一个主测试py文件来实现严格的执行。命名为run_all_tests.py模块有单独的类。我一个一个地触发它们。
切换到pytest和fixture
无论如何,我不喜欢在函数级别上以复杂/声明的方式控制序列的缺点。因此,我切换到pytest。首先,我喜欢有一个论证显示了序列。这证实了我们的期望:
pytest -setup-show test_myfunction.py
最重要的是,您可以将装饰器@pytest.fixture()
应用于之前运行的方法。这并不一定能帮助我们理解第一行的序列。此外,它还提醒我们要进行独立测试——使用@pytest.fixture()
注释方法作为测试函数的参数。通过这种方式,我们为单个功能设计了一个固定装置。不要误以为是单位测试的setUp()
方法。它们在每个方法之前运行。每一个。setUpClass()
在调用任何测试函数之前运行一次。
对于那些仍然想要声明顺序的人,你可以在这里找到:https://pypi.org/project/pytest-order/, https://github.com/pytest-dev/pytest-order