websocket接口如何处理
在接口自动化中,HTTPS类型的接口使用request库可以解决,webservier接口可使用suds-py3第三方库【webserver接口基本不用】;那么websocket接口怎样请求?
python中也同样提供了许多第三方库,比如接下来要说的websocket-client
websockt-client创建socket客户端有两种方式:create_connection、websocketapp
create_connection
使用create_connection创建socket客户端代码如下:
from websocket import create_connection
class webSocket_conn:
"""
1、使用websocket中的create_connection
"""
def __init__(self, url: str):
"""
初始化,建立连接
:param url:
"""
try:
logger.info(f"初始化create_connection连接url:{url}")
self.ws = create_connection(url)
if self.ws.getstatus() == 101:
logger.info(f"初始化连接成功,连接状态为:{self.ws.getstatus()}")
except:
logger.warning(f"初始化websocket——conn连接失败!!!当前连接状态为:{self.ws.getstatus()}")
def request_socket(self, req_data):
try:
logger.info(f"请求参数为:{req_data}")
self.ws.send(req_data)
while True:
result = self.ws.recv()
logger.info(f"获取响应结果:{result}")
if req_data in result:
return result
except:
logger.exception(f"发送参数or结果获取失败,请查看具体原因!!!")
def websocket_close(self):
self.ws.close()
logger.warning("socket连接已关闭")
总结:使用create_connection创建socket客户端时,发送请求与获取socket内容仅使用2个方法即可:ws.send(req_data),ws.recv();一般在测试websocket接口消息发送功能是否正常,发送完消息就断开连接,用这个方法还是比较方便。
WebSocketApp
关于websocketapp方法一般用于对某个接口进行长期的进行监听,监听其功能是否异常,那么就可以使用webSocketApp这个类来创建一个长连接进行监听
代码如下:
import websocket
class websocket_app_long:
"""
2. 使用websocketapp方式连接websocket接口;长连接
"""
def __init__(self, url:str, premises):
try:
self.premises = premises
# 建立连接
self.ws = websocket.WebSocketApp(url=url, on_open=self.on_open, on_message=self.on_message, on_error=self.on_error, on_close=self.on_close)
logger.warning("websocket连接建立成功")
self.ws.on_open = self.on_open
# 心跳时间间隔:ping_interval,心跳超时时间ping_timeout
self.ws.run_forever(ping_interval=3, ping_timeout=1)
logger.warning(f"websocket间隔时间默认:3;超时时间:1")
except:
logger.warning("初始化连接websocket失败")
def on_message(self, ws, message):
"""
接收消息调用方法
:param ws: 连接
:param message:消息内容
:return:
"""
try:
# 服务器返回数据处理
message = zlib.decompress(message)
message = json.loads(message)
# 筛选服务器返回数据,打印用例相关接口的数据
if message["HandleCode"] != "":
logger.info(f'{message["HandleCode"]}返回信息:{message}')
except:
logger.warning("接收消息调用方法失败")
def on_error(self, ws, error):
"""
调用报错调用方法
:param ws:
:param error:
:return:
"""
logger.error(f'{ws}返回错误:{error}')
def on_close(self, ws):
"""
主动关闭调用方法
:param ws:
:return:
"""
self.ws.close()
logger.warning(f'{ws}关闭连接:closed')
def on_open(self, ws):
"""
建立连接调用方法
:param ws:
:return:
"""
time.sleep(2)
for i in self.premises:
logger.info(f'{i["HandleCode"]}参数发送:{i}')
ws.send(json.dumps(i))
logger.info("-" * 180)
if __name__ == "__main__":
ws = websocket_app_long(url)
ws.run_forever()
针对websocketapp实例化时参数:
url:连接socket地址
on_open:建立连接时调用的方法
on_message:接收到消息时返回调用的方法
on_error:连接出现错误时,会触发on_error指定的方法
on_close:当连接关闭时,会触发on_close指定的方法
其他更多方法可参考相关文档…
上方创建socket连接成功后若需要长时间监听则调用run_forever()方法即可保持长连接。