1.数据驱动测试框架
描述:数据与测试脚本分离,便于测试数据的单独维护
模型:
2.测试脚本模块化框架
描述:根据业务功能将脚本模块化并从外部调用数据,便于不同业务模块的脚本单独维护
模型:
3.测试库构架框架(现在都用这种)
描述:将所有系统控件封装在测试库中,测试脚本在调用测试库内方法的同时传递外部的测试数据
模型:
测试数据:测试脚本需要用的测试数据
测试脚本:执行情况汇总得到测试报告
测试用例:一个功能点对应一个或者多个用例,尽可能的提高覆盖率
执行日志:日志记录和管理功能,根据不同的日志级别,方便定位问题;
公共函数:便于通用方法及操作的管理
测试报告:汇总所有测试脚本的执行情况
持续集成环境(自动化测试的核心)
python+unittest +requests
代码流程:
大概结构:
import unittest #引入公共函数库
import requests #python自带的单元测试框架
class xxx(unittest,TeatCase): #测试类
def setUp(self): #def定义测试用例
#该区域写所有测试用例的前提条件的操作内容:比如登陆系统,打开页面…
def test_001(self):
#第一个测试用例的测试内容及预期结果
#没有预期结果(断言)的测试用例没有意义
def test_002(self):
#第二个测试用例的测试内容及预期结果
def test_003(self):
#第三个测试用例的测试内容及预期结果
def tearDown(self):
#该区域写所有测试用例执行完成以后的反向操作:比如退出系统,关闭页面…
以上测试套的执行步骤:setUp—test_001—tearDown—setUp—test_002—tearDown….
python自带的接口测试方法requests:包含post,get,put,delete等常用接口请求类型(详细使用方法参考requests模块的方法说明)
接口案例一:
def test_001(self):
num=randonnum(11)
idnum=randonnum(4)
#创建
request={
"name":"测试同学",
"num":num,
"idnum":idnum
......
}
url=self.host+“/api/admin/num/clerk/create”
res=request.post(url,headers=self.headers,json=request)
self.assertEqual(200,res.status_code)
注意点:
res = requests.post(url,headers,josn)
#url:为请求的URL地址
#headers:传入请求的header格式
#josn: 该参数传入封装成字典格式的请求body体
assertEqual(200,res.status.code)
#断言:校验请求的返回码是否等于200,不等于200,此处会抛出错误
接口案例二:
def test_002(self):
#查看店铺销售额
createtime=time.strftime("%Y-%m-%d",time.localtime())
url=self.host+"/api/infinity/order/aggregation/group/list"
params=dict(start='2018-09-14',end=createtime,storeId=self.users[1]['storeId'])
res=request.get(url,headers=self.headers,params=params)
self.assertEqual(200,res.status_code)
注意点:
res = requests.get(url,headers,params)
#params:此参数为url中的参数,实在调用时会拼接在请求的url后面