Test the complete case
Test the complete case
python写的一段 由pytest测试框架/allure报告框架/parameters数据驱动组成的完整案例代码
目录结构
project/
├── test_cases/
│ ├── __init__.py
│ └── test_math_operations.py # 测试用例
├── test_data/
│ └── math_data.json # 测试数据
└── pytest.ini # pytest配置文件
1. 安装依赖
pip install pytest allure-pytest
2. 测试数据 (test_data/math_data.json)
[
{
"a": 2,
"b": 3,
"expected": 5
},
{
"a": -1,
"b": 1,
"expected": 0
},
{
"a": 100,
"b": 200,
"expected": 300
}
]
3. 测试用例 (test_cases/test_math_operations.py)
# 导入所需模块
import json # 用于处理JSON格式的测试数据
import pytest # pytest测试框架
import allure # Allure报告框架
# ---------------------- 数据加载函数 ----------------------
def load_test_data():
"""从JSON文件加载测试数据"""
# 使用相对路径读取上级目录中的测试数据文件
with open("../test_data/math_data.json", "r") as f:# E:\pythonXM\test\Test the complete case\project01> 此目录下运行;./表示在当前目录下运行
# ../表示在当前目录上一级下运行
return json.load(f) # 返回解析后的JSON数据(列表格式)
# ---------------------- 被测函数 ----------------------
def add_numbers(a, b):
"""实现两数相加的功能(被测目标函数)"""
return a + b # 返回两个输入参数的和
# ---------------------- 测试类 ----------------------
@allure.feature("数学运算测试") # Allure报告中的一级分类
class TestMathOperations:
@allure.story("整数加法测试") # Allure报告中的二级分类
@allure.severity(allure.severity_level.CRITICAL) # 定义测试用例的重要级别
@pytest.mark.parametrize("data", load_test_data()) # 参数化:从JSON文件动态获取测试数据
def test_addition(self, data):
"""参数化加法测试用例"""
# 从单条测试数据中提取参数
a = data["a"] # 获取第一个加数
b = data["b"] # 获取第二个加数
expected = data["expected"] # 获取预期结果
# 在Allure报告中添加操作步骤说明
with allure.step(f"测试加法:{a} + {b} = {expected}"):
# 调用被测函数获取实际结果
result = add_numbers(a, b)
# 断言验证实际结果与预期一致
assert result == expected, \
f"断言失败:{a} + {b} 应等于 {expected},实际得到 {result}" # 断言失败时的提示信息
# 将测试数据附加到Allure报告中(作为JSON附件)
allure.attach(
json.dumps(data, indent=2), # 格式化JSON数据
"测试数据", # 附件名称
allure.attachment_type.JSON # 附件类型
)
# ---------------------- 失败案例示例 ----------------------
@pytest.mark.parametrize("x,y", [(1, 1), (2, 3)]) # 直接参数化测试数据
def test_failed_case(x, y):
"""故意失败的测试用例(演示失败场景)"""
assert x == y, f"{x} 不等于 {y}" # 故意设计会失败的断言
4. pytest配置 (pytest.ini)
[pytest]
addopts = -v -s --alluredir=./allure-results # 自动添加的命令行参数:
# -v:详细输出
# -s:打印输出信息
# --alluredir:指定Allure结果保存目录
testpaths = test_cases # 指定测试目录
python_files = test_*.py # 匹配测试文件模式
5. 运行测试
# 运行测试并生成Allure原始数据
pytest # 默认会读取pytest.ini中的配置
# 生成HTML报告(需要已安装Allure命令行工具)
allure serve ./allure-results # 解析结果目录并启动本地报告服务