如何让自动化测试框架更自动化?
一、引言
对于大厂的同学来说,接口自动化是个老生常谈的话题了,毕竟每年的MTSC大会议题都已经能佐证了,不是大数据测试,就是AI测试等等(越来越高大上了)。不可否认这些专项的方向是质量智能化发展的方向,但是凡事都遵循2/8定律,80%的从事软件测试的同学或许对这些并不感冒,因为大部分测试同学分布于中小厂,而他们大多停留在如何更好更快地进行接口自动化的阶段。
小厂质量团队地位低,在团队中发言分量轻,项目中往往处于劣势,项目的测试时间不能保证,更别提搞什么高大上的质量专项了,能把接口自动化测试做好就是大事一件,节省不少时间了。
因此,聊聊接口自动化还是非常有必要的。
二、“JMeter式”的自动化设计思路
毫无疑问,聊起接口自动化,大家可能第一时间联想的就是自动化工具、自动化框架,例如JMeter、Postman等。这些工具学习成本小,掌握这些工具用法算是一条腿迈进了自动化测试大门。当然我建议大多数测试菜鸟先从工具的使用学起,话说“读书百遍,其义自见”,用多了你也就理解了工具本身的设计(模式)精髓,为将来自己动手设计工具打好基础。
我也曾设计过接口测试工具(参考文章),但是现在回过头再看看开发出来的东西,或多或少有些JMeter的影子!是的比葫芦画瓢,JMeter已经在你脑海里先入为主了,你开发的接口测试工具有它的影子也不足为怪。换句话说,这或许是JMeter式的重复造轮子。
以我之前设计的测试工具为例,使用它就要动手搜集接口信息,动手组装入参,动手写断言。。这TM就是和使用JMeter写用例要做的事情一样的嘛!
JMeter式的自动化测试,我认为是“高级”的手工测试。自研的测试框架写用例往往需要代码基础,但是写过的都知道,业务用例代码重复度挺高的。而更重的在于用例的维护,毕竟大家写的代码风格迥异,维护的难度更大,甚至不如JMeter的用例维护来的方便。
意识到这个问题后,我也尝试在github上搜索stars比较多的开源自动化工具,遗憾的是这些框架始终摆脱不了这个“设计套路”。例如
当然,说上面这些并非不建议大家开发接口自动化测试框架,自研的接口测试框架同样有很多优点。
测试工具开发的测试用例往往不易于维护,试想一下当你维护JMeter生成的各种JMX文件场景。
大量的测试用例可重用性差,例如登陆模块,每个接口调用前都要获取cookie,而登陆则是前置模块,使用JMeter开发用例需要每个JMX文件都要包含登陆,重复度太高。
无法满足自动化平台诉求,短期内确实可以快速实现自动化,但是这些工具对于平台非自动化能力的拓展成本较高,毕竟改动开源工具的成本比自研高很多。
使用开源工具不利于提升团队在自动化技术方面的成长。自动化能力的提升离不开编程能力的提升,使用开源工具能提升工具学习使用能力,最终你的成长无外乎又掌握了一个测试工具的使用。
那么,如何摆脱JMeter式的传统思路,用更多的自动化代替手工??
三、让自动化框架更自动化
接口自动化的核心是什么?接口、数据、断言。
正如上文说的,这也是我们手工重复度比较高的工作内容,也是痛点所在。
传统的自动化用例设计,往往需要人工采集接口信息(例如抓包,然后写脚本提取接口信息HTTP Type、Method、Request等),人工造入参数据等,这些重复度是极高的。更进一步来说,人工造入参数据更是痛中之痛,毕竟不同的业务需要构造的request内容是不同的。
那么如何自动化实现呢?
不妨大家先考虑我们是在哪里获取的这些信息。例如接口信息,你是否有过通过开发者工具提取接口信息?是否有过解析Charles工具har文件提取接口信息?以及解析swagger等接口文档工具。。。。然后通过提取的接口信息生成自动化框架所需的接口请求service。
但是,接口信息就在那里,为什么还要将其从一种载体中提取出来再转化为另一种类型的接口信息。难道直接使用类似har文件、swagger的接口信息就不行吗?当然是可以的。例如美团的Lego测试平台。
可以直接解析其他接口测试工具文件里的接口信息,以下拉列表的方式供测试使用者选择要写用例的接口,当然该接口request、Method等信息要同步填充到对应的输入框。这样就省去手工输入接口信息的时间。
刚刚说了,构造入参数据是痛中之痛?这部分如何自动化?
我的答案,入参数据从线上服务器日志里去取。试问,我们构造的数据难道有线上业务真实跑出来的数据更贴合我们要测试的业务吗?当然没有。
so,线上服务器的日志格式务必要规范化,这样可以方便我们提取xx接口的请求数据。有条件的公司可能会有自己的分布式链路追踪,这样可以基于trace提取出某个接口的请求和响应的所有信息。
断言怎么自动化?
其实这个的解法和第2个问题一样,我们在从日志中提取接口信息的同时,肯定也是有xx request参数下的xx response相应信息,我们可以将此次的响应信息作为基准,下次相同的request再次请求的时候,得到的响应和基准响应做比较就行了。当然,这个其实也是流量回放的思路。
四、总结
本文是我对此前设计的一个测试框架的反思,当时设计框架的“上下文”(即团队基建能力、以及自身的设计水平和负责的项目的业务架构等背景)和现如今所在的公司质量基建是有很大差别的(有时候很多想法的实现是需要一定基建能力支撑的)。在一定程度上,也算是站的更高,看的更远吧。
最后:【可能给你带来帮助的教程】

