美文网首页
python web接口测试--websocket接口测试

python web接口测试--websocket接口测试

作者: D_w | 来源:发表于2021-09-30 14:28 被阅读0次

    WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

    它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
    websocket和http接口特点

    • http 接口 获取数据,先请求【客户端先主动,服务端才能响应】
    • http协议 --- 请求收到响应后,代表 交互结束
    • websocket接口 ,连接建立后, 服务端可以 主动发送数据
    • websocket协议 --- 连接建立, 不会自动结束,需要用代码控制结束,属于长连接协议
      websocket: 及时性要求高的场景 【微信消息、通知推送、直播间聊天 --- 】
      websocket接口和http接口区别
      相同点
    1. 都是基于网络数据交互
    2. 都需要在请求的时候创建网络连接
    3. 接口测试要素: 参数传递、响应内容
      不同点:
    4. websocket 接口基于一个 websocket url建立连接。而不是每次请求不同的url
    5. websocket接口地址实际是一个创建连接的地址
    6. websocket连接建立之后,后续发送数据,基于已创建的连接,用的时候无需再次指定host port...等信息
    7. websocket 发数据 - 格式根据接口文档而定

    jmeter测试

    jemter测试websocket的步骤与http一样
    ,使用jemter websocket插件,jmeter-websocket-samplers-1.2.8.jar,这块就不在赘述,重点说明下用python进行自动化接口测试

    python 接口自动化测试

    以实例做为说明,有一聊天室
    接口文档如下:

    • 网页访问地址: http://127.0.0.1:18004/login
    • 系统内置账户包含有:tony,nick,tom,jack,any,gg,mm
    • 系统账户密码统一为:1234
    • 连接地址示例: ws://127.0.0.1:18004/webSocket/nick
    • 聊天数据发送格式:发送内容为json格式
      {
      "from": "nick",
      "to": "tony",
      "text": "hello, i am nick"
      }
      字段描述:
      from: 发送者name
      to: 接收者name(0:代表上线消息,-2:代表下线消息,-1代表广播全局消息,其余为用户点对点消息)
      text: 发送的文本
    • 聊天数据接收格式:接收内容为json模式
      {
      "from": "nick",
      "to": "tony",
      "text": "hello, i am nick",
      "date": "2021-09-24 20:14:17"
      }
      字段描述同上

    根据此,模拟两人上线对话下线,看聊天室能否正常工作,代码如下:

    import json
    
    import pytest
    from websocket import create_connection
    
    # Pytest 用例
    class Test_Websocket:
        def test_chat(self):
            # 1、建立连接
            ws_tom = create_connection("ws://127.0.0.1:18004/webSocket/tom")
            ws_jack = create_connection("ws://127.0.0.1:18004/webSocket/jack")
            print("0. tom 和 jack 成功连接")
    
            # 2. tom 发消息给 jack
            ws_tom.send('''{
                      "from": "tom",
                      "to": "jack",
                      "text": "hello, i am tom"
                    }''')
            print("1. tom 向 jack 发送消息")
    
            # jack 接收到消息【可能收到 非 用户发送的消息。 可能收到 系统消息】
            while True:
                result = ws_jack.recv() # 服务器推送过来的数据
                dict_result = json.loads(result)  # 将 json字符串 转换为 字典类型
                to = dict_result['to']
                # 判断消息的类型,如果非用户消息,则继续读取下一个消息
                if to == '-1' or to == '-2' or to == '0':
                    continue
    
                msg = dict_result["text"]
                assert msg == "hello, i am tom", "消息接收有问题"  #  断言
                print("2. jack 成功收到 tom 发送的消息")
                break
    
            # jack 发送回复消息
            ws_jack.send('''{
                      "from": "jack",
                      "to": "tom",
                      "text": "hello, i am jack"
                    }''')
    
            print("3. jack 发送回复给 tom")
    
            # tom 要能够收到回复
            while True:
                reply_result = ws_tom.recv() # 服务器推送过来的数据
                to = json.loads(reply_result)['to']
                # 判断消息的类型,如果非用户消息,则继续读取下一个消息
                if to == '-1' or to == '-2' or to == '0':
                    continue
    
                reply = json.loads(reply_result)["text"]
                assert reply == "hello, i am jack", "消息接收有问题"  #  断言
                print("4. tom 成功收到 jack 的回复")
                break
    
            ws_tom.close()
            ws_jack.close()
            print("5. 关闭websocket 长连接")
    
    if __name__ == '__main__':
        # --timeout=10 pytest-timeout插件 针对可能长时间不能结束的测试用例,约束执行的时长。超过时长,没执行结束就是失败
        pytest.main(["-s","test_websocket.py::Test_Websocket::test_chat", "--timeout=10", "--html=report.html"])
    -------------------输出----------------------
    1. tom 向 jack 发送消息
    2. jack 成功收到 tom 发送的消息
    3. jack 发送回复给 tom
    4. tom 成功收到 jack 的回复
    5. 关闭websocket 长连接
    

    相关文章

      网友评论

          本文标题:python web接口测试--websocket接口测试

          本文链接:https://www.haomeiwen.com/subject/omcenltx.html