Python Py.test:在pytest\u生成\u测试之前运行初始化方法
我正在使用py.test制作一个测试套件,它首先生成随机模拟的文件,文件名存储在初始化对象中。然后由Python Py.test:在pytest\u生成\u测试之前运行初始化方法,python,python-2.7,pytest,Python,Python 2.7,Pytest,我正在使用py.test制作一个测试套件,它首先生成随机模拟的文件,文件名存储在初始化对象中。然后由pytest\u generate\u tests生成测试file0.txt,file1.txt等。 测试是从一个YAML文件生成的,该文件包含在输入字符串中,如cat%s,以及一个替代字符串,如file*.txt,它在pytest\u generate\u Tests中匹配的每个文件生成一个测试。因此,我需要文件在调用pytest\u generate\u tests之前存在,否则文件将不匹配
pytest\u generate\u tests
生成测试file0.txt
,file1.txt
等。
测试是从一个YAML文件生成的,该文件包含在输入字符串中,如cat%s
,以及一个替代字符串,如file*.txt
,它在pytest\u generate\u Tests
中匹配的每个文件生成一个测试。因此,我需要文件在调用pytest\u generate\u tests
之前存在,否则文件将不匹配
在遇到问题之前,我在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
test_a(initializer, input_string):
# ...
然后我可以在文件tests\u 0.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
test_a(initializer, input_string):
# ...
和测试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\u generate\u tests
的顶部,并从test\u a
中调用conftest.initializer,但随后,我添加的每个测试方法都会运行初始化步骤,test\u b
等
因此,问题是,我如何在
pytest\u generate\u tests
之前运行一个方法,并在会话中的所有测试中保持初始化类的实例?刚刚编写的问题给了我一个明显的解决方案,因为第二种方法使用了全局变量:
if "initializer" not in globals():
initialize()
其中
initialize
创建全局变量initializer
,因此只创建一次。然而,我并不真的喜欢与globals合作,因为我认为Fixture或其他一些py.test
技术可以帮助我,并且很乐意听到更好的答案。只是宣传你的问题,让你知道实现它的正确技术。。