gpt4 book ai didi

python - 在 pytest 中是否可以访问参数化装饰器中的命令行参数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:36 24 4
gpt4 key购买 nike

想象一个玩具测试定义:

@pytest.mark.parametrize("bar", [1, 2, 3])
def test_foo(bar):
assert some_result(bar)

我现在希望能够在命令行上提供bar。据我所知,这还没有内置到 Py.Test 中:

pytest --param "bar=7"

并像这样编写我的测试参数定义:

@pytest.mark.parametrize(*from_args_if_available("bar", [1, 2, 3]))
def test_foo(bar):
assert some_result(bar)

可以实现from_args_if_available()再次解析所有命令行参数并当然寻找--params。另一种方法是使 request.config 全局可用(这会很难看)。

我想知道是否可以从任何地方访问 request.config 元素,以便将所有命令行选项定义集中在一个位置(从而获得帮助)。

那么还有另一种方法来访问我可以按照所描述的方式使用的已解析的命令行选项吗?

最佳答案

我将在这里发布我当前正在工作的解决方案:

在文件utils.py中,我定义了一个函数param:

def param(name, default_value):
parser = argparse.ArgumentParser()
parser.add_argument("--param", action="store")
args, unknown = parser.parse_known_args()
try:
if args.param:
for p_name, p_value in (param.split("=") for param in args.param.split(";")):
if p_name == name:
return p_name, ast.literal_eval(p_value)
except (SyntaxError, ValueError):
raise RuntimeError(
"Wrong parameter definition: %r, must be 'name1=<expr>;name2=<expr>;..'"
% args.param)
return name, default_value

可以这样使用:

import pytest
from util import param

@pytest.mark.parametrize(*param("bar", [1, 2, 3]))
def test_foo(bar, env_type):
print("param: ", "bar", bar)
assert bar < 7

pytest 调用现在看起来像这样:

pytest --param "bar=[5,6,7];unused=range(5)"

conftest.py 中,我现在还必须添加 param 参数 - 否则当我在命令行上定义参数时会引发异常:

def pytest_addoption(parser):
parser.addoption("--param", action="store", help="overwrite test parameters")

优点:它有效:)

缺点:这是一个丑陋的解决方法,param() 无法在 conftest.py 内定义

关于python - 在 pytest 中是否可以访问参数化装饰器中的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com