pytest:在夹具中检测-m "not my_mark"

pytest: detect -m "not my_mark" in fixture

是否可以检测一个标记是否被排除?

我使用 pytest 运行 针对嵌入式目标进行一些测试。对于某些测试设置,我可以通过 epdu 控制电源。

对于带有 epdu 的设置,我想在测试完成后关闭测试设备。

对于没有 epdu 的设置,使用 -m "not power" 调用测试,但这里同样重要的是 power_on fixture 不会尝试与 epdu

通信
@pytest.fixture(scope='session', autouse=True)
def power_on():
    # TODO: just return it called with `-m "not power"`
    power_on_test_equipment()
    yield
    power_off_test_equipment()

@pytest.mark.power_control
def test_something():
    power_something_off()

我发现 request.keywords['power'] 如果我 运行 pytest 与 -m power 将是真实的,但如果我 运行 没有标记或 [=12] 将不存在=],这对我的场景没有多大帮助。

我可以使用两个标记来解决问题,比如`-m "no_power 而不是 power",但它看起来不是很优雅。

一种可能性是检查命令行参数。如果你知道你总是将它传递为 -m "not power",你可以这样做:

@pytest.fixture(scope='session', autouse=True)
def power_on(request):
    power = 'not power' not in request.config.getoption('-m')
    if power:
        power_on_test_equipment()
    yield
    if power:
        power_off_test_equipment()