Tcp 协议的接口测试

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

Socket

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

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

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

  1. # 客户端

  2. import socket # 导入 socket 模块

  3. s = socket.socket() # 创建 socket 对象

  4. host = '127.0.0.1' # 获取本地主机名

  5. port = 12345 # 设置端口号

  6. s.connect((host, port))

  7. print(s.recv(1024).decode())

  8. s.close()

  9. # 服务端

  10. import socket # 导入 socket 模块

  11. s = socket.socket() # 创建 socket 对象

  12. host = '127.0.0.1' # 获取本地主机名

  13. port = 12345 # 设置端口

  14. s.bind((host, port)) # 绑定端口

  15. s.listen(5) # 等待客户端连接

  16. while True:

  17. c,addr = s.accept() # 建立客户端连接

  18. print(addr)

  19. c.send('收到信息'.encode())

  20. c.close() # 关闭连接

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

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

  1. import socket

  2. import yaml

  3. # 通过配置文件,进行 host 和 port 配置

  4. with open("config.yaml","r", encoding="utf-8") as f:

  5. data = yaml.safe_load(f)

  6. host = data.get("host")

  7. port = data.get("port")

  8. s = socket.socket()

  9. s.connect((host, port))

  10. print(s.recv(1024).decode())

  11. s.close()

config.yaml 的内容如下:

    1. host: "127.0.0.1"

    2. port: 12345

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

mitmproxy 官网:https://www.mitmproxy.org/ 2

其他协议

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

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

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

  1. def forward(self):

  2. """

  3. 开启监听

  4. :return:

  5. """

  6. while True:

  7. # 从虚拟串口接收到请求

  8. virtual_req = self.virtual_ser.recv()

  9. if b'' == virtual_req:

  10. continue

  11. if self.is_call_back:

  12. # 返回空值,让 mock_server 决定返回内容

  13. real_result = b""

  14. else:

  15. # 等待真实设备出现

  16. if self.real_ser is None :

  17. # 代码省略

  18. # 将请求转发到真实串口

  19. real_result = self.real_ser.write_by_bytes(virtual_req)

  20. # 获取 mock 的结果,在此可以加入 mock 操作

  21. mock_result = self.mock_server.mock(virtual_req, real_result)

  22. # 将 mock 结果写入虚拟串口

  23. self.virtual_ser.send(mock_result)

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

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据计算引擎中的Calcite

1.Calcite介绍 Calcite是一个动态数据库管理框架,具备数据库管理系统的功能 Calcite具备SQL解析、校验、优化、生成、连接查询等功能 Calcite能够为不同平台和数据源提供统一的查询引擎 2.Calcite能力 比如,对于HBase而言,没有SQL查询的能力…

Qt 6 开源版(免费) -- 安装图解

Qt6起,两项重大改变(并非指技术): 必须在线安装,不再提供单独的安装包主推收费的商业版 当然的,为了引流、培养市场,提供了一个免费的开源版本。 开源版相对于收费的商业版,主体是…

PostgreSQL 14 向量相似度搜索插件 (pgvector) 安装指南

本文是关于在 PostgreSQL 14 中安装并使用向量相似度搜索插件(pgvector)的详细指南。此插件允许用户在数据库中执行高效的向量运算,特别适用于机器学习模型的向量数据存储与检索场景。 环境需求 已安装PostgreSQL 14或更高版本。安装了Visual Studio 2022,用于编译插件。安装…

微信小程序+esp8266温湿度读取

本文主要使用微信小程序显示ESP8266读取的温湿度并通过微信小程序控制LED灯。小程序界面如下图所示 原理讲解 esp8266 通过mqtt发布消息,微信小程序通过mqtt 订阅消息,小程序订阅后,就可以实时收到esp8266 传输来的消息。 个人可免费注册五个微信小程序账号,在微信小程序官…

渗透之sql注入---实战1

本期的sql注入实战在:BUUCTF在线评测 (buuoj.cn) 该网站上进行。 启动靶机: 1.进来后搜索web1 2.点击【SWPU2019】Web1启动靶机。 3.进来之后在此界面进行注入。 开始注入: 1.找注入点: 我们输入1 后查看广告详情发现报错&a…

利用kimi等大模型进行运维参数解析和调优

在运维时,经常遇到很多参数,有些参数不知道意义,知道意义的也有些不知道合理参考值是多少。利用kimi等大模型来当老司机,轻松解决运维难题。 例如在运维hive参数时,有些不知道作用,提示次如下 你的角色是…

vue根据输入n动态生成n个表单

我的构想&#xff1a;在输入框中输入一个数字n&#xff0c;然后点击一个按钮&#xff0c;弹出一个弹窗&#xff0c;里面有n个表单。 这是按钮的vue代码&#xff1a;数值保存在form.number里面&#xff0c;每次数字改变会触发numberChange //...略 <el-form-item prop"…

