Pytest精通指南:Parametrize数据驱动详解
创作时间:
作者:
@小白创作中心
Pytest精通指南:Parametrize数据驱动详解
引用
CSDN
1.
https://blog.csdn.net/weixin_54217348/article/details/137456963
数据驱动测试是一种重要的自动化测试方法,通过将测试数据与测试逻辑分离,可以显著提高测试效率和代码的可维护性。本文将详细介绍如何使用Pytest框架中的parametrize功能,从yaml、json和excel文件中获取测试数据,实现数据驱动的自动化测试。
前言
数据驱动测试的核心思想是通过数据的改变来驱动自动化测试的执行,最终引起测试结果的改变。这种测试方法将测试数据与测试逻辑分开管理与维护,使得测试数据可以存储在外部文件中(如EXCEL、JSON、YAML等),而测试逻辑则编写在测试脚本中。通过读取外部文件中的测试数据,测试脚本可以执行相应的测试操作,并验证程序的输出是否符合预期。
数据驱动
对于少量的测试用例,可以通过代码的参数化来实现数据驱动。这意味着在代码中定义一些变量,并为这些变量提供不同的值,以模拟不同的测试场景。这样,只需编写一次测试逻辑,就可以通过更改参数值来执行多个测试用例。
对于大量的测试用例,建议使用结构化的文件(如EXCEL、JSON、YAML等)来存储测试数据。这样做的好处包括:
- 易于管理:所有数据都集中在一个或多个文件中,便于查看、修改和备份。
- 易于扩展:随着测试数据的增加,只需在文件中添加新的数据行,而无需修改测试代码。
- 代码和数据分离:测试逻辑和数据分开,使得代码更加清晰和可维护。
无论数据量大小,都建议将数据和代码分离。
parametrize从yaml获取数据
首先介绍如何从yaml文件中获取数据。以下是一个简单的yaml文件示例:
- username: admin
password: 123456
- username: test
password: test
接下来是对应的测试代码:
import pytest
import yaml
import os
# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH) # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytest
def acquire_case_data(file_path):
with open(file=file_path, mode='r', encoding="utf-8") as file:
return yaml.safe_load(file)
@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.yaml"))
def test_case(data):
print(f"username={data['username']}, password={data['password']}")
parametrize从json获取数据
接下来介绍如何从json文件中获取数据。以下是一个简单的json文件示例:
[
{
"username": "admin",
"password": "123456"
},
{
"username": "test",
"password": "1234"
},
{
"username": "guest",
"password": "12345"
}
]
接下来是对应的测试代码:
import pytest
import json
import os
# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH) # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytest
def acquire_case_data(file_path):
with open(file=file_path, mode='r', encoding="utf-8") as fp:
return json.load(fp)
@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.json"))
def test_case(data):
print(f"username={data['username']}, password={data['password']}")
parametrize从excel获取数据
最后介绍如何从excel文件中获取数据。以下是一个简单的excel文件示例:
username | password |
|---|---|
admin | 123456 |
test | 1234 |
guest | 12345 |
接下来是对应的测试代码:
import pytest
import openpyxl
import os
# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH) # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytest
def acquire_case_data(file_path):
# 打开现有的Excel文件(工作薄)
excel_object = openpyxl.load_workbook(file_path)
# 打开需要读取的工作表(sheet页)
sheet_object = excel_object["Sheet1"]
# 通过iter_rows()遍历获取所有数据行
return [row for row in sheet_object.iter_rows(values_only=True)]
@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.xlsx"))
def test_case(data):
print(f"username={data[0]}, password={data[1]}")
执行效果如下:
热门推荐
安徽三日游:黄山、九华山、天柱山必打卡!
黄山三日游必备物品清单:从登山鞋到防晒霜,一文搞定你的行囊
《熊出没·重启未来》艺术风格大揭秘:从视觉到听觉的双重盛宴
《熊出没·逆转时空》票房破纪录:一部动画电影背后的商业传奇
黄金蟒:稀有珍宝,合法观赏
黄金蟒成社交新宠?揭秘它的投资价值!
泰山与曲阜孔庙:山东的世界遗产探秘
泰山:世界遗产中的自然与文化双璧
秋日打卡:泰山&曲阜三孔的世界遗产魅力
2025年物化地组合报考趋势解析:高校选择与就业方向一文全懂!
工商管理专业2024年大学100强:中山大学排第2,湖南工商大学优秀
从葡萄牙到日本:天妇罗的传奇之旅
日本大厨教你做正宗天妇罗!
来自八千多年前河南的贾湖骨笛有多牛?还能吹奏现代歌曲
黄山三日游,跟着小雨导游玩转徽州!
黄山领衔!安徽必打卡特色景点大揭秘
宠物被毒蛇咬伤?这份急救指南请收好!
江西野外防蛇攻略:实用技巧大揭秘
被银环蛇咬伤后的自救指南
秋季校园防蛇攻略:这些小妙招你get了吗?
揭秘动物园老虎的饮食之谜:为什么一天只吃一顿?
老虎在非洲生存艰难?真相揭秘!
药用菌菇抗癌:菌菇多糖的九大抗癌机理
庐山三日游:白鹿洞书院探秘之旅
毛泽东笔下的庐山:诗意与历史交织
透明矫正器:你的口腔健康新选择
广东海岛旅游全攻略:2025年必打卡的20个海岛景点
通天峡:华北明珠的历史文化探秘
山西平顺通天峡:北方小九寨的绝美秘境
湖州乡村旅游:从绿水青山到金山银山的生动实践