RPC接口测试技术-Tcp 协议的接口测试

简介: 首先明确 Tcp 的概念,针对 Tcp 协议进行接口测试,是指基于 Tcp 协议的上层协议比如 Http ,串口,网口, Socket 等。这些协议与 Http 测试方法类似(具体查看接口自动化测试章节),但在测试过程中需要做些调整。## SocketSocket 又称套接字,进程可通过套接字进行网络通信,使多个设备具有交互能力。Socket 适合对传输速度和安全性有严格要求的应用,比

首先明确 Tcp 的概念,针对 Tcp 协议进行接口测试,是指基于 Tcp 协议的上层协议比如 Http ,串口,网口, Socket 等。这些协议与 Http 测试方法类似(具体查看接口自动化测试章节),但在测试过程中需要做些调整。

Socket

Socket 又称套接字,进程可通过套接字进行网络通信,使多个设备具有交互能力。Socket 适合对传输速度和安全性有严格要求的应用,比如手机内核与外界进行测试数据的传输。支持 Socket 设备不止计算机,还会有移动端,如果测试 Socket 协议,需要有收发 Socket 数据的能力或代理 Socket 的能力。
下图展示了正常的 Socket 通信流程:

如果测试 Socket 协议,需要做以下改造,即利用 Socket 代理,进行 Socket 数据的接收:

需要特别注意,需要应用可更改 Socket 地址,才可使用代理。以 Python 的 Socket 为例,下面是一个简单的 Socket 客户端和服务端:

# 客户端
import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = '127.0.0.1'          # 获取本地主机名
port = 12345                # 设置端口号
s.connect((host, port))
print(s.recv(1024).decode())
s.close()
# 服务端

import socket               # 导入 socket 模块
s = socket.socket()         # 创建 socket 对象
host = '127.0.0.1'          # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c,addr = s.accept()     # 建立客户端连接
    print(addr)
    c.send('收到信息'.encode())
    c.close()                # 关闭连接

客户端可与服务端进行交流,但 Socket 地址不可更改,即上述客户端代码的 127.0.0.1 和 12345 端口不能通过配置文件进行更改。如果不能更改这两者,就堵死了通向代理的道路:

如何进行修改?以客户端代码为例,可通过配置文件来配置 host 和 port :

import socket
import yaml
# 通过配置文件,进行 host 和 port 配置
with open("config.yaml","r", encoding="utf-8") as f:
    data = yaml.safe_load(f)
host = data.get("host")
port = data.get("port")
s = socket.socket()
s.connect((host, port))
print(s.recv(1024).decode())
s.close()

config.yaml 的内容如下:

host: "127.0.0.1"
port: 12345

上述更改,可使应用走 Socket 代理。测试人员还需一款合适的代理工具,推荐 mitmproxy 或自写 Socket 代理。mitmproxy 使用请参考:
mitmproxy 官网:https://www.mitmproxy.org/

其他协议

其它协议,比如串口、网口、visa 等,与 Socket 的测试模式类似,用相同的图即可简述:

其它协议较 Sokcet 更冷门,无合适的代理工具。需要测试人员自己写代理,比如串口协议, Python 虽然支持 Pyserial 进行收发串口,但无代理。此时需要测试人员自行编写串口代理工具。这个过程需要开启两个监听服务,如下图,监听服务 A 监听端口 123 ,如果有数据进来,会透传(或做数据更改,实现 mock)给端口 456,监听服务 B 同理:

使用两个监听服务,可编写任意协议,但注意缺点,数据的传输时间会增加,如果过分注重性能,此方案慎用。下面是参考代码,其中只保留了关键逻辑:

def forward(self):
    """
    开启监听
    :return:
    """
    while True:
        # 从虚拟串口接收到请求
        virtual_req = self.virtual_ser.recv()
        if b'' == virtual_req:
            continue
        if self.is_call_back:
            # 返回空值,让 mock_server 决定返回内容
            real_result = b""
        else:
            # 等待真实设备出现
            if self.real_ser is None :
               # 代码省略

            # 将请求转发到真实串口
            real_result = self.real_ser.write_by_bytes(virtual_req)

        # 获取 mock 的结果,在此可以加入 mock 操作
        mock_result = self.mock_server.mock(virtual_req, real_result)
        # 将 mock 结果写入虚拟串口
        self.virtual_ser.send(mock_result)

再次强调,需要让应用支持端口修改,才能使用代理工具,这部分需要与开发交流,提修改需求。

相关文章
|
17天前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
25天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
69 3
|
25天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
74 2
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
2月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
151 3
|
2月前
|
XML JSON 网络协议
【TCP/IP】自定义应用层协议,常见端口号
【TCP/IP】自定义应用层协议,常见端口号
34 3
|
3月前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
515 2
|
4月前
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。