Python侧开28期-偕行-学习笔记-非http/https协议接口测试

一、dubbo协议接口测试-TODO

1、 为什么使用 dubbo

  • 简介:dubbo是阿里基于java的开源框架,是为了适应阿里的服务治理而设计的一套框架,该框架的主要目的是SOA(服务治理);

2、dobbo应用场景

image

3、dubbo架构

4、 dubbo 支持协议

  • dubbo3 triple
  • dubbo2 协议
  • rest 协议
  • http 协议
  • hessian 协议
  • redis 协议
  • thrift 协议
  • gRPC 协议
  • memcached 协议
  • rmi 协议
  • webservice 协议

二、thrift协议接口测试-TODO

三、pb协议接口测试-TODO

四、socket协议接口测试

1、简介

  • 在计算机网络中,Socket(套接字)是一种通信机制。
  • Socket是对TCP/IP协议的封装。
  • HTTP协议是应用层协议,更标准,方便。
  • Socket协议更底层、更通用。

2、应用场景

  • 直接应用:特定的物联网应用中,需要与底层硬件或其他系统进行直接的、定制化的通信。
  • 间接应用:大部分的协议都是基于 Socket 协议进行抽象优化,比如HTTP协议。

3、socket接口测试

  • 演示环境:

  • 实现思路。

    • 1.创建Socket实例对象。
      1. 创建连接。
      1. 发送消息。
      1. 接受消息。
      1. 关闭连接。
      1. 返回响应,完成断言。
  • 提示:socket发送和返回的都是二进制数据

socketreques.py

import socket

class SocketRequest:
    def send_socket(self,send_data: str):
        # *1.创建Socket实例对象。。AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # *2.创建连接。
        s.connect(("socket.hogwarts.ceshiren.com", 30001))
        # 将发送数据转换成二进制
        byte_data = send_data.encode('utf8')
        # *3.发送消息。--socket发送和返回的都是二进制数据
        s.send(byte_data)
        # *4. 接受消息。--参数为一次最多接收的字节数,如果一次接收不完,使用while循环反复接收
        result = s.recv(2048)
        # 5. 关闭连接。
        s.close()
        # 接收的数据为二进制数据,返回的时候转码为str
        return result.decode('utf8')

test_socket.py

from testsocket.socketrequest import SocketRequest

class TestSocket:
    def setup_method(self):
        # 创建请求对象
        self.socket_req = SocketRequest()

    def test_socket_01(self):
        result = self.socket_req.send_socket("你好,Hogwarts!")
        # 6、返回响应,完成断言。--socket发送和返回的都是同一个数据
        assert result == "你好,Hogwarts!"

五、websocket协议接口测试

1、什么是websocket

  • WebSocket是一种通信协议,它允许在Web浏览器和服务器之间建立持久的、双向的通信连接。相比传统的HTTP请求-响应模式,WebSocket可以实现实时交互和即时更新,非常适合需要实时数据传输的应用。

  • WebSocket的工作原理如下:

      1. 客户端发起WebSocket连接请求,请求中包含特殊的协议头。–请求握手
      1. 服务器收到请求后,如果支持WebSocket协议,则返回一个特殊的响应头,表示连接已建立。–同意握手,建立连接
      1. 连接建立后,客户端和服务器之间可以通过这个持久连接进行双向通信。
      1. 客户端和服务器可以通过发送消息进行通信,消息可以是文本、二进制数据或其他形式
      1. 服务器可以主动向客户端发送消息,也可以在接收到客户端的消息后进行响应。
  • WebSocket的特点包括:

    • 实时性:WebSocket连接可以在客户端和服务器之间实时地传输数据,避免了HTTP请求-响应的延迟。
    • 双向通信:WebSocket允许客户端和服务器之间进行双向的通信,可以同时发送和接收数据。
    • 较少的数据传输量:WebSocket协议使用更少的数据传输量,因为连接的建立和维护只需要少量的数据交换。
    • 更好的性能:由于WebSocket连接是持久的,不需要频繁地建立和关闭连接,可以减少服务器的负载。
    • 协议标识符是 ws(如果加密,则为 wss),服务器网址就是 URL
  • 总结起来,WebSocket是一种能够实现实时、双向通信的协议,它在Web应用中提供了更好的性能和用户体验。

2、websocket协议-Charles抓包

  • 步骤
    • 1、浏览器添加代理配置,代理ip和端口是Charles设置的ip和端口;
    • 2、访问网站抓取ws协议的接口并查看websocket数据包;

抓包演练地址websocket在线测试 (websocket-test.com)

1、设置浏览器代理

2、访问网站进行抓包

3、websocket接口测试–websocket-client库

  • 步骤:
    • 1、安装第三方库:pip install websocket-client
    • 2、创建连接;
    • 3、发送信息;
    • 4、获取响应值;
    • 5、关闭连接;
    • 6、断言响应信息;

test_websockey.py

from websocket import create_connection

class WebsocketProtocol:
    @classmethod
    def send_websocket(self,url,content: str):
        # 创建连接
        ws = create_connection(url)
        # 获取服务器返回的消息
        result = ws.recv()
        print(f"获取服务器返回的消息:{result}")
        # 客户端发送消息
        ws.send(content)
        # 获取服务器返回的消息
        result_send = ws.recv()
        # 关闭连接
        ws.close()

        # 返回客户端接收的消息
        return result_send

if __name__ == '__main__':
    url = "ws://tech01.ceba.ceshiren.com:10000/websocket"
    content = "你好,Hogwarts!"
    result = WebsocketProtocol.send_websocket(url,content)
    print(f"result={result}")