pytest如何通过使用命令行参数来skip用例

当我们想要skip一个pytest用例时,习惯去使用@pytest.mark.skipif,我有一个需求是要用命令行参数来跳过用例,我这样写:

# conftest.py
def pytest_addoption(parser):
	parser.addoption(
        "--mode", action="store", default="fast", help="mode: fast or slow"
    )

# 通过某种方法把命令行参数储存下来
Baseconfig.mode = request.config.getoption("--mode")

# test.py
@pytest.mark.skipif(Baseconfig.mode == slow, reason="do not support")
class TestFast:
...

当我运行test.py时,发现用例并没有跳过,我猜测skipif是在用例收集阶段完成的,还没有进行命令行参数复制,所以Baseconfig.mode为空(默认值是空),所以我改了一下:

@pytest.mark.skipif(Baseconfig.mode == '', reason="do not support")

这样用例果然跳过了,这也印证了我的猜想。
在网上搜索之后发现有两种方法来解决这个问题:

1. 使用pytest_collection_modifyitems钩子

这是一个可以在用例收集阶段改变用例的钩子,我在conftest里这样写:

# conftest.py
def pytest_collection_modifyitems(config, items):
    slow_skip = pytest.mark.skip(reason="do not support slow")
    if config.getoption('--mode') == 'slow':
        for item in items:
            if "slow" in item.name:
                item.add_marker(slow_skip)

items就是每一个用例,这段代码的意思就是如果–mode是slow,则会跳过所有用例名称里带slow的case。

2. 在用例执行过程中skip

# test.py
def test_slow():
	if Baseconfig.mode == "slow":
		pytest.skip()

不过这样相当于也要执行用例的前置操作了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值