pytest_generate_tests()函数
1.介绍
pytest_generate_tests
这个Hook函数是在Pytest收集测试用例时被调用,它有一个参数Metafunc,可以获得测试函数的上下文信息,并且可以调用Metafunc.parametrize()
对测试函数进行参数化。
2.该hook函数存放的位置
pytest_generate_tests()函数编写在测试函数(test_XXX()函数) 相同目录下的conftest.py文件中
3.举个栗子
conftest.py
"""define for conftest"""test_data = [{"test_input": "3+5", "expected": 8, "ID": "验证3+5=8" }, {"test_input": "2+4", "expected": 6, "ID": "验证2+4=6" }, {"test_input": "6 * 9", "expected": 54, "ID": "验证6*9=54" } ]def pytest_generate_tests(Metafunc): IDs = [] if "parameters" in Metafunc.fixturenames: for data in test_data: IDs.append(data['ID']) # IDs 表示测试用例的编号 Metafunc.parametrize("parameters", test_data, IDs=IDs, scope="function") # 用test_data这个列表对parameters进行参数化。
test_demo.py
"""define for test demo file using parametrize hook."""import pytestdef test_eval(parameters): assert eval(parameters['test_input']) == parameters['expected']if __name__ == '__main__': pytest.main(["-sv", "demo_1.py"])
运行结果:
collecting ... collected 3 items
demo_1.py::test_eval[\u9a8c\u8bc13+5=8] PASSED
demo_1.py::test_eval[\u9a8c\u8bc12+4=6] PASSED
demo_1.py::test_eval[\u9a8c\u8bc16*9=54] PASSED
上面的结果表示:
pytest_generate_tests这个Hook函数会在测试函数test_demo执行时自动执行,通过Metafunc可以获得测试函数的上下文信息,比如测试函数的fixture信息。
这里,如果测试函数中包含parameters这个fixture,通过Metafunc.parametrize函数使用test_data对parameters这个fixture进行参数化,使用IDs组成的列表来标记测试数据,并标记测试scope为function级别,表示每一个测试函数都会自动调用这个hook函数。
通过Hook函数方式对测试数据进行参数化,不需要对测试函数进行任何改变,只要所有的测试函数使用相同格式的测试数据即可。在工作中,这种方式是非常常用的方法。
总结以上是内存溢出为你收集整理的Python的hook函数(pytest_generate_tests())进行测试的参数化全部内容,希望文章能够帮你解决Python的hook函数(pytest_generate_tests())进行测试的参数化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)