pytest是一个非常流行的Python测试框架。它支持多种类型的测试,包括单元测试、功能测试和端到端测试等。pytest还支持数据驱动测试,即使用不同的测试数据运行相同的测试用例。pytest支持使用多种格式的文件来保存测试数据,包括YAML、Excel、CSV和JSON等。
下面,我将详细介绍pytest支持的数据驱动测试,以及如何使用这几种格式的文件作为测试数据。
1. 安装pytest
首先,我们需要安装pytest。可以通过以下命令来安装:
pip install pytest
2. 创建测试用例
接下来,我们需要创建测试用例。这里以一个简单的加法测试用例为例。测试用例的代码如下:
def test_addition(a, b, expected):
assert a + b == expected
这个测试用例有三个参数:a、b和expected。这个测试用例将检查a和b的和是否等于expected。
3. 定义测试数据
接下来,我们需要定义测试数据。pytest支持使用多种格式的文件来保存测试数据。这里我将介绍如何使用YAML、Excel、CSV和JSON文件作为测试数据。
3.1 使用YAML文件
下面是一个用于测试加法的yaml文件的例子:
- name: test1
a: 1
b: 2
expected: 3
- name: test2
a: 3
b: 4
expected: 7
这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。
3.2 使用Excel文件
下面是一个用于测试加法的Excel文件的例子:
name | a | b | expected |
---|---|---|---|
test1 | 1 | 2 | 3 |
test2 | 3 | 4 | 7 |
这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。
3.3 使用CSV文件
下面是一个用于测试加法的CSV文件的例子:
name,a,b,expected
test1,1,2,3
test2,3,4,7
这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。
3.4 使用JSON文件
下面是一个用于测试加法的JSON文件的例子:
[
{
"name": "test1",
"a": 1,
"b": 2,
"expected": 3
},
{
"name": "test2",
"a": 3,
"b": 4,
"expected": 7
}
]
这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。
4. 实现数据驱动测试
有了测试用例和测试数据之后,我们就可以实现数据驱动测试了。以下是数据驱动测试的代码:
import pytest
import yaml
import xlrd
import csv
import json
def pytest_generate_tests(metafunc):
if 'a,b,expected' in metafunc.fixturenames:
test_data = get_test_data(metafunc.function.__name__)
metafunc.parametrize('a,b,expected', test_data)
def get_test_data(func_name):
file_name = get_test_data_file(func_name)
file_type = get_test_data_file_type(file_name)
if file_type == 'yaml':
with open(file_name, 'r') as f:
test_data = yaml.load(f, Loader=yaml.FullLoader)
return [(data['a'], data['b'], data['expected']) for data in test_data]
elif file_type == 'excel':
book = xlrd.open_workbook(file_name)
sheet = book.sheet_by_index(0)
headers = sheet.row_values(0)
test_data = []
for i in range(1, sheet.nrows):
row = sheet.row_values(i)
test_data.append({headers[j]: row[j] for j in range(len(headers))})
return [(data['a'], data['b'], data['expected']) for data in test_data]
elif file_type == 'csv':
with open(file_name, 'r') as f:
reader = csv.DictReader(f)
test_data = []
for row in reader:
test_data.append({k: int(v) for k, v in row.items() if k != 'name'})
return [(data['a'], data['b'], data['expected']) for data in test_data]
elif file_type == 'json':
with open(file_name, 'r') as f:
test_data = json.load(f)
return [(data['a'], data['b'], data['expected']) for data in test_data]
else:
raise ValueError(f'Unsupported test data file type: {file_type}')
def get_test_data_file(func_name):
return f'{func_name}.yaml'
def get_test_data_file_type(file_name):
return file_name.split('.')[-1]
def test_addition(a, b, expected):
assert a + b == expected
这个代码实现了数据驱动测试。pytest会调用pytest_generate_tests函数来动态生成测试用例,然后使用@pytest.mark.parametrize将测试数据传递给测试用例。
5. 运行测试
最后,我们可以运行测试用例。使用pytest命令来运行测试:
pytest -v
输出结果类似于:
tests/test_addition.py::test_addition[test1] PASSED
tests/test_addition.py::test_addition[test2] PASSED
以上便是使用pytest进行数据驱动测试的完整攻略,通过讲解yaml、excel、csv和json作为测试数据的使用示例,让读者掌握pytest的数据驱动测试方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytest自动化测试数据驱动yaml/excel/csv/json - Python技术站