目录
- 接口对象封装
- 代码分层思想
- 封装案例
- 封装Tpshop商城登录
- Tpshop商城登录参数化
- 接口自动化测试框架
接口对象封装
代码分层思想
分层思想:将普通思想分为两层,分为接口对象层和测试脚本层
接口对象层:
对接口进行封装,封装好之后,给测试用例调用
面向对象来封装实现
测试用例层:
调用接口对象层封装的方法,拿到响应结果,断言进行接口测试
借助unittest框架实现
封装思想:
将动态变化的数据,设计到方法的参数
将固定不变的,直接写成方法实现
将响应结果,通过返回值传出
封装案例
封装Tpshop商城登录
接口封装
class LoginApi:
#发送验证码请求
@classmethod #类方法,不用创建实例,可直接类名调用
def get_verify(cls,session):
session.get(url='url地址') #url地址是固定不变的
#发送登录请求
@classmethod
def 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 AssertFeizhuang
class TestLogin(unittest.TestCase):
session=None
@classmethod
def 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 AssertFeizhuang
class TestLogin(unittest.TestCase):
session=None
@classmethod
def 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)
接口自动化测试框架
接口自动化框架设计思路
1.搭建基础框架:定义项目目录结构,安装依赖包
2.通用功能类封装:数据库工具类
3.用例基础代码:封装接口API对象和UnitTest框架编写测试脚本
4.测试数据参数化:测试数据json文件设计、参数化实现
5.用例组织运行:组织测试用例运行,生成测试报告
搭建基础框架:定义项目目录结构
apiTestFramework #项目名称
api #定义封装被测系统的接口
scripts #定义测试用例脚本
data #存放测试数据文件
report #存放生成的测试报告
common #存放通用工具类
config.py #定义项目的配置信息
run_suite.py #执行测试套件的入口
实现
代码实现和上面一样,只是放入了目录中,让后导入的时候from 文件名 import 类中的文件名要加上对应文件名.