接口测试Day10-测试数据封装(参数化-数据驱动)

  • Tpshop商城参数化
  • 准备工作
    分析 tpshop 商城测试用例:

    提取每个测试用例 使用的 测试数据 和 断言数据。

    封装函数,将 数据 转换为 元组列表。

参数化步骤

1、导包 from parameterized import parameterized

  1. 通用测试方法 ,上一行,添加 @parameterized.expand()

  2. expand() 传入 [(),(),()](调用 转换 [{},{},{}] --> [(),(),()] 的函数

  3. 修改 **通用测试方法,添加形参,**个数、顺序,与 [{},{},{}] 中 { } 内的所有 key 完全一一对应。

  4. 在 通用测试方法内,使用形参。

代码实现:

  • 整个代码结构
go 复制代码
import unittest

import requests
from objc import cls

from tpshop_login_api import TpShopLoginApi

from parameterized import parameterized


json_data = [
    {
        "req_boby": {"username": 13800138006, "password": 123456, "verify_code": None},
        "status_code": 200,
        "status": 1,
        "msg": "成功"
    },
    {
        "req_boby": {"username": 138002367612838, "password": 123456, "verify_code": None},
        "status_code": 200,
        "status": -1,
        "msg": "账号不存在!"
    },
    {
        "req_boby": {"username": 13800138006, "password": 123476, "verify_code": None},
        "status_code": 200,
        "status": -2,
        "msg": "密码错误"
    }
]

# 定义函数,读取 [{},{},{}] 转换成[(),(),()]
# 将 [{},{},{}]------>[(),(),()]
def read_json_data():
    list_data = []
    for item in json_data:
        # print(tuple(item.values()))
        list_data.append(tuple(item.values()))

    # 当循环结束后,list_data 为 [(),(),()] 数据
    # print(list_data)
    return  list_data

# 封装通用的 断言方法
def common_assert(self, resp, status_code, status, msg):
    # 断言
    self.assertEqual(status_code, resp.status_code)
    self.assertEqual(status, resp.json().get('status'))
    self.assertIn(msg, resp.json().get('msg'))

class TestTpShopLogin(unittest.TestCase):

    # 添加类属性
    session = None
    string_code = None

    # 所有方法前只需要创建一次session实例
    @classmethod
    def setUpClass(cls):
        # 创建session 实例
        cls.session = requests.Session()

    # 每个方法前每次都要调用一次获取验证码
    def setUp(self):
        # 调用自己封装的接口,获取验证码
        TpShopLoginApi.get_verify(self.session)

        # 定义一个变量去接受获取验证码 方法 返回的值
        self.string_code = TpShopLoginApi.get_verify(self.session)

    #  测试登录成功
    @parameterized.expand(read_json_data)
    def test01_login_ok(self, req_body, status_code, status, msg):

        # 调用自己封装的接口,登录
        req_body["verify_code"] = self.string_code
        resp = TpShopLoginApi.login(self.session, req_body)
        print('登录成功', resp.json())

        # 断言
        common_assert(self, resp, status_code, status, msg)
        # self.assertEqual(200, resp.status_code)
        # self.assertEqual(1, resp.json().get('status'))
        # self.assertIn('成功', resp.json().get('msg'))


    # 测试手机号不存在
    # def test02_tel_not_exists(self):
    #
    #
    #     # 调用自己封装的接口,登录
    #     login_data = {
    #         "username": 138002367612838,
    #         "password": 123456,
    #         "verify_code": self.string_code
    #     }
    #     resp = TpShopLoginApi.login(self.session, login_data)
    #     print('手机号不存在', resp.json())
    #
    #     # 断言
    #     common_assert(self, resp, 200, -1, '账号不存在!')
    #     # self.assertEqual(200, resp.status_code)
    #     # self.assertEqual(-1, resp.json().get('status'))
    #     # self.assertIn('账号不存在!', resp.json().get('msg'))
    #
    #  # 测试密码错误
    # def test03_pwd_err(self):
    #
    #     # 调用自己封装的接口,登录
    #     login_data = {
    #         "username": 13800138006,
    #         "password": 123476,
    #         "verify_code": self.string_code
    #     }
    #     resp = TpShopLoginApi.login(self.session, login_data)
    #     print('密码错误', resp.json())
    #
    #     # 断言
    #     common_assert(self, resp, 200, -2, '密码错误')
    #     # self.assertEqual(200, resp.status_code)
        # self.assertEqual(-2, resp.json().get('status'))
        # self.assertIn('密码错误', resp.json().get('msg'))
相关推荐
五指山西15 分钟前
异步框架使用loguru和contextvars实现日志按Id输出
python
小宁爱Python16 分钟前
Python从入门到精通4:计算机网络及TCP网络应用程序开发入门指南
网络·python·tcp/ip·计算机网络
thinkMoreAndDoMore24 分钟前
深度学习处理文本(5)
人工智能·python·深度学习
Niuguangshuo33 分钟前
Python 设计模式:外观模式
python·设计模式·外观模式
wgc2k1 小时前
吴恩达深度学习复盘(6)神经网络的矢量化原理
python·深度学习·矩阵
?Agony2 小时前
P17_ResNeXt-50
人工智能·pytorch·python·算法
浪淘沙jkp2 小时前
大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)
python·学习·deepseek
汲海3 小时前
Jupyter 505
ide·python·jupyter
独好紫罗兰3 小时前
洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构
开发语言·python·算法
失去妙妙屋的米奇3 小时前
Python与图像处理
图像处理·python·计算机视觉