用Python进行websocket接口测试


Posted in Python onOctober 16, 2020

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

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

pip install websocket-client

用Python进行websocket接口测试

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

我们先来看个炒鸡简单的栗子:

import websocket
ws = websocket.WebSocket()
ws.connect("ws://example.com/websocket", 
      http_proxy_host="proxy_host_name", 
      http_proxy_port=3128)

这个栗子就是创建一个websocket连接,这个模块支持通过http代理访问websocket。代理服务器允许使用connect方法连接到websocket端口。默认的squid设置是“只允许连接HTTPS端口”。

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

on_message方法:

def on_message(ws, message):
  print(message)

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

on_error方法:

def on_error(ws, error):
  print(error)

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

on_open方法:

def on_open(ws):
  def run(*args):
    for i in range(30):
      # send the message, then wait
      # so thread doesn't exit and socket
      # isn't closed
      ws.send("Hello %d" % i)
      time.sleep(1)

    time.sleep(1)
    ws.close()
    print("Thread terminating...")

  Thread(target=run).start()

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

on_close方法:

def on_close(ws):
  print("### closed ###")

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

如何创建一个websocket应用:

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

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

ws = websocket.WebSocketApp("ws://echo.websocket.org/",
              on_message=on_message,
              on_error=on_error,
              on_close=on_close)

指定了这些参数之后就可以直接进行调用了,例如:

ws.on_open = on_open

这样就是调用了on_open方法

如果我们想让我们的socket保持长连接,一直连接着,就可以使用run_forever方法:

ws.run_forever()

完整代码:

import websocket
from threading import Thread
import time
import sys

def on_message(ws, message):
  print(message)

def on_error(ws, error):
  print(error)

def on_close(ws):
  print("### closed ###")

def on_open(ws):
  def run(*args):
    for i in range(3):
      # send the message, then wait
      # so thread doesn't exit and socket
      # isn't closed
      ws.send("Hello %d" % i)
      time.sleep(1)

    time.sleep(1)
    ws.close()
    print("Thread terminating...")

  Thread(target=run).start()


if __name__ == "__main__":

  websocket.enableTrace(True)
  host = "ws://echo.websocket.org/"
  ws = websocket.WebSocketApp(host,
                on_message=on_message,
                on_error=on_error,
                on_close=on_close)
  ws.on_open = on_open
  ws.run_forever()

如果想要通信一条短消息,并在完成后立即断开连接,我们可以使用短连接:

from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result = ws.recv()
print("Received '%s'" % result)
ws.close()

关于websocket的介绍就到这儿了。

以上就是用Python进行websocket接口测试的详细内容,更多关于python 接口测试的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python正则表达式的使用范例详解
Aug 08 Python
初步解析Python下的多进程编程
Apr 28 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
python实现超市商品销售管理系统
Nov 22 Python
python实现串口通信的示例代码
Feb 10 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
学python爬虫能做什么
Jul 29 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
python如何控制进程或者线程的个数
Oct 16 #Python
python利用 keyboard 库记录键盘事件
Oct 16 #Python
python实现快速文件格式批量转换的方法
Oct 16 #Python
Python通过getattr函数获取对象的属性值
Oct 16 #Python
pandas处理csv文件的方法步骤
Oct 16 #Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 #Python
Python使用内置函数setattr设置对象的属性值
Oct 16 #Python
You might like
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
python生成excel的实例代码
2017/11/08 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
Java如何格式化日期
2012/08/07 面试题
建筑班组长岗位职责
2014/01/02 职场文书
初中科学教学反思
2014/01/21 职场文书
美术学专业求职信
2014/07/23 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
个人委托书范本
2014/09/13 职场文书
三八妇女节慰问信
2015/02/14 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
MongoDB数据库之添删改查
2022/04/26 MongoDB