ITPub博客

首页 > 自动化运维 > 大规模网络运维 > 自动化测试实践:揭秘WebSocket在接口测试中的应用

自动化测试实践:揭秘WebSocket在接口测试中的应用

原创 大规模网络运维 作者:Atstudy技术社区 时间:2024-05-29 17:19:55 0 删除 编辑

如何写接口自动化?这个问题,但凡涉足过自动化测试的人员都能娓娓道来。Requests、urlib、jmeter、curl等等,不在话下。那么,如何获取接口的url、参数、响应等信息呢?!答案就更是随口而出:看接口文档、swagger/apifox等管理工具接口定义。再不济,如果是web应用,通过浏览器看接口请求啊。的确如此,有“一万”种方法可以帮助我们获取到想要的接口信息。

可是,接口文档和接口定义/说明的有无,往往取决于开发人员的自觉性。我们虽然能够要求,但也不能百分百确定一定能够获得。因此,通过浏览器等工具获取请求接口就成了我们常用的手段。

我们以访问“51testing”网站为例,简单说明浏览器获取接口请求的常见方式。

如下图1所示,为访问51testing网站首页时的浏览器面板截图。通过network>Fetch/XHR就能获得http请求的url、status、response等信息。在我们编写自动化测试用例时,这是常用且熟知的获取接口请求信息的方法。

图1访问51testing首页的浏览器network面板信息

但是,上述寻找接口路径/方法,是完全可行的吗?

让我们以下图2为例。图2为51testing客服对话窗口,当我们想模拟自动化测试,获取发送请求的接口信息时,却发现唯一一个通过Fetch/XHR获得的接口(https://chat2445.talk99.cn/chat/msg.dll cmd=xx)请求体Payload和响应体Response中,没有任何与窗口对话中发送的内容(“测试”)有关的信息。那么,这条信息,是如何发送出去的呢?!

图2 51testing客服对话窗口

继续对话,查看Fetch/XHR,仍无任何接口请求。直到……在WS条目中发现了真相。原来,是websocket啊;果然,是websocket啊!

图3 51testing客服对话窗口

那么,什么是websocket呢?又为何要用websocket呢?

WebSocket是一种在Web应用程序中提供双向通信的协议。它允许在客户端和服务器之间创建持久性的连接,从而使得数据能够以低延迟和高效率进行双向传输。一些常见应用场景包括:1)即时通讯应用程序:像聊天应用、在线游戏等需要实时双向通信的应用场景中,WebSocket能够提供更好的性能和用户体验;2)实时数据更新:像股票市场、天气预报、实时地图等需要实时数据更新的应用中,WebSocket可以用来推送实时数据给客户端,而不需要客户端不断地发起请求;3)在线协作工具:像GoogleDocs、Trello等在线协作工具可以使用WebSocket来实现多用户实时编辑、更新等功能;4)实时游戏:在线多人游戏需要实时的玩家位置、动作等信息同步,WebSocket可以帮助实现这些功能。显而易见,客服对话窗属于第1种。

那么,websocket的url、请求内容和响应如何在浏览器中获取呢?!

如下图4所示,可以点击ws的链接,通过Request URL得到的url,再通过Messges获得发送的请求(All下拉列表选择“send”)和收到的响应(All下拉列表选择“receive”)。

图4 websocket的url、请求和响应等查看方式

如此,我们知道了,我们一些“看不见”的接口是如何发送请求的了。但是问题又来了:知道了websocket的请求方式,如何使用自动化脚本方式模拟呢?

可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。

我们以python为例,使用websocket库,模拟websocket请求,发送聊天信息。代码样例如下所示:

import websocket

import json

def on_message(ws,message):

print(f"Received message:{message}")

def on_error(ws,error):

print(f"Error occurred:{error}")

def on_close(ws):

print("Connection closed")

def on_open(ws):

print("Connection established")

#发送消息

message={

"c":20001818,

"u":"e6054702278504214c792f583376d5ab",

"v":"6817201c3614948f68de93ab151e53e5",

"role":2,

"meeting":False,

"cId":876105175,

"site":0,

"g":10063915,

"winId":"b6f2f684f577413abb2ab166433b060e",

"flag":False,

"robot":False,

"msg":"你好"

}

ws.send(json.dumps(message))

if__name__=="__main__":

websocket.enableTrace(True)

ws=websocket.WebSocketApp("wss://chat2445.talk99.cn/chat/room/20001818/876105175/b6f2f684f577413abb2ab166433b060e",

>

>

>

ws.>

ws.run_forever()

至此,我们简单总结一下。浏览器开发者工具功能十分强大,除了我们熟知的http请求,还可以捕获websocket请求。然后,我们可以通过得到的请求信息,使用Python或其他开发语言帮助我们完成相关的接口测试。由此,完成我们“看不见”的接口自动化测试。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034708/viewspace-3017121/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-10-23

  • 博文量
    99
  • 访问量
    96500