python使用parametrize驱动yaml文件参数
时间: 2023-12-04 14:06:21 浏览: 85
好的,这是一个关于Python中使用parametrize驱动YAML文件参数的问题。对于这个问题,我可以给出以下回答:
在pytest中,我们可以使用@parametrize装饰器来驱动测试用例参数化,从而避免编写大量重复的测试代码。而使用YAML文件来存储测试数据和参数,则可以进一步提高测试代码的可读性和可维护性。
具体实现可以参考以下步骤:
1. 创建YAML文件来存储测试数据和参数
例如,我们可以创建一个名为test_data.yaml的文件,用于存储测试数据和参数,格式如下:
```
- name: test_case_1
input: [1, 2]
expect: 3
- name: test_case_2
input: [10, 20]
expect: 30
```
其中,name表示测试用例的名称,input表示测试用例的输入参数,expect表示测试用例的预期输出结果。需要注意的是,input参数需要以列表的形式给出。
2. 在测试代码中使用@parametrize装饰器来驱动测试用例参数化
例如,我们可以创建一个名为test_calc.py的测试文件,用于测试一个加法函数,代码如下:
```
import yaml
import pytest
def add(x, y):
return x + y
with open('test_data.yaml') as f:
test_data = yaml.safe_load(f)
@pytest.mark.parametrize("input_data, expect", [(data['input'], data['expect']) for data in test_data], ids=[data['name'] for data in test_data])
def test_calc(input_data, expect):
assert add(*input_data) == expect
```
在这个测试代码中,我们首先使用yaml.safe_load()函数读取test_data.yaml文件中的数据,然后使用列表推导式将测试数据和参数转换成@parametrize装饰器所需的格式,并使用ids参数为每个测试用例命名。最后,我们在test_calc测试函数中直接使用input_data和expect参数即可。
3. 运行测试代码
在终端中进入到测试文件所在的目录,运行以下命令即可执行测试:
```
pytest test_calc.py
```
总的来说,使用Python中@parametrize装饰器驱动YAML文件参数是一种方便、可读性高、可维护性高的测试方法,可以大大提高测试代码的效率和质量。
阅读全文