当前位置: 首页 > article >正文

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

  • Tpshop商城参数化
  • 准备工作
    分析 tpshop 商城测试用例:
    在这里插入图片描述
    提取每个测试用例 使用的 测试数据 和 断言数据。
    在这里插入图片描述
    封装函数,将 数据 转换为 元组列表。

参数化步骤

1、导包 from parameterized import parameterized
2. 在 通用测试方法,上一行,添加 @parameterized.expand()
3. 给 expand() 传入 [(),(),()](调用 转换 [{},{},{}] --> [(),(),()] 的函数
4. 修改 **通用测试方法,添加形参,**个数、顺序,与 [{},{},{}] 中 { } 内的所有 key 完全一一对应。
5. 在 通用测试方法内,使用形参。

代码实现:
在这里插入图片描述

  • 整个代码结构
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'))



http://www.kler.cn/a/510840.html

相关文章:

  • Java——Stream流的peek方法详解
  • LINUX编译LibreOffice
  • 前端项目搭建和基础配置
  • Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
  • R语言绘图
  • 深度学习 Pytorch 张量的索引、分片、合并以及维度调整
  • 【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器
  • TensorFlow深度学习实战(5)——神经网络性能优化技术详解
  • Linux磁盘空间不足,12个详细的排查方法
  • 【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】
  • NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D
  • SpringMVC (1)
  • Ability Kit-程序框架服务(类似Android Activity)
  • 【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展
  • 【2024年华为OD机试】(C卷,100分)- 悄悄话 (Java JS PythonC/C++)
  • Mac的`~键打出来±§`?解析ANSI、ISO、JIS键盘标准的区别与布局
  • C++ random_shuffle函数:从兴起到被替代
  • C++连接使用 MySQL Connector/C++ 库报错bad allocation
  • 怎么查看 centos5 是否安装 mysql
  • HTML应用指南:利用GET请求获取微博用户特定标签的文章内容
  • 2025最新版PyCharm安装使用指南
  • 解锁新技能:Windows Forms与ASP.NET API的梦幻联动
  • 电商项目高级篇08-springCache
  • Jenkins-pipeline语法说明
  • leetcode——最长连续序列(java)
  • 基于SSM的自助购药小程序设计与实现(LW+源码+讲解)