接口自动化处理websocket接口

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()方法即可保持长连接。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值