1
我使用pytest最近做软件测试,但在动态参数化测试装置时遇到问题。测试时,我想能够提供可以选择:通过在安装根目录Pytest的addoptions问题和动态参数化测试装置
下面是指定其文件名
B)测试中的所有文件
A)测试一个特定的文件我目前的conftest.py。我想要它做的是如果你选择选项A(--file_name),使用指定的文件名创建一个参数化的测试夹具。如果您选择选项B(--all_files),请提供所有文件的列表作为参数化测试夹具。
import os
import pytest
def pytest_addoption(parser):
parser.addoption("--file_name", action="store", default=[], help="Specify file-under-test")
parser.addoption("--all_files", action="store_true", help="Option to test all files root directory")
@pytest.fixture(scope='module')
def file_name(request):
return request.config.getoption('--file_name')
def pytest_generate_tests(metafunc):
if 'file_name' in metafunc.fixturenames:
if metafunc.config.option.all_files:
all_files = list_all_files()
else:
all_files = "?"
metafunc.parametrize("file_name", all_files)
def list_all_files():
root_directory = '/opt/'
if os.listdir(root_directory):
# files have .cool extension that need to be split out
return [name.split(".cool")[0] for name in os.listdir(root_directory)
if os.path.isdir(os.path.join(root_directory, name))]
else:
print "No .cool files found in {}".format(root_directory)
我越是这种不甘示弱,我只能得到工作的选择之一,但不是其他...什么,我需要做的就是两个选项(可能更多)动态地创建参数化的测试夹具?
这是部分工作......这真的很怪异,但它看起来像我的一些测试通过,有些不。对于失败,我最终得到一个AttributeError:'list'对象没有属性'endswith'。看起来有时候我得到一个无参数化的夹具,因为我可以在测试日志输出中看到整个文件列表,而不是只有1个条目。 – t88
@ t88这可能是因为parser.addoption(“ - file_name”,...)中的'default = []'是错误的。为了一致性,你应该做'default ='''。如果它没有帮助,然后给我们看看测试。你删除了'file_name'函数吗? – freakish
你是对的!另外,事实证明files.append(fn)正在返回一个列表,如果我指定了一个file_name,它将返回一个列表,而不是使用指定的字符串作为参数化测试夹具。谢谢! – t88