用Python进行websocket接口测试

这篇文章主要介绍了用Python进行websocket接口测试,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python进行websocket接口测试。

Socket

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

Python 中,我们使用 socket 模块的 socket 函数来创建一个 socket 对象。语法格式如下:

socket.socket ( family ,type ,proto)

现在大多数用的都是websocket,那我们就先来安装一下websocket的安装包。

1

pip install websocket-client

安装完之后,我们就开始我们的websocket之旅了。

在websocket里,我们有常用的这几个方法:

on_message方法

  1. def on_message(ws, message):

  2.   print(message)

on_message是用来接受消息的,server发送的所有消息都可以用on_message这个方法来收取。

on_error方法:

  1. def on_error(ws, error):

  2. print(error)

这个方法是用来处理错误异常的,如果一旦socket的程序出现了通信的问题,就可以被这个方法捕捉到。

on_open方法:

  1. def on_open(ws):

  2. def run(*args):

  3. for i in range(30):

  4. # send the message, then wait

  5. # so thread doesn't exit and socket

  6. # isn't closed

  7. ws.send("Hello %d" % i)

  8. time.sleep(1)

  9. time.sleep(1)

  10. ws.close()

  11. print("Thread terminating...")

  12. Thread(target=run).start()

on_open方法是用来保持连接的,上面这样的一个例子,就是保持连接的一个过程,每隔一段时间就会来做一件事,他会在30s内一直发送hello。最后停止。

on_close方法:

  1. def on_close(ws):

  2. print("### closed ###")

onclose主要就是关闭socket连接的。

如何创建一个websocket应用:

ws = websocket.WebSocketApp("wss://echo.websocket.org")

括号里面就是你要连接的socket的地址,在WebSocketApp这个实例化的方法里面还可以有其他参数,这些参数就是我们刚刚介绍的这些方法。

  1. ws = websocket.WebSocketApp("ws://echo.websocket.org/",

  2. on_message=on_message,

  3. on_error=on_error,

  4. on_close=on_close)

完整代码:

  1. import websocket

  2. from threading import Thread

  3. import time

  4. import sys

  5. def on_message(ws, message):

  6. print(message)

  7. def on_error(ws, error):

  8. print(error)

  9. def on_close(ws):

  10. print("### closed ###")

  11. def on_open(ws):

  12. def run(*args):

  13. for i in range(3):

  14. # send the message, then wait

  15. # so thread doesn't exit and socket

  16. # isn't closed

  17. ws.send("Hello %d" % i)

  18. time.sleep(1)

  19. time.sleep(1)

  20. ws.close()

  21. print("Thread terminating...")

  22. Thread(target=run).start()

  23. if __name__ == "__main__":

  24. websocket.enableTrace(True)

  25. host = "ws://echo.websocket.org/"

  26. ws = websocket.WebSocketApp(host,

  27. on_message=on_message,

  28. on_error=on_error,

  29. on_close=on_close)

  30. ws.on_open = on_open

  31. ws.run_forever()

也可以使用python进行websocket的客户端压力测试。

  1. # -*- coding:utf-8 -*-

  2. # __author__ == 'chenmingle'

  3. import websocket

  4. import time

  5. import threading

  6. import json

  7. import multiprocessing

  8. import uuid

  9. from threadpool import ThreadPool, makeRequests

  10. # 修改成自己的websocket地址

  11. WS_URL = "xxxx"

  12. # 定义进程数

  13. processes = 4

  14. # 定义线程数(每个文件可能限制1024个,可以修改fs.file等参数)

  15. thread_num = 700

  16. index = 1

  17. def on_message(ws, message):

  18. # print(message)

  19. pass

  20. def on_error(ws, error):

  21. print(error)

  22. pass

  23. def on_close(ws):

  24. # print("### closed ###")

  25. pass

  26. def on_open(ws):

  27. global index

  28. index = index + 1

  29. def send_thread():

  30. # 设置你websocket的内容

  31. # 每隔10秒发送一下数据使链接不中断

  32. while True:

  33. ws.send(u'hello服务器')

  34. time.sleep(10)

  35. t = threading.Thread(target=send_thread)

  36. t.start()

  37. def on_start(num):

  38. time.sleep(5)

  39. # websocket.enableTrace(True)

  40. ws = websocket.WebSocketApp(WS_URL + str(num),

  41. on_message=on_message,

  42. on_error=on_error,

  43. on_close=on_close)

  44. ws.on_open = on_open

  45. ws.run_forever()

  46. def thread_web_socket():

  47. # 线程池

  48. pool_list = ThreadPool(thread_num)

  49. num = list()

  50. # 设置开启线程的数量

  51. for ir in range(thread_num):

  52. num.append(ir)

  53. requests = makeRequests(on_start, num)

  54. [pool_list.putRequest(req) for req in requests]

  55. pool_list.wait()

  56. if __name__ == "__main__":

  57. # 进程池

  58. pool = multiprocessing.Pool(processes=processes)

  59. # 设置开启进程的数量

  60. for i in xrange(processes):

  61. pool.apply_async(thread_web_socket)

  62. pool.close()

  63. pool.join()

