找回密码
 立即注册
查看: 321|回复: 0

WebSocket接口,陌生的协议接口测试方法

[复制链接]
发表于 2021-12-25 08:16 | 显示全部楼层 |阅读模式
学习极客时间《接口测试入门课》,有一些积累和不同的收获。在时间很紧张的情况下,我们对接口测试的方式:对接口进行正确的逻辑测试、错误的逻辑测试,去判断是否满足最初的需求,因此,我们需要快速地掌握验证手段。
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
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-6-2 22:12 , Processed in 0.134107 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表