我们习惯性的惯性思维,都是线性操作,第一步,第二步,第三步。但是真正到了一定的高阶,就会发现很多东西需要总结、归纳,形成理论,也就顺理成章的抽象成了测试框架。
1.开发工程师和测试工程师视角分析
1.开发工程师视角,通过写代码实现产品需求或原型设计,他们会关心高并发、低消耗、分布式、多冗余,更多关注代码的性能和可靠性。
2、测试工程师视角,目标都是保障交付项目的质量,那些业务侧的表现,在大多数情况下不是我们关心的重点。
2.搭建前准备工作
python语言进行接口测试,需要用到一个三方库,requests
安装requests库:pip install requests
- 1.get方法
# Python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
import requests
# 建立url_index的变量,存储战场的首页
url_index='http://127.0.0.1:12356/'
# 调用requests类的get方法,也就是HTTP的GET请求方式,访问了url_index存储的首页URL,返回结果存到了response_index中
response_index = requests.get(url_index)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:'+response_index.text)
- 2.post方法
# python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
import requests
# 建立url_login的变量,存储战场系统的登录URL
url_login = 'http://127.0.0.1:12356/login'
# username变量存储用户名参数
username = 'criss'
# password变量存储密码参数
password = 'criss'
# 拼凑body的参数
payload = 'username=' + username + '&password=' + password
# 调用requests类的post方法,也就是HTTP的POST请求方式,
# 访问了url_login,其中通过将payload赋值给data完成body传参
response_login = requests.post(url_login, data=payload)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:' + response_login.text)
3.测试框架抽象
在准备工作中,我们编写 get方法和post方法,但是如何提炼出来,形成我们可以通过参数传递,就可以共用操作呢。
操作步骤:
1、建议一个叫common.py的共的方法类。
2、修改接口对应的单接口测试脚本。
3、修改接口对应的多接口测试脚本。
- 1.common.py的方法类
# 定义一个common的类,它的父类是object
class Common(object):
# common的构造函数
def __init__(self):
# 被测系统的根路由
self.url_root = 'http://127.0.0.1:12356'
# 封装你自己的get请求,uri是访问路由,params是get请求的参数,如果没有默认为空
def get(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri + params
# 通过get请求访问对应地址
res = requests.get(url)
# 返回request的Response结果,类型为requests的Response类型
return res
# 封装你自己的post方法,uri是访问路由,params是post请求需要传递的参数,如果没有参数这里为空
def post(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri
if len(params) > 0:
# 如果有参数,那么通过post方式访问对应的url,并将参数赋值给requests.post默认参数data
# 返回request的Response结果,类型为requests的Response类型
res = requests.post(url, data=params)
else:
# 如果无参数,访问方式如下
# 返回request的Response结果,类型为requests的Response类型
res = requests.post(url)
return res
- 2.修改接口的单接口测试脚本
实例一:
# Python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
from common import Common
# 首页的路由
uri = '/'
# 实例化自己的Common
comm = Common()
#调用你自己在Common封装的get方法 ,返回结果存到了response_index中
response_index = comm.get(uri)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:' + response_index.text)
实例二:
#登录页路由
uri = '/login'
# username变量存储用户名参数
username = 'criss'
# password变量存储密码参数
password = 'criss'
# 拼凑body的参数
payload = 'username=' + username + '&password=' + password
comm = Common()
response_login = comm.post(uri,params=payload)
print('Response内容:' + response_login.text)
- 3.多接口测试
# Python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
from common import Common
# 建立uri_index的变量,存储战场的首页路由
uri_index = '/'
# 实例化自己的Common
comm = Common('http://127.0.0.1:12356')
#调用你自己在Common封装的get方法 ,返回结果存到了response_index中
response_index = comm.get(uri_index)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:' + response_index.text)
# uri_login存储战场的登录
uri_login = '/login'
# username变量存储用户名参数
username = 'criss'
# password变量存储密码参数
password = 'criss'
# 拼凑body的参数
payload = 'username=' + username + '&password=' + password
response_login = comm.post(uri_login,params=payload)
print('Response内容:' + response_login.text)
# uri_selectEq存储战场的选择武器
uri_selectEq = '/selectEq'
# 武器编号变量存储用户名参数
equipmentid = '10003'
# 拼凑body的参数
payload = 'equipmentid=' + equipmentid
response_selectEq = comm.post(uri_selectEq,params=payload)
print('Response内容:' + response_selectEq.text)
# uri_kill存储战场的选择武器
uri_kill = '/kill'
# 武器编号变量存储用户名参数
enemyid = '20001'
# 拼凑body的参数
payload = 'enemyid=' + enemyid+"&equipmentid="+equipmentid
response_kill = comm.post(uri_kill,params=payload)
print('Response内容:' + response_kill.text)
如果我们封住好的Common就变成了如下的样子:
# 定义一个common的类,它的父类是object
class Common(object):
# common的构造函数
def __init__(self,url_root):
# 被测系统的跟路由
self.url_root = url_root
# 封装你自己的get请求,uri是访问路由,params是get请求的参数,如果没有默认为空
def get(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri + params
# 通过get请求访问对应地址
res = requests.get(url)
# 返回request的Response结果,类型为requests的Response类型
return res
# 封装你自己的post方法,uri是访问路由,params是post请求需要传递的参数,如果没有参数这里为空
def post(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri
if len(params) > 0:
# 如果有参数,那么通过post方式访问对应的url,并将参数赋值给requests.post默认参数data
# 返回request的Response结果,类型为requests的Response类型
res = requests.post(url, data=params)
else:
# 如果无参数,访问方式如下# 返回request的Response结果,类型为requests的Response类型
res = req
image.png
4.测试脚本到测试框架的转换过程
测试框架就是在测试脚本中不断抽象和封装得来的。测试脚本到测试框架的转换过程:
1.不断撰写测试脚本,所有的抽象和封装都是站在已有的测试脚本基础之上的。
2.多观察已经写好的测试脚本,找出其中的重叠部分,最后完成封装。
3.不断循环又循序渐进的过程,在工作中始终保持思考和警惕,发现重复马上进行框架封装。
网友评论