用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笔记(叁)继续学习
Oct 24 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
python最长回文串算法
Jun 04 Python
简单了解python的一些位运算技巧
Jul 13 Python
python+pygame实现坦克大战
Sep 10 Python
Python如何省略括号方法详解
Mar 21 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
Python如何执行精确的浮点数运算
Jul 31 Python
python 元组和列表的区别
Dec 30 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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
操作Oracle的php类
2006/10/09 PHP
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
python文件和目录操作函数小结
2014/07/11 Python
安装Python的教程-Windows
2017/07/22 Python
python学习必备知识汇总
2017/09/08 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
装修致歉信
2014/01/15 职场文书
表彰会主持词
2014/03/26 职场文书
大学生社会实践方案
2014/05/11 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
专项资金申请报告
2015/05/15 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
python 常用的异步框架汇总整理
2021/06/18 Python