一,为什么要做接口自动化?
自动化的引入是为了更高效的执行重复性的工作,在现在传统手工测试中,随着业务的复杂程度和减少人工时间成本,同时,接口测试相对容易实现自动化持续集成,UI自动(selenium的有空在写,也很简单)核心是为了缩减测试周期。本文介绍我第三次重构接口自动化的成果
二,如何设计和实现接口自动化?
围绕着“可维护性高”和“业务覆盖率广”两项原则进行设计接口测试体系
(1)实现整体框架思路这边考虑接口测试需要用到什么?
1,接口参数
2,接口请求地址
3,接口返回值
总体的来说是上诉三项,当然包括比如:头部信息,加密项和以及登录缓存项等等
举个例子:
1 data1={parameter:"参数",numerical :"参数2"}#入参数2 timeout=5.0#超时最大值3 url1=https://www.cnblog.com#域名4 address=/address/demo#地址5 headers={}#头部信息6 response = requests.post(url=url1+address,headers=headers,data=data1,timeout=float(timeout)#发起POST请求7 returnJson=response.json#返回请求
在上诉的一个简单的例子中可以看出一个接口需要的定义的基础的所包含的内容
这个基础上我们要需要怎么去变成高维护性的呢,答案就是封装
我们需要的是进行分层封装,分离结构
需要把数据作为一层,请求作为一层,和结果作为一层
a),数据作为一层,按照常规的还是采用excel进行提取数据,方便维护
b),请求一层,可以再次拆分,
1.因为http可能有https,因为在不同环境局域网环境和外网环境的考虑。
2.当然你的域名也是一样,在本地环境有可能是192.168.1.1,而外网环境就是www.cnblog.com
3.请求的地址,上面说的是封装,当然你域名和http都是固定的,变化的只有你的请求地址和参数,所以要考虑你的地址要如何的封装?
上诉的说明会让你想到什么???
没错就是-----配置文件
4.发送请求,发送请求可能包含的是什么?post?get?put?......既然数据作为一层了我们调用也无非是去发送请求,那么HTTP发送请求自然也作为封装的一层
c),结果一层当然是记录结果,你可以包含发送邮件 和 log日志进行记录信息以及通过图标显示你测试的case的成功或者失败~
(2)实现整体框架内容
上诉介绍了大致设计的想法,接下来如何真正去实现呢?需要用到什么呢?
下图是我可能会用到的包:
当然不用每一个都下载,我们主要用到的东西还是 xlwt paramunittest request unittest ElementTree,还有HTMLTestRunner
我们先从配置文件上说起吧~
跟设计思路一样config.ini是记录
第二个是interfaceURL.xml,下图的这就是配置一个name用于寻找到指定这个接口
比如我的接口是地址是###/address/preson/xiaocui 你就可以这样写:
address person xiaocui
sql也是同理
接下来我们看如何去封装get,pos等请求的
get,post方法类似我们这边说POST方法
def post(self): urllib3.disable_warnings()#这行代码是为了屏蔽SSL证书的警告,不用管 try: response = requests.post(self.url, headers=self.headers, data=self.data, timeout=float(timeout),\ verify=False, cookies=self.cookies) # response.raise_for_status() return response except TimeoutError: self.logger.error("Time out!") return None
这里面都是很正常的是去调用request的POST方法,在verify=False,是为了关闭HTTPS的可能会过期证书导致的异常,cookies是有些接口可能会需要进行登录信息后才能进行调用
那问题来了 我的参数哪里来呢?
下面就是参数的调用 ,self指的类本身或者函数的本身,所以我们需要吧你调用的参数集成在这个类里面去调用
下面就是经典的unittest case类啦~
从上而下来看,读取数据,展开数据,将数据集合。
该接口的例子是需要登录信息的所以会有cookies
result 在excel表中0是执行这条用例 其他代表不执行。
我继承unittest类后继续重写一次setup方法,提高代码的复用性,其他的可随意参考根据需求和业务进行
数据层是这样的:
三,接口自动化结果生成
图标:
邮件通知:
总结:
可以直接在excel表中填写数据,只需要将所有前期的接口进行配置完全即可,后期维护只用在excel中进行,如果进行书写testCase类,也不用管环境,只需要你调用一下方法和即可,利于维护快速多人开发!
欢迎大家给我提意见~~共同学习。
声明:
本文结合各路测试大神,和JAVA后台开发提供思路,再次感谢~
本文书写纯手打,转载时请联系我 870801585@qq.com