【发布时间】:2019-04-30 21:16:06
【问题描述】:
我正在使用 pytest 来测试嵌入式系统的 python 模型。要测试的功能因平台而异。 (在这种情况下,我使用“平台”来表示嵌入式系统类型,而不是操作系统类型)。
组织测试最直接的方法是根据平台类型将它们分配到目录。
/platform1
/platform2
/etc.
pytest /platform1
这很快就变得难以支持,因为许多功能跨平台重叠。从那以后,我将测试移到了一个目录中,每个功能区域的测试都分配给了一个文件名(例如 test_functionalityA.py)。 然后我使用 pytest 标记来指示文件中的哪些测试适用于给定平台。
@pytest.mark.all_platforms
def test_some_functionalityA1():
...
@pytest.mark.platform1
@pytest.mark.platform2
def test_some_functionlityA2():
...
虽然我希望喜欢让 'conftest' 自动检测平台类型并只运行适当的测试,但我已经让自己指定在命令行上运行哪些测试。 p>
pytest -m "(platform1 or all_platforms)"
问题:(终于!)
有没有办法简化事情并让 pytest 默认运行所有未标记的测试,以及在命令行上通过“-m”传递的所有测试?
例如: pytest -m "platform1"
会运行标记为@pytest.mark.platform1 的测试以及标记为@pytest.mark.all_platforms 的所有测试,甚至是根本没有@pytest.mark 的所有测试吗?
鉴于大量共享功能,能够删除 @pytest.mark.all_platforms 行将是一个很大的帮助。
【问题讨论】: