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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Pytest中,可以使用pytest-rerunfailures插件来实现失败用例的重跑。安装该插件的方式是通过pip install pytest-rerunfailures命令进行安装。安装完成后,可以通过两种方式来实现失败用例的重跑。 方式一是在命令行或者main()函数中使用pytest.main(\['-vs','test_a.py','--reruns=2'\])命令来执行测试脚本,并通过--reruns参数指定重跑次数。例如,pytest -vs ./test_a.py --reruns 2 --reruns-delay 2表示失败重试2次,在每次重试前会等待2秒。 方式二是在pytest.ini配置文件中使用。在pytest.ini文件中,可以通过addopts参数来添加--reruns参数,并指定重跑次数和重跑间隔时间。例如,\[pytest\] addopts = -s --reruns 2 --reruns-delay 2可以实现失败重试2次,在每次重试前等待2秒。 需要注意的是,使用pytest-rerunfailures插件时,可以在测试用例使用@pytest.mark.flaky(reruns=3)装饰器来指定重跑次数。例如,@pytest.mark.flaky(reruns=3) def test01(): assert randint(1, 10) == 6可以实现失败重试3次。 总结起来,要实现pytest命令行重跑失败用例,可以通过命令行参数或者pytest.ini配置文件来指定重跑次数和重跑间隔时间。 #### 引用[.reference_title] - *1* *3* [四、Pytest框架 — pytest.ini文件和用例执行的顺序以及跳过测试和失败重试](https://blog.csdn.net/m0_59868866/article/details/125002374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pytest系列教程——12、用例执行失败后重跑](https://blog.csdn.net/bo_mask/article/details/126761257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值