POCEXP编写—多线程

POC&EXP编写—多线程 1. 前言2. 多进程&多线程2.1. 多进程2.1.1. 案例 2.2. 多线程2.2.1. 案例&#xff1a; 2.3. POC的案例&#xff08;模板&#xff09; 3. UA头设置3.1. 随机UA头3.1.1. 案例3.1.2. 模板拼接 4. 代理Proxy4.1. 单代理案例4.2. 多代理案例4.2.1. 请求…

【2024最叼教程】Appium自动化环境搭建保姆级教程

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU

本篇说清楚任务的问题 在鸿蒙内核线程(thread)就是任务(task)&#xff0c;也可以叫作业.线程是对外的说法&#xff0c;对内就叫任务.跟王二毛一样&#xff0c; 在公司叫你王董&#xff0c;回到家里还有领导&#xff0c;就叫二毛啊.这多亲切.在鸿蒙内核是大量的task&#xff0c…

【Linux系列】 离线安装vnc 可视化桌面

离线安装vnc 可视化桌面 缘下载安装vnc初始化链接 缘 项目需要下载 下载地址&#xff1a; http://mirror.centos.org/centos/7/updates/x86_64/Packages/tigervnc-license-1.8.0-31.el7_9.noarch.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/libXfont2-2.0.…

Word插件开发

VSTO是Visual Studio Tools for Office的简称&#xff0c;它是Microsoft Visual Studio的一个扩展&#xff0c;用于开发基于Microsoft Office平台的应用程序。VSTO提供了一套API和工具&#xff0c;使开发人员能够利用Visual Studio IDE来开发定制的Office解决方案。 在 Visual…

DiffusionGAN ——最快的小波扩散模型应用研究

介绍 扩散模型最近出现并迅速发展&#xff0c;吸引了许多研究人员的兴趣。这些模型能从随机的噪声输入生成高质量的图像。在图像生成任务中&#xff0c;它们的表现尤其优于最先进的生成模型&#xff08;GANs&#xff09;。扩散模型可以灵活地处理各种条件输入&#xff0c;从而…

knife4j swagger 使用笔记

1.接口访问的端口跟后台设置的不一致&#xff0c;接口请求无反应 处理办法 2.响应参数不显示问题 &#xff08;1&#xff09;返回的参数里面一定要有响应的参数对象&#xff0c;如下&#xff1a; &#xff08;2&#xff09;TableDataInfo 定义成泛型类 TableDataInfo package…

移动应用安全

移动应用安全 移动应用安全主要关注Android、iOS、Windows Phone等平台上移动应用软件安全状态。它涉及应用程序在其设计运行的平台上下文中的安全问题、它们使用的框架以及预期的用户集。所有主流的移动平台都提供大量可选的安全控制&#xff0c;旨在帮助软件开发人员构建安全…

浅析扩散模型与图像生成【应用篇】(十八)——ControlNet

18. Adding Conditional Control to Text-to-Image Diffusion Models 现有的文生图模型如Stable Diffusion通常需要人工输入非常准确的提示词&#xff0c;而且生成的结果还是完全随机不可控制的&#xff0c;只能通过生成多个结果&#xff0c;再从中选取最佳方案。而ControlNet的…

竞争分析:波特五力模型

波特五力模型是分析企业竞争环境的一个分析模型。 根据波特的观点&#xff0c;每家企业都受到“直接竞争对手、顾客、供应商、潜在新进公司和替代性产品”这五个“竞争作用力”的影响。 我们用波特五力模型试着分析下实体书店竞争是否激励。 直接竞争对手&#xff1a;如果直接…

料堆体积测量新方案:激光雷达

激光雷达测量料堆体积是一种高效且精确的方法。激光雷达的工作原理与雷达相似&#xff0c;通过发射激光束探测目标的位置、速度等特征量。在测量料堆体积时&#xff0c;激光雷达系统向料堆发射激光束&#xff0c;然后接收从料堆表面反射回来的信号。通过对这些反射信号的处理和…

Linux网络之DNS域名解析

一、DNS概述 1.1什么是DNS 域名解析协议&#xff0c;将域名转换成IP地址 1.2为什么要用DNS IP地址不便于记忆&#xff0c;DNS使用户可以通过易记的域名快速访问各种网络资源。 192.168.0.0—— ip地址过长而且都是数字&#xff0c;不方便记忆就出现了域名 www.baidu.com—…

记一次线上日志堆栈不打印问题排查(附:高并发系统日志打印方案可收藏)

目录 一.线上的日志堆栈不打印了二.一步一步仔细排查三.最后搞定四.聊一聊线上日志到底应该怎么打印4.1 日志打印的诉求4.2 常见的系统日志上报方案4.2.1 ELK 方案4.2.2 自定义log appender 完成应用日志采集. 4.3 日志常见框架傻傻分不清4.4 日志在高并发系统中需要注意的 tip…