首页 > 其他分享 >pytest + yaml 框架 -52.支持 websocket 协议

pytest + yaml 框架 -52.支持 websocket 协议

时间:2023-07-17 20:01:54浏览次数:40  
标签:INFO websocket 07 17 19 52 yaml ws eq

前言

v1.4.2 版本支持 websocket 协议

python 操作websocket 协议

环境准备

pip3 install websocket-client
pip3 install websockets

基本代码示例

from websocket import create_connection
import json


url = 'ws://localhost:8081/ws'
ws = create_connection(url, timeout=10)  # 创建链接
print(ws.getstatus())        # 状态码
ws.send('hello world')       # 发送文本消息
print(ws.recv())             # 接收返回内容

# 发送json消息
body = {
    "name": "yoyo",
    "email": "[email protected]"
}

ws.send(json.dumps(body))
print(ws.getstatus())
print(ws.recv())
ws.shutdown()  # 关闭连接

运行结果

101
接受到的消息是: hello world
101
接受到的消息是: {"name": "yoyo", "email": "[email protected]"}

yaml 中 webscoket 用例实现

ws关键字相当于create_connection(url, timeout=10) 创建连接
send 关键字相当于 ws.send('hello') 发送文本消息`

test_x1:
  ws:
    url: ws://localhost:8081/ws
    timeout: 10
  send: hello
  validate:
    - eq: [status, 101]
    - eq: [text, '接受到的消息是: hello']

运行结果

collected 1 item                                                                                                        

a_ws/test_ws.yml::test_x1
---------------------------------------------------- live log call -----------------------------------------------------
2023-07-17 19:44:52 [INFO]: 执行文件-> test_ws.yml
2023-07-17 19:44:52 [INFO]: base_url-> http://124.70.221.221:8201
2023-07-17 19:44:52 [INFO]: config variables-> {}
2023-07-17 19:44:52 [INFO]: 运行用例-> test_x1
2023-07-17 19:44:53 [INFO]: 创建 websocket 链接: ws://localhost:8081/ws
2023-07-17 19:44:53 [INFO]: websocket send: hello
2023-07-17 19:44:53 [INFO]: websocket recv: 接受到的消息是: hello
2023-07-17 19:44:53 [INFO]: validate 校验内容-> [{'eq': ['status', 101]}, {'eq': ['text', '接受到的消息是: hello']}]
2023-07-17 19:44:53 [INFO]: validate 校验结果-> eq: [101, 101]
2023-07-17 19:44:53 [INFO]: validate 校验结果-> eq: [接受到的消息是: hello, 接受到的消息是: hello]
PASSED 

websocket 一次连接可以发送多个请求,所以可以在一个用例中有多个send请求

test_x2:
-
  ws:
    url: ws://localhost:8081/ws
    timeout: 10
-
  send: hello
  validate:
    - eq: [status, 101]
    - eq: [text, '接受到的消息是: hello']
-
  send:
    name: yoyo
    email: [email protected]
  validate:
    - eq: [status, 101]
    - eq: [text, '接受到的消息是: {"name": "yoyo", "email": "[email protected]"}']

多个连接地址测试

一个yaml 文件中可以有多个连接

test_x1:
-
  ws:
    url: ws://localhost:8081/ws
    timeout: 10
-
  send: hello
  validate:
    - eq: [status, 101]
    - eq: [text, '接受到的消息是: hello']
    - eq: [body, '接受到的消息是: hello']

test_x2:
  ws:
    url: ws://localhost:8081/json
    timeout: 10
  send:
    name: xx
    email: [email protected]
  validate:
    - eq: [status, 101]
    - eq: [$.name, xx]

多个url地址公共环境地址 base_url 也可以写的config中

config:
  base_url: ws://localhost:8081
test_x1:
-
  ws:
    url: /ws
    timeout: 10
-
  send: hello
  validate:
    - eq: [status, 101]
    - eq: [text, '接受到的消息是: hello']
    - eq: [body, '接受到的消息是: hello']

test_x2:
  ws:
    url: /json
    timeout: 10
  send:
    name: xx
    email: [email protected]
  validate:
    - eq: [status, 101]
    - eq: [$.name, xx]

执行结果

collected 2 items                                                                                                       

a_ws/test_ws1.yml::test_x1
-------------------------------live log call ---------------------------------------
2023-07-17 19:50:07 [INFO]: 执行文件-> test_ws1.yml
2023-07-17 19:50:07 [INFO]: base_url-> ws://localhost:8081
2023-07-17 19:50:07 [INFO]: config variables-> {}

2023-07-17 19:50:08 [INFO]: 创建 websocket 链接: ws://localhost:8081/ws
2023-07-17 19:50:08 [INFO]: websocket send: hello
2023-07-17 19:50:08 [INFO]: websocket recv: 接受到的消息是: hello
2023-07-17 19:50:08 [INFO]: validate 校验内容-> [{'eq': ['status', 101]}, {'eq': ['text', '接受到的消息是: hello']}, {'eq
': ['body', '接受到的消息是: hello']}]
2023-07-17 19:50:08 [INFO]: validate 校验结果-> eq: [101, 101]
2023-07-17 19:50:08 [INFO]: validate 校验结果-> eq: [接受到的消息是: hello, 接受到的消息是: hello]
2023-07-17 19:50:08 [INFO]: validate 校验结果-> eq: [接受到的消息是: hello, 接受到的消息是: hello]
PASSED                                                                                      [ 50%]

----------------- live log call -------------------------------------
2023-07-17 19:50:08 [INFO]: 执行文件-> test_ws1.yml
2023-07-17 19:50:08 [INFO]: base_url-> ws://localhost:8081
2023-07-17 19:50:08 [INFO]: config variables-> {}
2023-07-17 19:50:08 [INFO]: 运行用例-> test_x2
2023-07-17 19:50:09 [INFO]: 创建 websocket 链接: ws://localhost:8081/json
2023-07-17 19:50:09 [INFO]: websocket send: {'name': 'xx', 'email': '[email protected]'}
2023-07-17 19:50:09 [INFO]: websocket recv: {"name": "xx", "email": "[email protected]", "code": 0, "time": 1689594609.5537014}
2023-07-17 19:50:09 [INFO]: validate 校验内容-> [{'eq': ['status', 101]}, {'eq': ['$.name', 'xx']}]
2023-07-17 19:50:09 [INFO]: validate 校验结果-> eq: [101, 101]
2023-07-17 19:50:09 [INFO]: validate 校验结果-> eq: [xx, xx]
PASSED                                                                                     [100%]

================== 2 passed in 2.47s ============================ 

标签:INFO,websocket,07,17,19,52,yaml,ws,eq
From: https://www.cnblogs.com/yoyoketang/p/17561017.html

相关文章

  • http、socket以及websocket的区别(websocket使用举例)
    一、http、socket、websocket介绍1、HTTP(HypertextTransferProtocol):HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本数据。它是基于请求-响应模型的,通过发送HTTP请求从服务器获取数据,并通过HTTP响应返回数据给客户端。HTTP是无状态的,每个请求和响应都是独立的,不保留状......
  • Java 实现 WebSocket 集群转发:使用 Redis 发布订阅
    场景浏览器客户端client1连接到了服务端A的websocket节点。浏览器客户端通过弹性负载均衡,把请求分配到了服务端B,服务端B上没有client1的连接。需求服务端B把消息转发到服务端A上,找到客户端client1的连接,发送出去。画示意图......
  • python通过Websocket与html主动通讯
    python通过Websocket与html主动通讯导语:在Web开发中,实现实时通信是一项常见的需求。本文将介绍如何使用Python和WebSocket技术实现与HTML页面的实时通信,以显示当前的实时时间。1.WebSocket简介WebSocket是一种全双工通信协议,允许在客户端和服务器之间建立持久连接,实现实时数据......
  • VUE WebSocket连接成功后,立即发送一个token
    ws=newWebSocket(ws://${location.host}/xxx)ws.onopen=()=>{ws.send(JSON.stringify({headers:{Authorization:Bearer${token}}}));isConnected.value=true;}查看方法:在消息数据里(不是标头里)......
  • 【雕爷学编程】Arduino动手做(152)---BMI160 六轴陀螺仪模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • Vue3 webSocket收到消息改变响应式全局对象从而实时改变界面
    需求在main.js中创建一个 响应式全局对象。通过WebSocket收到消息改变这个全局对象时,子组件应同步响应。效果:这几个标签框绑定的全局对象json main.js定义 响应式全局对象//全局对象constglobalData=reactive({extTelMonitorData:[{title:......
  • 解决redis yaml配置的具体操作步骤
    实现RedisYAML配置概述在本文中,我们将介绍如何实现RedisYAML配置。Redis是一个开源的内存数据结构存储系统,常用于缓存和数据库。通过使用YAML配置文件,我们可以更方便地管理Redis的配置信息。步骤步骤操作第一步创建YAML配置文件第二步导入YAML解......
  • ORA-65221 signalled during: alter pluggable database application APP$CDB$SYSTEM
    给一台Oracle19.12.0.0.0数据库应用补丁,升级到Oracle19.16.0.0.0时,做datapatch的时候,监控发现数据库的告警日志出现下面错误:2023-07-11T15:09:44.776403+08:00alter pluggable database application APP$CDB$SYSTEM begin install '1.0'ORA-65221 signalled during: ......
  • macOS Sonoma 14beta 3 (23A5286i)第二个更新「附黑/白苹果镜像下载」
    系统镜像下载:系统介绍黑果魏叔7月12日消息,苹果今天发布macOSSonoma14.0Beta3(内部版本号:23A5286i)第二个更新。目前尚不清楚苹果为什么要发布macOSSonomaBeta3的第二个版本,但它可能正在为公开测试版做准备。苹果表示,计划在7月发布macOSSonoma的公开测试版。小部件......
  • SpringBoot中使用Netty开发WebSocket服务-netty-websocket-spring-boot-starter开源项
    场景SpringBoot+Vue整合WebSocket实现前后端消息推送:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114392573SpringCloud(若依微服务版为例)集成WebSocket实现前后端的消息推送:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114480731若依前后......