深圳网站建设 营销,wordpress logo怎么换,零陵网站建设,外贸是什么意思【摘要】 首先明确 Tcp 的概念#xff0c;针对 Tcp 协议进行接口测试#xff0c;是指基于 Tcp 协议的上层协议比如 Http #xff0c;串口#xff0c;网口#xff0c; Socket 等。这些协议与 Http 测试方法类似#xff08;具体查看接口自动化测试章节#xff09;#xf…【摘要】 首先明确 Tcp 的概念针对 Tcp 协议进行接口测试是指基于 Tcp 协议的上层协议比如 Http 串口网口 Socket 等。这些协议与 Http 测试方法类似具体查看接口自动化测试章节但在测试过程中需要做些调整。SocketSocket 又称套接字进程可通过套接字进行网络通信使多个设备具有交互能力。Socket 适合对传输速度和安全性有严格要求的应用比如手机内核与...
首先明确 Tcp 的概念针对 Tcp 协议进行接口测试是指基于 Tcp 协议的上层协议比如 Http 串口网口 Socket 等。这些协议与 Http 测试方法类似具体查看接口自动化测试章节但在测试过程中需要做些调整。
Socket
Socket 又称套接字进程可通过套接字进行网络通信使多个设备具有交互能力。Socket 适合对传输速度和安全性有严格要求的应用比如手机内核与外界进行测试数据的传输。支持 Socket 设备不止计算机还会有移动端如果测试 Socket 协议需要有收发 Socket 数据的能力或代理 Socket 的能力。 下图展示了正常的 Socket 通信流程 1080×234 18.6 KB 如果测试 Socket 协议需要做以下改造即利用 Socket 代理进行 Socket 数据的接收 1080×201 22 KB 需要特别注意需要应用可更改 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 端口不能通过配置文件进行更改。如果不能更改这两者就堵死了通向代理的道路 1080×218 25 KB 如何进行修改以客户端代码为例可通过配置文件来配置 host 和 port
import socket
import yaml
# 通过配置文件进行 host 和 port 配置
with open(config.yaml,r, encodingutf-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/ 1
其他协议
其它协议比如串口、网口、visa 等与 Socket 的测试模式类似用相同的图即可简述 1080×199 22.5 KB 其它协议较 Sokcet 更冷门无合适的代理工具。需要测试人员自己写代理比如串口协议 Python 虽然支持 Pyserial 进行收发串口但无代理。此时需要测试人员自行编写串口代理工具。这个过程需要开启两个监听服务如下图监听服务 A 监听端口 123 如果有数据进来会透传或做数据更改实现 mock给端口 456监听服务 B 同理 1080×628 47.6 KB 使用两个监听服务可编写任意协议但注意缺点数据的传输时间会增加如果过分注重性能此方案慎用。下面是参考代码其中只保留了关键逻辑
def forward(self):开启监听:return:while True:# 从虚拟串口接收到请求virtual_req self.virtual_ser.recv()if b virtual_req:continueif self.is_call_back:# 返回空值让 mock_server 决定返回内容real_result belse:# 等待真实设备出现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)
再次强调需要让应用支持端口修改才能使用代理工具这部分需要与开发交流提修改需求。