Pytest精通指南(13)Parametrize数据驱动

46 篇文章 2 订阅
32 篇文章 3 订阅


请添加图片描述

前言

数据驱动就是通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。

数据驱动测试是一种测试方法,是将测试数据与测试逻辑分开管理与维护的一种手段。

  • 测试数据可以存储在外部文件中,如EXCELJSONYAML等,而测试逻辑则编写在测试脚本中。
  • 通过读取外部文件中的测试数据,测试脚本可以执行相应的测试操作,并验证程序的输出是否符合预期。

数据驱动

少量的测试用例:

  • 可以通过代码的参数化来实现数据驱动。
  • 这意味着在代码中定义一些变量,并为这些变量提供不同的值,以模拟不同的测试场景。
  • 这样,只需编写一次测试逻辑,就可以通过更改参数值来执行多个测试用例。

大量的测试用例:

  • 建议使用结构化的文件(如EXCELJSONYAML等)来存储测试数据。

这样做的好处是:

  • 易于管理:所有数据都集中在一个或多个文件中,便于查看、修改和备份。
  • 易于扩展:随着测试数据的增加,只需在文件中添加新的数据行,而无需修改测试代码。
  • 代码和数据分离:测试逻辑和数据分开,使得代码更加清晰和可维护。

无论数据量大小,都建议将数据和代码分离。

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]}")

执行效果

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值