接口对象封装之数据驱动
在实际接口测试中,测试的参数是通过json文件的方式给到的,所以我们要实现接口测试的数据驱动,也叫参数化。
使用python自带的unittest单元测试框架进行接口参数化测试时,因unittest不具备参数化测试,所以需要借助Parameterized第三库进行测试
Parameterized可以进行大量数据的测试,分离测试数据和测试脚本
一旦实现了参数化测试,那么后期调试测试用例时,可以不需要看代码,只需要修改测试数据即可。
安装包: pip install parameterized
实现思路: 1导包 from parameterized import parameterized
2在通用的测试方法上面添加 装饰器 @parameterized.expand()
3给expand()传入[(),(),()]格式的数据(这个是parameterized规定的格式,json不满足需要我们自己转化)
4修改测试方法,添加形参,个数,顺序,实现形参和实参一一对应
5 在测试方法中使用形参即可。
代码实现:
1 转化json格式数据
# 模拟josn数据
josn_data = [
{
"req_body": {"userName": "admin", "password": "a12345"},
"message": "登录成功"
}
]
# 转换格式
def read_json_data():
list_data = []
for item in josn_data:
list_data.append(tuple(item.values()))
return list_data
2 使用parameterized实现参数化:
# 测试 登录成功
@parameterized.expand(read_json_data())
def test01_login(self,req_body,message):
url = 'testUrl'
res = LoginApi.login(session=self.session, url=url, login_data=req_body)
# 断言
common_assert(self, res, message)
完整代码:
import unittest
from login import LoginApi
import requests
from parameterized import parameterized
# 模拟josn数据
josn_data = [
{
"req_body": {"userName": "admin", "password": "a12345"},
"message": "登录成功"
}
]
# 转换格式
def read_json_data():
list_data = []
for item in josn_data:
list_data.append(tuple(item.values()))
return list_data
# 封装断言方法
def common_assert(self, res, msg):
self.assertIn(msg, res.json().get('message'))
class TestLogin(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls) -> None:
cls.session = requests.Session()
# 测试 登录成功
@parameterized.expand(read_json_data())
def test01_login(self,req_body,message):
url = 'testUrl'
res = LoginApi.login(session=self.session, url=url, login_data=req_body)
# 断言
common_assert(self, res, message)