gpt4 book ai didi

python - pytest.ini 值未正确设置

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:54 28 4
gpt4 key购买 nike

尝试动态设置 pytest.ini 文件中的选项。选项 testpaths 确定 pytest 将从哪些目录收集测试。我想让用户能够选择测试目录 ab

conftest.py

第一个钩子(Hook)创建一个解析器选项。第二个钩子(Hook)拉取解析器选项读取值并将测试路径添加到配置对象下的测试路径选项。

@pytest.hookimpl() 
def pytest_addoption(parser):
"""Creates a parser option"""

# Allows the user to select the test suite they want to run
parser.addoption("--suite", action="store", default="None"
, choices=['a', 'b']
, help="Choose which test suite to run.")

@pytest.hookimpl()
def pytest_configure(config):
print("Determining test directory")
suite = config.getoption("--suite")

if suite == "a":
config.addinivalue_line("testpaths", "tests/a")

elif suite == "b":
config.addinivalue_line("testpaths", "tests/b")

所以如果我运行pytest --suite a它应该加载测试套件下的所有测试。它不是。它加载所有测试,就像该选项不存在一样。

最佳答案

该值设置正确。您的问题是,在调用 pytest_configure Hook 时,ini 文件值和命令行参数已经解析,因此添加到 ini 值不会带来任何内容 - 它们不会被读取又来了。特别是,ini 文件中的 testpaths 值已被处理并存储在 config.args 中。所以我们可以改写config.args:

@pytest.hookimpl()
def pytest_configure(config):
suite = config.getoption('--suite')

if suite == 'a':
config.args = ['tests/a']
elif suite == 'b':
config.args = ['tests/b']
<小时/>

编辑

在测试中访问配置的示例(通过 pytestconfig 固定装置):

def test_spam(pytestconfig):
print(pytestconfig.getini('testpaths'))
print(pytestconfig.args)
suite_testpaths = set(pytestconfig.args) - set(pytestconfig.getini('testpaths'))
print('testpaths that were added via suite arg', suite_testpaths)

关于python - pytest.ini 值未正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48235045/

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