用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 相关文章推荐
Django 跨域请求处理的示例代码
May 02 Python
python实现简单淘宝秒杀功能
May 03 Python
Python continue继续循环用法总结
Jun 10 Python
python版本五子棋的实现代码
Dec 11 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 Python
Python 日志logging模块用法简单示例
Oct 18 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python实现飞行棋游戏
Feb 05 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 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的FTP学习(一)
2006/10/09 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Python 可爱的大小写
2008/09/06 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
python得到单词模式的示例
2018/10/15 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python中如何使用insert函数
2020/01/09 Python
python属于跨平台语言码
2020/06/09 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
python 实现图片裁剪小工具
2021/02/02 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
关于迟到的检讨书
2014/01/26 职场文书
上班打牌检讨书
2014/02/07 职场文书
实习单位评语
2014/04/26 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书