背景:
接口地址为:ws://sunlei.demo
接口说明:websocket接口,首次连接,通过Text请求设置开启标志,然后通过wav文件流传输,达到后端服务可以根据传输信息进行解析满足指定标准后,websocket返回请求成功信息。
后端研发提供了一个请求成功的示例python代码,这是截取文件传输部分:,代码解释为:
某个文件,每次读取,并发送服务区400字节,转换为2进制进行传输。直至整个文件全部传输完成。
Jmter实际操作:
1、首先配置websocket连接
2、连接成功,开启正式传输标志。注意选择,使用已经存在的webSocket链接,这里是文本模式
3、请求成功,传输文件,Binary形式,首先直接选择整个文件进行传输。发现出现异常。因为服务端做的限制,避免压力过大,每次需要接收要求大小的字节流,而不是整个文件。从示例代码中也可以看出。本请求需要不允许。
4、不能传输整个文件,那么把文件进行转换,按照示例代码说明,每次取400字节,并且转换成我们需要的格式,放置在 Request data框里进行传输。注意:Request data 框内,Bianry请求 需要放置 16进制数据。这也是好多人在webSocket请求中传输流导致服务端收不到的异常原因,大部分都是文件格式错误,或者进制转换错误。以下为转为16进制代码.并每400字节的内容为1行,写入到txt文件中
step = 400
with open(self.file, 'rb') as f:
while True:
read_data = f.read(step)
hex_string = binascii.hexlify(read_data).decode('utf-8')
print(hex_string)
# 打开文件用于追加
with open('E:\mytxt\demo.txt', 'a') as file:
# 在每个元素后面添加换行符
file.write(hex_string + '\n')
#print(read_data)
#print("------------------------------------------------------------------------------------------")
if read_data:
#print("发送了1次流文件")
ws.send(read_data, ABNF.OPCODE_BINARY)
if len(read_data) < step:
break
time.sleep(0.02)
5、通过循环发送binary16进制文件请求,每次读取1行txt文件内容,直至文件传输完毕
6、读取服务端发送的消息
7、消息正常,关闭WebSocket请求