用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 try异常处理机制
Jun 01 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
python pygame实现球球大作战
Nov 25 Python
Python中bisect的使用方法
Dec 31 Python
关于python中的xpath解析定位
Mar 06 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python模块内置属性概念及实例
Feb 18 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
PHP实现的购物车类实例
2015/06/17 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php中使用websocket详解
2016/09/23 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
探究python中open函数的使用
2016/03/01 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python实现简单http服务器功能
2018/09/17 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
中学生爱国演讲稿
2013/12/31 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
2014年度工作总结报告
2014/12/15 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
委托书范本格式
2019/04/18 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Redis基本数据类型List常用操作命令
2022/06/01 Redis