|
学习极客时间《接口测试入门课》,有一些积累和不同的收获。在时间很紧张的情况下,我们对接口测试的方式:对接口进行正确的逻辑测试、错误的逻辑测试,去判断是否满足最初的需求,因此,我们需要快速地掌握验证手段。
1、陌生协议接口测试方法
但是当我们面对的是一个陌生的新协议时,测试工程师的首要任务:
1、借助开发工程师。不要从技术基础 和理论开始学起,在逐步应用的学习脉络,更好的方式是直接拿他的客户端代码,尽可能挪为自己用,将其变成自己的接口测试代码。
2、站在自己的技术栈上,完成技术积累。比如已经熟悉的测试工具、测试平台、测试框架和编码基础。
3、归入框架。
有些开发人员很好,会给你一些学习脉络,比如给你协议的说明文档、代码开发文档、实现代码等内容。但是往往通过这种方式,暂用的时间会很长,有些时候我们不需要去了解协议底层的原理,只需要了解新协议是如何传输数据,又如何返回数据库就可以了。积累是完成任务以后去提升的事情。
2、线性接口测试代码
在我们对接口测试代码编写,都是习惯性的按自己的思路一步步进行编写,这就是所谓的线性思维。但是有时候我们就会重复的去编写这些同样的内容,这个时候封装就很重要了。
websocket完整的协议代码如下:
#引入websocket的create_connection类from websocket import create_connection# 建立和WebSocket接口的链接ws = create_connection("ws://echo.websocket.org")# 打印日子print("发送 'Hello, World'...")# 发送Hello,Worldws.send("Hello, World")# 将WebSocket的返回值存储result变量result = ws.recv()# 打印返回的resultprint("返回"+result)# 关闭WebSocket链接ws.close()3.封装的common代码
按极客时间老师的说法,这里就是哆啦A梦,增删改查全部进行代码封装,只需要通过参数调用的方式就可以简单完成代码的测试。
#!/usr/bin/env python# -*- coding: utf-8 -*-# python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数import requestsfrom websocket import create_connection# 定义一个common的类,它的父类是objectclass Common(object): # common的构造函数 def __init__(self,url_root,api_type): ''' :param api_type:接口类似当前支持http、ws,http就是HTTP协议,ws是WebSocket协议 :param url_root: 被测系统的根路由 ''' if api_type=='ws': self.ws = create_connection(url_root) elif api_type=='http': self.ws='null' self.url_root = url_root # ws协议的消息发送 def send(self,params): ''' :param params: websocket接口的参数 :return: 访问接口的返回值 ''' self.ws.send(params) res = self.ws.recv() return res # common类的析构函数,清理没有用的资源 def __del__(self): ''' :return: ''' if self.ws!='null": self.ws.close() def get(self, uri, params=None): ''' 封装你自己的get请求,uri是访问路由,params是get请求的参数,如果没有默认为空 :param uri: 访问路由 :param params: 传递参数,string类型,默认为None :return: 此次访问的response ''' # 拼凑访问地址 if params is not None: url = self.url_root + uri + params else: url = self.url_root + uri # 通过get请求访问对应地址 res = requests.get(url) # 返回request的Response结果,类型为requests的Response类型 return res def post(self, uri, params=None): ''' 封装你自己的post方法,uri是访问路由,params是post请求需要传递的参数,如果没有参数这里为空 :param uri: 访问路由 :param params: 传递参数,string类型,默认为None :return: 此次访问的response ''' # 拼凑访问地址 url = self.url_root + uri if params is not None: # 如果有参数,那么通过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 def put(self,uri,params=None): ''' 封装你自己的put方法,uri是访问路由,params是put请求需要传递的参数,如果没有参数这里为空 :param uri: 访问路由 :param params: 传递参数,string类型,默认为None :return: 此次访问的response ''' url = self.url_root+uri if params is not None: # 如果有参数,那么通过put方式访问对应的url,并将参数赋值给requests.put默认参数data # 返回request的Response结果,类型为requests的Response类型 res = requests.put(url, data=params) else: # 如果无参数,访问方式如下 # 返回request的Response结果,类型为requests的Response类型 res = requests.put(url) return res def delete(self,uri,params=None): ''' 封装你自己的delete方法,uri是访问路由,params是delete请求需要传递的参数,如果没有参数这里为空 :param uri: 访问路由 :param params: 传递参数,string类型,默认为None :return: 此次访问的response ''' url = self.url_root + uri if params is not None: # 如果有参数,那么通过put方式访问对应的url,并将参数赋值给requests.put默认参数data # 返回request的Response结果,类型为requests的Response类型 res = requests.delete(url, data=params) else: # 如果无参数,访问方式如下 # 返回request的Response结果,类型为requests的Response类型 res = requests.put(url) return res4.调用common中的封装后的函数
from common import Common# 建立和WebSocket接口的链接con = Common('ws://echo.websocket.org','ws')# 获取返回结果result = con.send('Hello, World...')#打印日志print(result)#释放WebSocket的长连接del con
Dubbo接口测试:
https://blog.csdn.net/cyjs1988/article/details/82495136
Protobuf接口测试:
https://www.jianshu.com/p/58513863b491 |
|