栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/987227.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号