用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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
python读取中文txt文本的方法
Apr 12 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
python实现贪吃蛇双人大战
Apr 18 Python
python中np是做什么的
Jul 21 Python
Python爬虫定时计划任务的几种常见方法(推荐)
Jan 15 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操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
javascript 写类方式之七
2009/07/05 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
javascript时间函数大全
2014/06/30 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python基于win32api实现键盘输入
2020/12/09 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
股东协议书范本
2014/04/14 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
2014年派出所工作总结
2014/11/21 职场文书
找规律教学反思
2016/02/23 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技