接口测试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'))
相关推荐
西柚小萌新6 分钟前
【深入浅出PyTorch】--上采样+下采样
人工智能·pytorch·python
shut up2 小时前
LangChain - 如何使用阿里云百炼平台的Qwen-plus模型构建一个桌面文件查询AI助手 - 超详细
人工智能·python·langchain·智能体
宝贝儿好3 小时前
【python】第五章:python-GUI编程
python·pyqt
闲人编程3 小时前
从多个数据源(CSV, Excel, SQL)自动整合数据
python·mysql·数据分析·csv·存储·数据源·codecapsule
B站_计算机毕业设计之家4 小时前
推荐系统实战:python新能源汽车智能推荐(两种协同过滤+Django 全栈项目 源码)计算机专业✅
大数据·python·django·汽车·推荐系统·新能源·新能源汽车
茯苓gao4 小时前
Django网站开发记录(一)配置Mniconda,Python虚拟环境,配置Django
后端·python·django
Full Stack Developme4 小时前
Python Redis 教程
开发语言·redis·python
码界筑梦坊4 小时前
267-基于Django的携程酒店数据分析推荐系统
python·数据分析·django·毕业设计·echarts
Cherry Zack4 小时前
Django视图进阶:快捷函数、装饰器与请求响应
后端·python·django
qq_4924484464 小时前
Jmeter设置负载阶梯式压测场景(详解教程)
开发语言·python·jmeter