一、dubbo协议接口测试-TODO
1、 为什么使用 dubbo
- 简介:dubbo是阿里基于java的开源框架,是为了适应阿里的服务治理而设计的一套框架,该框架的主要目的是SOA(服务治理);
 
2、dobbo应用场景

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接口测试
- 
演示环境:
- Host:socket.hogwarts.ceshiren.com。
 - Port:30001。
 
 - 
实现思路。
- 1.创建Socket实例对象。
 - 
- 创建连接。
 
 - 
- 发送消息。
 
 - 
- 接受消息。
 
 - 
- 关闭连接。
 
 - 
- 返回响应,完成断言。
 
 
 - 
提示: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的工作原理如下:
- 
- 客户端发起WebSocket连接请求,请求中包含特殊的协议头。–请求握手。
 
 - 
- 服务器收到请求后,如果支持WebSocket协议,则返回一个特殊的响应头,表示连接已建立。–同意握手,建立连接。
 
 - 
- 连接建立后,客户端和服务器之间可以通过这个持久连接进行双向通信。
 
 - 
- 客户端和服务器可以通过发送消息进行通信,消息可以是文本、二进制数据或其他形式。
 
 - 
- 服务器可以主动向客户端发送消息,也可以在接收到客户端的消息后进行响应。
 
 
 - 
 - 
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、断言响应信息;
 
 - 1、安装第三方库:
 
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}")
        



