【接口测试】5_代码实现 _pytest参数化

一、参数化

参数化的核心:数据驱动(用数据驱动测试用例执行)

  • 数据驱动:针对一个接口,只写一个测试方法。用一份测试数据文件,管理各个测试用例的测试数据。
  • 如:登录接口,共 15 条测试用例。但,只需要一个 测试方法,对应 有 15 组数据的 json数据文件,进行测试。

二、回顾pytest参数化

2.1 加法原始案例 review_parameterize.py

# 待测 函数
def add(x, y):
    return x + y

# 结合 pytest 定义测试类
class TestAddFunc(object):
    # 定义测试方法
    def test01_add(self):
        res = add(10, 20)   # 调用 待测函数,得实际结果
        assert 30 == res    # 断言

    def test02_add(self):
        res = add(100, 200)
        assert 300 == res

    def test03_add(self):
        res = add(1000, 2000)
        assert 3000 == res

结果:

wangfei@afei_Mac parameterizeReviewSH27 % pytest -s review_parameterize.py

review_parameterize.py ...
==================3 passed in 0.01s ==================================================

2.2 参数化实现(重点)

import pytest

# 待测 函数
def add(x, y):
    return x + y

data = [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]

# 结合 pytest 定义测试类
class TestAddFunc(object):
    # 2个参数,第1个参数是一个字符串,对应每一组数据所对应的key;第2个参数是[(),(),()] 这种格式的数据,称作元祖列表
    # @pytest.mark.parametrize("",[(),(),()])

    @pytest.mark.parametrize("x, y, expect", data)  # 参2 要求必须是 [(),(),()] 格式的数据
    def test_add(self, x, y, expect):  # 通用测试方法
        res = add(x, y)  # 调用 待测函数,得实际结果
        assert expect == res  # 断言

2.3 参数化实现-进阶

2.3.1 add_data.json

[
  {"x": 10, "y": 20, "expect": 30},
  {"x": 100, "y": 200, "expect": 300},
  {"x": 1000, "y": 2000, "expect": 3000}
]

2.3.2 从json文件读取 add_data.py

import pytest
import json


# 待测 函数
def add(x, y):
    return x + y

# 封装函数,读取json文件,将 [{},{},{}] 数据 转换为 [(),(),()] 格式的数据
def read_json_data(filename):
    with open(filename, "r", encoding="utf8") as f:
        json_data = json.load(f)  # 读取json文件
        data_list = []
        for data in json_data:
            val = data.values()
            tmp = tuple(val)  # 转换成元祖
            data_list.append(tmp)  # 把元祖追加到空列表当中
        # 必须返回,不能在 for 内
        return data_list  # 返回 [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]


# 结合 pytest 定义测试类
class TestAddFunc(object):
    @pytest.mark.parametrize("x, y, expect", read_json_data("add_data.json"))  # 参2 要求必须是 [(),(),()] 格式的数据
    def test_add(self, x, y, expect):  # 通用测试方法
        res = add(x, y)  # 调用 待测函数,得实际结果
        assert expect == res  # 断言

三、参数化步骤

  1. 将 测试数据,按 [{},{},{}] 格式 组织到 json文件中。
  2. 读取 json文件,将数据转换为 [(),(),()]
  3. 在通用测试方法上一行,添加 @pytest.mark.parameterize()
  4. 给 parameterize() 传参。参1:字符串类型,内容为 json文件中一组数据的 key。参2:[(),(),()]格式数据。
  5. 给 通用测试方法添加形参,与 parameterize() 参1 字符串的内容一致。
  6. 修改 通用测试方法 内部实现,使用形参。

在这里插入图片描述

3.1 接口参数化步骤

1、编写数据存储文件json
2、编写读取工具方法 read_json()
3、使用参数化组件进行引用parametrize

3.2 编写参数化文件

心得:
1、根据模块来新建json文件(1个模块1个json文件)
2、最外侧使用{},模块下几个接口,编写几个key,值为列表
3、列表值中,单接口有几组数据,就写几个[}.
4、每个{}中,组成格式:说明+要进行参数的参数+预期结果
// 有几个接口,写几个key,值为列表。 在api_register_login.py中有5个接口
// []中有几组数据,就有几个{}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少云清

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

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

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

打赏作者

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

抵扣说明:

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

余额充值