接口测试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'))