Pytest精通指南(13)Parametrize数据驱动
想要深入了解pytest,成为Python测试领域的大佬吗?本教程系列将带你从零开始,逐步掌握pytest的核心知识和高级技巧。无论你是初学者还是进阶者,都能在这里找到适合自己的突破点。开启pytest学习之旅,为自动化测试工作扬帆起航!
·
前言
数据驱动就是通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
数据驱动测试是一种测试方法,是将测试数据与测试逻辑分开管理与维护的一种手段。
- 测试数据可以存储在外部文件中,如
EXCEL
、JSON
、YAML
等,而测试逻辑则编写在测试脚本中。- 通过读取外部文件中的测试数据,测试脚本可以执行相应的测试操作,并验证程序的输出是否符合预期。
数据驱动
少量的测试用例:
- 可以通过代码的参数化来实现数据驱动。
- 这意味着在代码中定义一些变量,并为这些变量提供不同的值,以模拟不同的测试场景。
- 这样,只需编写一次测试逻辑,就可以通过更改参数值来执行多个测试用例。
大量的测试用例:
- 建议使用结构化的文件(如
EXCEL
、JSON
、YAML
等)来存储测试数据。这样做的好处是:
- 易于管理:所有数据都集中在一个或多个文件中,便于查看、修改和备份。
- 易于扩展:随着测试数据的增加,只需在文件中添加新的数据行,而无需修改测试代码。
- 代码和数据分离:测试逻辑和数据分开,使得代码更加清晰和可维护。
无论数据量大小,都建议将数据和代码分离。
parametrize从yaml获取数据
Python操作Yaml文件查漏补缺:Python 3 拿捏configparser和pyyaml配置文件解析库
datagram.yaml
文件数据
- username: admin
password: 123456
- username: test
password: test
test_case_01.py
文件代码
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获取数据
Python操作Json文件查漏补缺:Python 从文件中读取JSON 数据并解析转存
datagram.json
文件数据
[
{
"username": "admin",
"password": "123456"
},
{
"username": "test",
"password": "1234"
},
{
"username": "guest",
"password": "12345"
}
]
test_case_02.py
文件代码
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获取数据
Python操作excel文件查漏补缺:Python 自动化与数据分析必备openpyxl模块
datagram.excel
文件数据
test_case_03.py
文件代码
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]}")
执行效果

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)