使用python测试websocket接口

python测试websocket接口

1、什么是webscoket?

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

1.1 webSocket 握手协议

使用python测试websocket接口_第1张图片

这些请求和通常的 HTTP 请求很相似,但是其中有些内容是和 WebSocket 协议密切相关的。我们需要简单介绍一下这些请求和应答信息,”Upgrade:WebSocket”表示这是一个特殊的 HTTP 请求,请求的目的就是要将客户端和服务器端的通讯协议从 HTTP 协议升级到 WebSocket 协议。从客户端到服务器端请求的信息里包含有”Sec-WebSocket-Key”这样的头信息。这是客户端浏览器需要向服务器端提供的握手信息,服务器端解析这些头信息,并在握手的过程中依据这些信息生成一个 16 位的安全密钥并返回给客户端,以表明服务器端获取了客户端的请求,同意创建 WebSocket 连接。一旦连接建立,客户端和服务器端就可以通过这个通道双向传输数据了。

1.2 webscoket的属性、方法和事件

使用python测试websocket接口_第2张图片

2、测试环境搭建

  1. 安装python,版本3.0以上
  2. 安装IDE,pycharm等
  3. 安装websocket、websocket-client 包

3、websocket接口测试

以下实例采用了长连接调用方式。
先来看一下,长连接调用方式:

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

长连接关键方法:ws.run_forever(ping_interval=60,ping_timeout=5)。

import websocket
from websocket import ABNF
import json
import _thread
import time

url = "ws://echo.websocket.org/"   # 接口地址
wav_path="D:/audio_file/001/001M26_01_01_0001.pcm"   #音频文件地址

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

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

def on_close(ws):
    print("close connection")

def on_open(ws):
    def run(*args):
        content = {
            "mid": "1508232047195",
            "version": "1.0",
            "request": {
                "timestamp": 1508232047195,
                "sessionId": "aaaadsfasdfkop"
            },
            "params": {
                "audio": {
                    "audioType": "wav",
                    "sampleRate": 16000,
                    "channel": 1,
                    "sampleBytes": 2
                }
            }
        }
        ws.send(json.dumps(content))
        step = 3200 
        with open(wav_path, 'rb') as f:
            while True:
                read_data = f.read(step)
                if read_data:
                    ws.send(read_data, ABNF.OPCODE_BINARY)
                if len(read_data) < step:
                    break
                time.sleep(0.1)

        ws.send('', ABNF.OPCODE_BINARY)
        time.sleep(1.5)
        ws.close()
    _thread.start_new_thread(run, ())

if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp(url,
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()



你可能感兴趣的:(接口测试)