【发布时间】:2019-07-14 21:49:30
【问题描述】:
我正在使用 Pytest 测试一个组件的多个版本。有些测试可以在所有版本上运行,有些是特定于版本的。例如
tests
|
|-- version1_tests
| |-- test_feature_1_1.py
| |-- test_feature_1_2.py
| |-- test_feature_1_n.py
|
|-- version2_tests
| |-- test_feature_2_1.py
| |-- test_feature_2_2.py
| |-- test_feature_2_n.py
|
|-- common_tests
| |-- test_feature_common_1.py
| |-- test_feature_common_2.py
| |-- test_feature_common_n.py
我想标记我的测试,以便我可以选择是要从命令行测试版本 1 (version1_tests + common_tests) 还是版本 2 (version2_tests + common_tests)。
我目前这样做的方式是为每个测试模块添加一个 pytest 标记,然后从命令行指定标记。例如在test_feature_1_1.py:
import pytest
pytestmark = pytest.mark.version1
class TestSpecificFeature(object):
...
然后运行:python -m pytest -m "common and version1"
这很好用,但我必须手动将标记添加到每个模块,这很乏味,因为实际上有几十个(而不是示例中的 3 个)。
我们曾经使用 Robot Framework,通过在 __init__.robot 文件中添加标签来“标记”整个文件夹是微不足道的。在 Pytest 中是否有任何等效的方法可以做到这一点,或者是我能做到的最好的标记每个模块?
【问题讨论】:
-
pytest -k "common and version1"不行吗?除此之外,您当然可以根据您需要的任何条件通过item.add_marker()动态分配标记。 -
虽然它不像我最初要求的那样使用标记,但就我的情况而言,它工作得很好,我认为这是一个比我正在寻找的更好的解决方案。您是否介意将其发布为答案,并且可能还详细说明使用
item.add_marker()或任何其他可能实际使用标记的解决方案?这样一来,如果有人稍后阅读本文并且使用表达式的解决方案对他们不起作用,他们可以有另一种选择。