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

news2024/10/7 12:01:56

如何写接口自动化?这个问题,但凡涉足过自动化测试的人员都能娓娓道来。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的请求方式,如何使用自动化脚本方式模拟呢?

我们以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",

on_message=on_message,

on_error=on_error,

on_close=on_close)

ws.on_open=on_open

ws.run_forever()

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

文末了:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)

1.项目背景 心力衰竭是一种严重的公共卫生问题,影响着全球数百万人的生活质量和寿命,心力衰竭的病因复杂多样,既有个体生理因素的影响,也受到环境和社会因素的制约,个体的生活方式、饮食结构和医疗状况在很大程度上决定了其心力衰竭的风险。在现代社会,随着生活水平的提…

利用英特尔 Gaudi 2 和至强 CPU 构建经济高效的企业级 RAG 应用

检索增强生成 (Retrieval Augmented Generation,RAG) 可将存储在外部数据库中的新鲜领域知识纳入大语言模型以增强其文本生成能力。其提供了一种将公司数据与训练期间语言模型学到的知识分开的方式,有助于我们在性能、准确性及安全隐私之间进行有效折衷。…

计算机网络-Traffic-Filter流量过滤策略

一、概述 为提高网络安全性,管理人员需要控制进入网络的流量,将不信任的报文丢弃在网络边界。所谓的不信任报文是指对用户来说存在安全隐患或者不愿意接收的报文。同时保证数据访问安全性,企业网络中经常会要求一些部门之间不能相互访问。 背…

金融行业专题|超融合对国密卡和国产加密技术的支持能力如何?

目前,不少金融机构都使用国密卡(满足国密算法要求的加密卡)和国产密码解决方案保障金融信息安全。而在传统虚拟化架构下,单块加密卡通常只能服务一个系统,经常会出现资源利用率低、加密处理性能不足等问题,…

神经网络与深度学习——第14章 深度强化学习

本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第14章 深度强化学习 深度强化学习 强化学习(Reinforcement Learning,RL),也叫增强学习,是指一类从与环境交互中不断学习的问题以及解决这类问题…

最简单的安卓模拟器抓包?

安装模拟器抓包似乎是有个绕不开的话题,但是现在普遍的安卓模拟器抓包会遇到以下问题: 1.证书配置繁琐 2.模拟器不兼容软件 3.系统设置繁琐。 前几天写过一次微信小程序如何抓包,现在来讲一下模拟器怎么抓包吧。首先使用的工具还是TangGo测…

开源集运wms系统

集运WMS系统是一种专为集运业务设计的仓库管理系统,它能够高效地处理来自多个来源的货物,优化存储和发货流程。 经过长时间的开发和测试,推出了我的集运WMS系统。它不仅具备传统WMS系统的所有功能,还针对集运业务的特点进行了特别…

Python轻量级的插件框架库之pluginbase使用详解

概要 在软件开发中,插件系统是一个常见的需求。插件系统允许开发者动态加载和卸载功能模块,从而提高应用程序的灵活性和可扩展性。Python的pluginbase库是一个轻量级的插件框架,旨在简化插件系统的构建过程。pluginbase库提供了一套简单易用的API,使开发者能够快速集成插件…

初步研究Pose_300W_LP datasets.py

mat文件参数解读 Color_para:颜色参数,用于描述图像的颜色属性,比如图像的亮度、对比度等信息。 亮度属性、对比度属性、饱和度属性(颜色越鲜艳)、色调属性(色调越偏向蓝色)、色温属性&#xf…

结构体(自定义类型)

1.结构体 结构体这种自定义的数据类型,让程序员可以自己创造适合的类型 结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量,可以是标量,数组,指针甚至是其他结构体 1.1.1 结构…

六西格玛培训:企业逆袭的秘密武器!——张驰咨询

为了提升企业的运营效率、产品质量和客户满意度,六西格玛培训成为了一个不可或缺的环节。以下是企业成功实施六西格玛培训的关键步骤: 一、清晰设定培训目标 首先,企业应明确六西格玛培训的具体目标,如提升产品质量、降低成本、…

武汉城投城更公司与竹云科技签署战略协议,携手构建智慧城市新未来!

2024年5月16日,武汉城投城更公司与深圳竹云科技股份有限公司(以下简称“竹云”)签订战略合作协议,双方将深入推进产业项目合作。 签约现场,双方围绕产业项目合作方向、路径和内容等进行了全面深入交流。城投城更公司党…

Windows和Linux系统部署Docker(2)

目录 一、Linux系统部署docker 前置环境: 1.安装需要的软件包, yum-util 提供yum-config-manager功能 2.添加阿里云 docker-ce 仓库 3.安装docker软件包 4.启动 docker并设置开机自启 5.查看版本: 二、windows系统部署docker 1.查看…

如何用unittest帮你快速生成自动化测试报告?

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一直以来很多使用 pythonunittest 做自动化测试的的小伙伴都在想,unittest 这个官方库…

MFC工控项目实例之一主菜单制作

1、本项目用在WIN10下安装的vc6.0兼容版实现。创建项目名为SEAL_PRESSURE的MFC对话框。在项目res文件下添加相关256色ico格式图片。 2、项目名称:密封压力试验机 主菜单名称: 系统参数 SYS_DATA 系统测试 SYS_TEST 选择型号 TYP_CHOICE 开始试验 TES_STA…

Tasker+SendSilentMail实现钉钉自动打卡

Tasker 允许用户根据自定义的“配置文件”(Profiles),在特定的“背景”(Contexts)下,执行指定的“任务”(Tasks)。以下是关于Tasker的详细介绍: 强大的自定义能力:用户可以根据自己的需求,创建各种配置文件和任务&…

vwmare虚拟机我已复制和我已移动的区别

问题 此虚拟机可能已被移动或复制。 为了配置特定的管理和网络功能,WMware Workstation需要知道是否已移动或复制了此虚拟机。 如果您不知道,请回答“我已复制该虚拟机(P)” 我已复制 意味着复制出了一个完全相同的副本。 这两个副本可以运行在一台物理…

Linux 服务器配置 SSH 服务登录失败处理

任务目标 配置 Linux 服务器ssh远程登录失败处理机制,防止黑客爆破服务器密码 操作步骤 备份原配置文件 $ sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak安装 pam_tally2 统计登陆失败次数 # 对于Debia…

CyberDAO M级共识交流会·西安站圆满落幕:共筑Web3美好未来

CyberDAO M级共识交流会于2024年5月28日在西安隆重举行,这是一场CyberDAO精英汇聚的盛会,以同心共筑,志在必达为主题口号与DAO精英携手并进,共筑CyberDAO美好宏图。CyberDAO的使命是降低WEB3的门槛,帮助用户轻松抓住行…

每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/ 这道题与我之前发布的题目116是一样的解题过程,只是本题所给的数组大小与116不同,这是需要注意的。 116题目链接: http://t.csdnimg.cn/3Ub02 struct Node* c…