以上就是用Python进行websocket接口测试的详细内容。

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

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

相关文章

【RocketMQ 存储】- 同步刷盘服务 GroupCommitService

文章目录 1. 前言2. 参数3. 队列相关4. 核心逻辑 run4.1 waitForRunning4.2 doCommit4.3 flush 5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章: 【RocketMQ 存储】- RocketMQ存储类 MappedFile【RocketMQ 存储】- 一文总结 RocketMQ 的存…

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具,旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病,通常表现为认知障碍、记忆丧失和语言障碍等症状…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原…

【异常解决】在idea中提示 hutool 提示 HttpResponse used withoud try-with-resources statement

博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

搜维尔科技:提供人形机器人传感器的应用案例分析

视觉传感器 • 家庭服务场景:在家庭清洁机器人中,视觉传感器可以识别家具、障碍物的位置和形状,规划清洁路径,避开桌椅、宠物玩具等。如小米扫地机器人,通过视觉传感器与算法结合,能构建房间地图&#xff…

虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!

不拆发动机、不测缸压,只测个电流也能知道哪个缸压缩有问题?没错!做个相对压缩测试,测下起动电流就行,简单又实用!今天,从原理到方法,几分钟教会你! 我们都知道&#xf…

自然语言处理NLP_[1]-NLP入门

文章目录 1.自然语言处理入门1. 什么是自然语言处理2.自然语言处理的发展简史3 自然语言处理的应用场景1. **机器翻译**2. **文本分类**3. **情感分析**4. **问答系统**5. **文本生成**6. **信息抽取**7. **语音识别与合成**8. **文本摘要**9. **搜索引擎优化**10. **聊天机器人…

无限使用Cursor

原理:运行程序获得15天的免费试用期,重新运行程序重置试用期,实现无限使用。免费的pro账号,一个月有250的高级模型提问次数。 前提:已安装cursor cursor-vip工具:https://cursor.jeter.eu.org?p95d60efe…

LIMO:少即是多的推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型(LLM)中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据(通常超过 100,000 个示例),但本文展…

一种基于Leaflet.Legend的图例动态更新方法

目录 前言 一、场景再现 1、需求描述 2、核心方法介绍 3、存在的问题 二、问题解决 1、重复解决办法 2、图例不展示解决办法 3、成果展示 三、总结 前言 在当今数字化时代,地理信息系统(GIS)技术已经广泛应用于各个领域,…

【AI时代】使用ollama私有化部署deepseek的过程及问题记录

文章目录 说明下载模型通过ollama下载通过modelscope下载 部署open-webui问题记录临时目录空间不足单机多卡部署后台启动 说明 对于DeepSeek的私有化部署,现在网上已经有很全面的资料了,本文主要记录部署以及部署过程中遇到的问题。目前对于这些问题&am…

使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8

文章目录 1. 安装 SDKMAN!2. 查找可用的 Java 8 版本3. 安装 Java 84. 验证安装5. 切换 Java 版本(可选)6. 解决 ARM 架构兼容性问题总结 可以使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8。SDKMAN! 是一个强大…

存储异常导致的Oracle重大生产故障

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

计算机视觉-拟合

一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法(最小二乘,全最小二乘,鲁棒最小二乘,RANSAC) 边缘提取只能告诉边,但是给不出来数学描述(应该告诉这个点线是谁的&a…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具演示05

SQLSERVER的ImpDp和ExpDp工具演示 1、表部分数据导出 (-query) ※「-query」和「-include_table」必须一起使用 「-query」后面字符串是sql文的where语句,但要注意要使用%,需要写%% 验证用:导出的表,导入到新的数据库 db的数…

《qt6+Open3d网格读取》

《qt6+Open3d网格读取》 效果显示一、创建步骤1.1 创建动作及槽函数二、注意效果显示 一、创建步骤 1.1 创建动作及槽函数 按照以下步骤创建动作,并将动作拉入菜单栏文件中,创建槽函数。 在mainwindow.h添加 private:geometry

mapbox进阶,添加绘图扩展插件,绘制圆形

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

C#控件开发6—指示灯

按钮功能:手自动旋转,标签文本显示、点击二次弹框确认(源码在最后边); 【制作方法】 找到控件的中心坐标,画背景外环、内圆;再绘制矩形开关,进行角度旋转即可获得; 【关…

电商平台的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统商品交易信息管理难度大,容错率低&#xff0…

【deepseek实战】绿色好用,不断网

前言 最佳deepseek火热网络,我也开发一款windows的电脑端,接入了deepseek,基本是复刻了网页端,还加入一些特色功能。 助力国内AI,发出自己的热量 说一下开发过程和内容的使用吧。 目录 一、介绍 二、具体工作 1.1、引…