如果这篇文章对你有帮助,请给小编点个赞!👍这样我才有动力继续更新下去!
今天的小知识学会了么
欢迎在留言区跟我们互动噢~
觉得有所帮助的话点个赞呗
最后是小编自己整理的一些学习资料、测试工具、课件、笔记相关资料点击下方小卡片
相关文章:
如何让自动化测试框架更自动化?
一、引言 对于大厂的同学来说,接口自动化是个老生常谈的话题了,毕竟每年的MTSC大会议题都已经能佐证了,不是大数据测试,就是AI测试等等(越来越高大上了)。不可否认这些专项的方向是质量智能化发展的方向&…...
无屏幕实现连接树莓派
无屏幕实现连接树莓派 欢迎来到我的博客!今天我将与大家分享如何无需使用屏幕,实现与树莓派的连接。对于那些在树莓派项目中不方便使用屏幕的人来说,这将是一个有用的技巧。 材料清单 在开始之前,让我们先准备好所需的材料&…...
【Android】AMS(一)系统启动流程
前言 AMS(Activity Manager Service)即活动管理器服务,是Android系统中的一个核心服务。它主要负责管理应用程序的生命周期,包括启动应用程序、切换应用程序、管理任务栈等。 Android启动流程 Android程序的启动流程可以概括为…...
FineBI6.0基础学习第一课 数据门户
PC端门户使用示例 首先,以管理员身份登录FineBI系统,安装数据门户,安装步骤见官网 新建一个数据门户...
如何部署项目到Tomcat + 第一个Servlet程序
博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 目录 文章目录 一、Tomcat 1.1 Tomcat是什么 1.2 下载安装 1.3 部署项目 二、第一个Servlet程序 2.1 Servlet是什么 2.2 创建Maven项目 2.3 引入依赖 2.4 创建目录 2.5 编写类方法 2.6 打包…...
牛客刷题(HTML-Day1)
第一题: 1.下列代码在页面中显示的内容为( ) <!DOCTYPE html> <html> <body> <p>hello<q>html</q></p> </body> </html> A hello“html” B hello html C hello“”html D 其他几…...
性能测试如何入门?熬夜7天整理出这一份3000字超全学习指南
赶鸭子上架要我搞性能测试,怎么办? 我第一次真正意义上搞性能测试是在2014年。项目组要求搞性能测试,我之前也没搞过,对服务端也不熟悉。就那么一脸懵逼地开始搞性能。当时我连linux上有哪些能看系统资源的命令都不知道。稀里糊涂…...
信息安全实践1.2(重放攻击)
前言 这个实验是看一本书做的,就是李华峰老师的书——《Metasploit Web 渗透测试实战》,我之前写过一篇Slowloris DoS攻击的博客,也是看这本书写的,总的来说,有用处。这篇博客其实也只是很浅显的去做一下重放攻击。 要…...
上海亚商投顾:沪指高开高走 地产股迎来久违反弹
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日高开高走,沪指午后涨近1%,深成指、创业板指涨超1.2%,上证50盘中大…...
Vim学习笔记【Ch02】
Vim学习笔记 系列笔记链接Ch02 Buffers, Windows, TabsBuffers什么是buffer查看所有bufferbuffer之间的切换删除buffer退出所有窗口 Windows窗口的创建窗口切换快捷键其他快捷键 Tabs什么是tabtab相关命令 window和buffer结合的3D移动小结 系列笔记链接 Ch00,Ch01 …...
《低代码指南》——低代码维格云能源行业解决方案
目录 典型场景介绍: 一、能源资产管理 二、碳核查 三、配电运营 总 结: 从业界实际情况来看,流程建设本身是一个对业务现实进行抽象的过程,这个过程即使不考虑软件开发的门槛,对于很多客户而言也是个涉及较长周期的复杂工作,往往需要咨询专家或专业公司帮助其建设内…...
【自制C++深度学习推理框架】Layer的设计思路
Layer的设计思路 Layer的抽象 如果将深度学习中的所有层分为两类, 那么肯定是"带权重"的层和"不带权重"的层。 基于层的共性,我们定义了一个Layer的基类,提供了一些基本接口,并可以通过继承和多态机制实现不同类型的L…...
Rust每日一练(Leetday0011) 下一排列、有效括号、搜索旋转数组
目录 31. 下一个排列 Next Permutation 🌟🌟 32. 最长有效括号 Longest Valid Parentheses 🌟🌟🌟 33. 搜索旋转排序数组 Search-in-rotated-sorted-array 🌟🌟 🌟 每日一练刷…...
STL --- 五. 函数对象 Function Objects
目录 1、函数对象的定义和作用 2、函数对象的分类和使用 3、std 常用的函数对象 4、函数对象的适配器 5、std 算法和函数对象区别 1、函数对象的定义和作用 STL(Standard Template Library)中的函数对象(Functor)是一种重载…...
Java IO 流操作详解
Java IO 流操作详解 一、简介1. 什么是IO流2. IO流的分类3. IO流的作用 二、Java IO流的输入操作1. 文件输入流2. 字节输入流3. 缓冲输入流4. 对象输入流 三、Java IO流的输出操作1. 文件输出流2. 字节输出流3. 缓冲输出流4. 对象输出流 四、Java IO流的常用方法解析1. 字节读写…...
Halcon 形状匹配参数详解
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score) find_shape_model(Image : : //搜索图像 ModelID, //模板句柄 AngleStart, // 搜索时的起始角度 AngleExte…...
C++11强类型枚举
C11引入了强类型枚举(enum class),也称为枚举类。 强类型枚举是一种更加类型安全的枚举类型,相对于传统的枚举类型,强类型枚举可以提供更好的安全性和可读性。 强类型枚举的格式如下: enum class 枚举名 …...
pytorch讲解(部分)
友爱的目录 自动求导机制从后向中排除子图自动求导如何编码历史信息Variable上的In-place操作In-place正确性检查 CUDA语义最佳实践使用固定的内存缓冲区使用 nn.DataParallel 替代 multiprocessing 扩展PyTorch扩展 torch.autograd扩展 torch.nn 多进程最佳实践共享CUDA张量最…...
C++ 基本的7种数据类型和4种类型转换(C++复习向p3)
文章目录 基本内置类型存储范围typedef 声明新名字enum 枚举类型类型转换 基本内置类型 boolcharintfloatdoublevoidwchar_t ⇒ short int 存储范围 可以这样 sizeof(int) 来确认 int 占用字节数 char,1字节,-128~127 或 0~255 wchar_t,2…...
Scrum敏捷迭代规划和执行
Sprint Backlog看板 迭代工作的开展是围绕Sprint Backlog展开的,在Leangoo中,我们需要为每个迭代创建一个Sprint Backlog看板。Sprint Backlog(迭代)看板,用于管理当前Sprint的需求和开发任务,可视化展示每…...
ROS Noetic下用Python脚本在Gazebo里动态生成障碍物(附完整代码和常见报错解决)
ROS Noetic下Python脚本动态生成Gazebo障碍物的工程实践 在机器人仿真测试中,动态生成环境障碍物是验证导航算法鲁棒性的关键手段。传统手动拖拽方式效率低下且难以复现特定测试场景,而通过编程控制Gazebo仿真环境则能实现测试流程的自动化与标准化。本文…...
从代码到部署:手把手复现CenterPoint(PyTorch版)在KITTI数据集上的完整流程
从零实现CenterPoint:KITTI数据集3D目标检测全流程实战指南 为什么选择CenterPoint进行3D目标检测? 在自动驾驶和机器人感知领域,3D目标检测一直是核心技术难题。传统基于锚框(Anchor-based)的方法在处理旋转物体时表现…...
大麦智能抢票系统:告别手速极限的终极解决方案
大麦智能抢票系统:告别手速极限的终极解决方案 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票而烦恼吗&…...
如何高效使用小米手表表盘制作工具:Mi-Create完整操作指南
如何高效使用小米手表表盘制作工具:Mi-Create完整操作指南 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 想为你的小米手表或手环设计个性化表盘吗…...
RK3568交叉编译环境搭建:ARM官方GCC 8.3与Linaro版本到底怎么选?我的踩坑与选择心得
RK3568交叉编译环境搭建:ARM官方GCC 8.3与Linaro版本深度对比与实战选择指南 在嵌入式开发领域,交叉编译环境的搭建往往是项目启动的第一道门槛。对于RK3568这样的高性能ARM处理器,选择合适的交叉编译器不仅关系到开发效率,更直接…...
nRF52与RFX2401C的PA+LNA优化方案:基于SoftDevice的高效驱动实现
1. 为什么需要PA和LNA优化方案 如果你正在用nRF52开发BLE设备,可能会遇到这样的困扰:明明参数配置没问题,但通信距离就是达不到预期。这时候就该请出我们今天的主角——RFX2401C这颗PA/LNA芯片了。我去年做智能牧场项⽬时就踩过这个坑&#…...
MATLAB与AI结合:使用Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行科学计算与数据分析
MATLAB与AI结合:使用Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行科学计算与数据分析 1. 科研与工程中的智能计算新范式 想象一下这样的场景:你正在处理一组复杂的实验数据,需要快速实现滤波、拟合和可视化。传统方式可能需要…...
为什么Python社区推荐用pipx替代pip?以virtualenv安装为例演示工作流
为什么Python开发者应该用pipx替代pip?以virtualenv为例的完整隔离方案 当你在Ubuntu终端输入pip install virtualenv时,那个刺眼的externally-managed-environment错误提示就像一堵墙——这不是技术故障,而是Python生态进化的重要路标。传统…...
IDEA插件开发:集成Nunchaku-flux-1-dev实现代码注释自动图解
IDEA插件开发:集成Nunchaku-flux-1-dev实现代码注释自动图解 1. 引言 作为一名Java开发者,你是否曾经面对过这样的困境:接手一个复杂的遗留系统,代码量庞大但注释稀少,逻辑关系错综复杂,光是理解代码执行…...
5个维度深度评估:哪款内容解锁工具真正值得投入时间?
5个维度深度评估:哪款内容解锁工具真正值得投入时间? 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代,付费墙已成为内容获取的主要障…...
