接口测试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'))
相关推荐
kszlgy4 小时前
Day 52 神经网络调参指南
python
wrj的博客6 小时前
python环境安装
python·学习·环境配置
Pyeako6 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
摘星编程7 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
充值修改昵称7 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
q_35488851539 小时前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法
Yeats_Liao9 小时前
开源生态资源:昇腾社区ModelZoo与DeepSeek的最佳实践路径
python·深度学习·神经网络·架构·开源
被星1砸昏头9 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
love530love10 小时前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
不解风水11 小时前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习