目录
- 接口对象封装
- 代码分层思想
- 封装案例
- 封装Tpshop商城登录
- Tpshop商城登录参数化
接口对象封装
代码分层思想
分层思想:将普通思想分为两层,分为接口对象层和测试脚本层
接口对象层:
对接口进行封装,封装好之后,给测试用例调用
面向对象来封装实现
测试用例层:
调用接口对象层封装的方法,拿到响应结果,断言进行接口测试
借助unittest框架实现
封装思想:
将动态变化的数据,设计到方法的参数
将固定不变的,直接写成方法实现
将响应结果,通过返回值传出
封装案例
封装Tpshop商城登录
接口封装
class LoginApi:#发送验证码请求@classmethod #类方法,不用创建实例,可直接类名调用def get_verify(cls,session):session.get(url='url地址') #url地址是固定不变的#发送登录请求@classmethoddef post_login(cls,session,data):resp=session.post(url='url地址',data=data)return resp
断言封装
class AssertFeizhuang:def common_assert(self,resp,status_code,status,msg):self.assertEquel(status_code, resp.status_code)self.assertEquel(status, resp.json().get("status"))self.assertEqual(msg, resp.json().get("msg"))
用例优化(前置方法提取)
import unittest
from assert_feizhuang import AssertFeizhuang
from login_api import LoginApi
from assert_feizhuang import AssertFeizhuangclass TestLogin(unittest.TestCase):session=None@classmethoddef setUpClass(cls):cls.session = requests.session()def setUp(self):# 获取验证码LoginApi.get_verify(self.session)def test_login_01(self):"""登录成功"""#登录data={"username":"13800000002","password":"123456","verifyCode":"8888"}resp=LoginApi.post_login(self.session,data)#断言AssertFeizhuang.common_assert(self,resp,200,1,"登录成功")def test_login_02(self):"""手机号不存在"""# 登录data = {"username": "13800123002","password": "123456","verifyCode": "8888"}resp = LoginApi.post_login(self.session, data)# 断言AssertFeizhuang.common_assert(self, resp, 200, -1, "账号不存在")def test_login_03(self):"""密码错误"""# 登录data = {"username": "13800000002","password": "000000","verifyCode": "8888"}resp = LoginApi.post_login(self.session, data)# 断言AssertFeizhuang.common_assert(self, resp, 200, -1, "密码错误")
Tpshop商城登录参数化
参数化实现步骤:
1.导包from parameterized import parameterized
2.在需要参数的方法前一行添加@parameterized.expand(数据)
3.给expand()传入数据,数据格式[(),(),()]
4.修改需要参数的方法,添加形参,个数、顺序与传入数据()的所有key一一对应
5.在通用测试方法内,使用形参
json数据文件
[{"data": {"username":"13800000002","password":"123456","verifyCode":"8888"},"status_code": 200,"status": 1,"msg": "登录成功"
},{"data": {"username":"13800123002","password":"123456","verifyCode":"8888"},"status_code": 200,"status": -1,"msg": "账号不存在"
}, {"data": {"username":"13800000002","password":"000000","verifyCode":"8888"},"status_code": 200,"status": 1,"msg": "密码错误"}]
读取数据
import json
def get_data(file):with open(file,'r',encoding='utf-8') as f:list=json.load(f)list1=[]for i in list:list1.append(tuple(i.values()))return list1
参数化后用例
import unittest
import requests
from parameterized import parameterized
from get_data import get_data
from login_api import LoginApi
from assert_feizhuang import AssertFeizhuangclass TestLogin(unittest.TestCase):session=None@classmethoddef setUpClass(cls):cls.session = requests.Session()def setUp(self):# 获取验证码LoginApi.get_verify(self.session)@parameterized.expand(get_data('./login.json'))def test_login_01(self,data,status_code,status,msg):"""登录成功"""print(data,status_code,status,msg)#登录resp=LoginApi.post_login(self.session,data)#断言AssertFeizhuang.common_assert(self,resp,status_code,status,msg)