pytest+websocket自动化集成实践
01
websocket协议
1、介绍
WebSocket是一种在单个TCP通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
2、原理
3、与http协议的比较
相同之处:
- 都是基于TCP的应用层协议;
- 都使用Request/Response模型进行连接的建立;
- 在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码;
- 都可以在网络中传输数据。
不同之处:
- WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用;
- WS的连接不能通过中间人来转发,它必须是一个直接连接;
- WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据;
- WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息;
- WS的数据帧有序。
4、websocket应用场景
websocket的使用场景:
社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等 需要高实时的场景
02
websocket接口测试实战
以码同学全栈接口项目中的websocket接口为例,项目地址 http://**.***.**.**:****/pinter/
接口名称 | 接口类型 | URL | 参数 |
---|---|---|---|
匹配接口 | websocket | /pinter/imserver/用户id | {"type":"match","from":"发送者","to":"system"} |
发送聊天消息接口 | websocket | /pinter/imserver/用户id | {"msgId":"消息id","type":"normal","from":"发送者","to":"老师id","msg":"消息内容"} |
01
抓包查看,熟悉接口业务
1、访问项目首页,打开浏览器的开发者工具,选择Network-->WS
2、点击页面上websocket案例的开始练习,抓包看到以下数据
绿色箭头表示浏览器向服务器发送的数据,红色箭头表示服务器返回的数据
本次请求是的业务是打开聊天窗口后,匹配一个后台的客服老师
请求参数:
- type为match表示这是个匹配类型的动作
- from表示客户id
- to表示该请求发送给谁
- system为服务器系统
{
服务器返回数据:
- code是业务状态码,0表示成功
- from表示该数据是谁发来的,system表示是系统发来的
- msg表示系统为客户匹配到的老师id
- msgId表示的是消息id
- timestamp当前时间戳
- to表示该数据是发给谁的,发给客户admin的
- type表示请求类型,match表示这个匹配请求
{
3、聊天窗口发送聊天信息,抓包查看
第1步:对应数字图中的数字1,发送数据到服务器,服务器会根据信息进行推送,将数据发给指定的客服老师
- type表示请求类型,normal是正常聊天消息的意思
- from表示这个数据是从谁发来的,从客户admin发出来的
- to表示这个是发给谁的,发给cf2137234f3943e3898df8fcd14f099a__mtx这个客服老师的
- msg是发给客服老师具体的信息
{
第2步:对应图中的数字2,服务器将消息推送给客服老师成功后,把成功的信息发送给客户,其中核心字段msg为push success表示推送成功,type为receipt表示服务器返回的
{
第3步:对应图中的数字3,客服老师在收到服务器推送给自己的客户消息后,返回给客户的信息,也是由服务器转发过来的,而并不是直接返回给客户的
- type表示请求类型,normal是正常聊天消息的意思
- from表示这个数据是从谁发来的,从客服老师cf2137234f3943e3898df8fcd14f099a__mtx发出来的
- to表示这个是发给谁的,发给admin这个客户的
- msg是发给客服具体的信息
{
02
python调用websocket接口
- 安装第三方库
- 接口调用
- 接口框架中适配websocket封装
1、封装底层websocket类
在config目录下创建一个websocket.yml的文件,写上如下内容:
在client.py中增加如下代码
2、封装websocket api层
在api包下创建websoket_api包,其下创建imserver_api.py ,写上如下代码
3、编写测试用例层
在testcases目录下创建websocketapi包,在其下创建test_websocket_api.py
# !/usr/bin python3
FunTester原创专题推荐~
-- By FunTester
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的