Py.test:在pytest_generate_tests之前运行初始化方法

时间:2015-08-13 14:20:36

标签: python python-2.7 pytest

我正在使用pytest_generate_tests制作测试套件,首先生成随机模拟文件,文件名存储在初始化对象中。然后由file0.txt生成测试; file1.txtcat %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%; } 之前运行一个方法,并在会话中的所有测试中保留初始化类的实例?

1 个答案:

答案 0 :(得分:1)

在给出使用全局变量的第二种方法时,只是写出问题给了我一个明显的解决方案:

if "initializer" not in globals():
    initialize()

其中initialize创建全局变量initializer,因此只创建一次。但是,我真的不喜欢使用全局变量,因为我认为固定装置或其他py.test技术可以帮助我,并且很乐意听到更好的答案。