gpt4 book ai didi

pytest - 在 setup_module 中使用 funcargs

转载 作者:行者123 更新时间:2023-12-01 15:11:23 27 4
gpt4 key购买 nike

我在 conftetst.py 中包含了我自己的命令行选项

def pytest_addoption(parser):
parser.addoption("--backend" , default="test_backend",
help="run testx for the given backend, default: test_backend")

def pytest_generate_tests(metafunc):
if 'backend' in metafunc.funcargnames:
if metafunc.config.option.backend:
backend = metafunc.config.option.backend
backend = backend.split(',')
backend = map(lambda x: string.lower(x), backend)
metafunc.parametrize("backend", backend)

如果我在模块内的普通函数中使用此命令行选项:

module: test_this.py;  

def test_me(backend):
print backend

它按预期工作。

现在我想包含 setup_module 函数来在一些测试之前创建/复制一些东西:

def setup_module(backend):
import shutil
shutil.copy(backend, 'use_here')
...

不幸的是,我现在知道如何在 setup_module 函数中访问此命令行选项。什么都没用,我试过了。

感谢您的帮助和建议。

干杯

最佳答案

正在讨论一个 API 扩展,它允许在设置资源中使用 funcargs,您的用例就是一个很好的例子。请在此处查看正在讨论的 V2 草案:http://pytest.org/latest/resources.html

今天,您可以这样解决您的问题::

# contest of conftest.py

import string

def pytest_addoption(parser):
parser.addoption("--backend" , default="test_backend",
help="run testx for the given backend, default: test_backend")

def pytest_generate_tests(metafunc):
if 'backend' in metafunc.funcargnames:
if metafunc.config.option.backend:
backend = metafunc.config.option.backend
backend = backend.split(',')
backend = map(lambda x: string.lower(x), backend)
metafunc.parametrize("backend", backend, indirect=True)

def setupmodule(backend):
print "copying for", backend

def pytest_funcarg__backend(request):
request.cached_setup(setup=lambda: setupmodule(request.param),
extrakey=request.param)
return request.param

给定一个包含两个测试的测试模块:

def test_me(backend):
print backend

def test_me2(backend):
print backend

然后您可以运行以检查事情是否如您预期的那样发生:

$ py.test -q -s --backend=x,y

收集了 4 个项目 为 x 复制 X .copying for y 是 。X .y

4 在 0.02 秒内通过

由于有两个后端在测试中,您会得到四个测试,但模块设置仅针对模块中使用的每个后端完成一次。

关于pytest - 在 setup_module 中使用 funcargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358437/

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