我正在使用pytest_generate_tests
制作测试套件,首先生成随机模拟文件,文件名存储在初始化对象中。然后由file0.txt
生成测试; file1.txt
,cat %s
等
测试是从YAML文件生成的,该文件包括像file*.txt
这样的输入字符串和类似pytest_generate_tests
的替换字符串,它在pytest_generate_tests
中匹配的每个文件生成1个测试。因此,我需要在调用conftest.py
之前存在文件,否则文件将不匹配。
在遇到问题之前,我在@pytest.fixture(scope="session", autouse=True)
def initializer(request):
# ...do some stuff with the request
return InitializeTests(...)
class InitializeTests():
def __init__(self, n):
# ...generate n files
中有一个初始化夹具:
tests_0.py
然后我可以在文件test_a(initializer, input_string):
# ...
中使用:
test_a
和def pytest_generate_tests(metafunc):
input_strings = manipulate_the_yaml_file() # This requires the files to exist.
if "input_string" in metafunc.fixturenames:
metafunc.parametrize("input_string", input_strings)
由以下内容生成:
pytest_generate_tests
然后我尝试使用全局变量来获取初始化程序并在文件中共享它,如here中所述。然后我将初始化放在test_a
的顶部并从test_b
内调用conftest.initializer,但是然后为我添加的每个测试方法pytest_generate_tests
等运行初始化步骤。
所以问题是,如何在label{
display:inline-block;
width:22%;
margin-left:2%;
}
之前运行一个方法,并在会话中的所有测试中保留初始化类的实例?
答案 0 :(得分:1)
在给出使用全局变量的第二种方法时,只是写出问题给了我一个明显的解决方案:
if "initializer" not in globals():
initialize()
其中initialize
创建全局变量initializer
,因此只创建一次。但是,我真的不喜欢使用全局变量,因为我认为固定装置或其他py.test
技术可以帮助我,并且很乐意听到更好的答案。