我正在pycharm中用pytest写测试,测试被分为各种类。
我想指定必须在其他类之前运行的某些类 *。
我看到过关于stackoverflow的各种问题(比如specifying pytest tests to run from a file和how to run a method before all other tests)。
这些问题和其他各种问题都是想选择特定的函数来按顺序运行,我理解这可以用fixtures
或pytest ordering
来完成。
我不关心每个类的哪个函数先运行,我关心的是类**按照我指定的顺序运行,这可能吗?
2条答案
按热度按时间sxissh061#
方法
您可以使用
pytest_collection_modifyitems
钩子修改收集测试(items
)的顺序,这样做的另一个好处是不必安装任何第三方库。通过一些自定义逻辑,这允许按类排序。
完整示例
假设我们有三个测试类:
TestExtract
TestTransform
TestLoad
还假设,默认情况下,测试执行顺序为字母顺序,即:
x1个月5个月1x-〉x1个月6个月1x-〉x1个月7个月1x
这由于测试类的相互依赖性而对我们不起作用。
我们可以将
pytest_collection_modifyitems
添加到conftest.py
,如下所示,以强制执行所需的执行顺序:关于实施细节的一些意见:
CLASS_ORDER
不必详尽无遗,您可以只对那些需要强制执行顺序的类进行重新排序(但请注意:如果重新排序,则任何未重新排序的类将在任何重新排序的类之前执行)items
必须就地修改,因此最终的items[:]
赋值bnl4lu3b2#
@swimmer answer很棒,我稍微修改了一下,以便测试组织成函数而不是类。