今天Nelly问我Pytest能不能支持从TestClass类外传入参数?从类外批量传入各个test方法须要的参数。由于数据文件可能有不少状况,不方便依次匹配。 然而又必须用类对用例进行归类及复用,数据要经过类外进行遍历。不能直接使用pytest.mark.parametrize。python
这里采起的一个作法是:测试
- 添加命令行选项 --data,接受一个yaml文件
- data这个fixture方法里,获取--data传进来的文件路径,打开并加载全部数据,从request中获取调用data 的用例名,从全部数据中取出该条用例的数据返回
具体参考如下代码: data.yaml文件内容,注意数据字段要与测试方法名一致,方便自动对应数据。命令行
test_a: a: 1 b: 2 test_b: a: 3 b: 4
conftest.py文件内容code
import pytest import yaml def pytest_addoption(parser): # 添加运行参数 parser.addoption("--data", action="store", help="data file") @pytest.fixture def data(request): file_path = request.config.getoption("--data") # 获取--data参数传的文件路径 with open(file_path) as f: # 加载全部数据 all_data = yaml.safe_load(f) test_case_name = request.function.__name__ # 获取调用的data这个fixture方法的测试方法名称 return all_data.get(test_case_name) # 只返回指定用例的数据
测试模块test_demo3.py内容get
import pytest class TestDemo(object): def test_a(self, data): # 全部用例要带上data这个fixture参数 print(data) def test_b(self, data): print(data) if __name__ == '__main__': pytest.main(['test_demo3.py', '-sq', '--data=data.yaml'])