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()
是否可以检测一个标记是否被排除?
我使用 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()