如何设计一个自动化测试平台

之前写过很多自动化测试相关的文章,后台有同学留言:希望写一篇自动化测试平台的文章。他的原话是这样:目前市场上开源或者商业的自动化测试平台很多,但试用下来总感觉有些地方不太融洽,想自己落地一个适合自己团队和项目的自动化测试平台。

这种想法在我看来很正常,商业平台要考虑普适性,会大而全,也会存在客制化的诉求;而开源平台更多的是作者结合自己的经验做出来的,个人风格较为强烈。且每个团队的技术建设、项目迭代、流程规范以及人员各有区别,很难有完全适配的自动化测试平台。

这篇文章,我会以自己的实践经验结合业内部分优秀平台的设计理念,聊聊我对于设计自动化测试平台的一些想法。

平台解决了什么问题

去年曾写过一篇文章专门聊过测试平台的作用和价值。以此为例,先聊聊自动化测试平台的作用和价值。

一般在企业内,技术团队如果规模比较小,很少会专门投入资源去做平台化的事情,特别是测试团队,无论是成本预算还是技术能力,先天技术能力不足,后天可投入的资源缺乏。而平台的特点在于:通过平台将操作流程标准化,抹平不同个体间的认知和技术差异,减少重复造轮子带来的的资源浪费以及排查和解决问题的成本,进一步提高人效比

大白话来说,就是人太多了,理解能力和技术差异太大,没那么多时间和资源浪费在不断造轮子和来回对比扯皮上,直接平台化,标准化,通过权限管理来标注操作的边界,保证大家按照同一个方向和目标甚至度量标准去做事情

技术本身的实践、迭代和演进是一个过程,从软件工程的角度来说,测试平台就是“只做刚刚好的设计”、“先做MVP方案然后不断迭代小步快跑”这些很好的软件工程实践理念某个阶段的产物。当然,言必称平台,动则撸代码的方式,也有企业发展和个人职场生存之间的博弈成分在内。

测试平台的功能架构

回到本文的正题,要设计一个自动化测试平台,最基本也是最核心的功能有如下几点:

  • 文件管理:脚本、数据的上传/下载、格式校验等功能;

  • 任务管理:测试任务创建、更新、删除、批次管理

  • 任务调度:测试任务执行,定时/触发等灵活的调度策略;

  • 报表统计:主要包括场景、用例、任务、报告、状态等维度的数据汇总;

  • 监控日志:包含测试任务的执行状态、时间、异常以及告警通知等功能;

  • 节点管理:执行器(node节点)的调度、配置、状态、插件、验签等功能;

  • 系统设置:用户权限、项目权限、插件管理等;

  • mock功能:隔离上下游依赖,确保任务执行的可靠性,避免外部影响;

当然,上述的功能模块是相对比较通用的,在团队内部落地时,可以根据自身具体情况进行扩展。综合上述的功能模块,自动化测试平台的功能架构,可以用下面一张图来概括(仅做示意和参考):

测试平台的技术架构

聊完了功能架构,接下来聊聊技术架构。

在我看来功能架构的设计和功能模块的划分其实是很抽象的一件事,相比于技术架构,功能架构其实更为重要。好比于一个产品的好坏其实更多的取决于如何设计,而不是用了java还是PHP。

自动化测试平台的技术架构,大致可用下图来概括(仅做示意和参考):

技术架构大致的调用关系和组件作用如下:

  • 通过UI界面进行编辑和下发任务执行消息,一般采用http协议通信;

  • 执行引擎支持多协议和规则格式等校验,将任务信息推送给node集群;

  • 从gitlab中获取对应的自动化脚本,并推送到具体的node节点来执行任务;

  • 从 S3 或其他文件管理组件中获取对应测试数据文件,并推送到node节点;

  • 通过任务调度组件比如 xxjob 来进行具体的任务分配执行,以及状态管理;

  • 任务执行过程产生的日志存储于es中,通过集成elk组件来做日志管理和展示;

  • 任务执行完成后产生的报告数据,以及项目/场景/用例/配置等冷数据存储于mysql;

  • node内置listener,负责将任务状态和资源耗用等数据通过kafka推送到工作台展示;

上图所展示的技术架构和相关组件,仅做参考。

在实际的技术选型过程中,还是需要根据团队自身的技术栈以及需求灵活选择合适的方案。相比于自动化测试平台,我们常说的自动化测试框架,就显得很简单了。只需要编程语言+测试框架+持续集成工具+测试报告工具,就能完成基本的自动化测试工作。

平台并不是万能的,平台相比于最基本的自动化测试框架,也并没有什么优越性。根据团队的需求,技术能力以及资源预算选择合适的解决方案,才是最优解。

自动化测试的重点并不是平台,也不是选择什么高大上的框架。重点是,先让测试任务本身run起来,能快速验证和反馈结果,才是最重要的。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

紧跟生成式AI暴雨发布新时代推理服务器

近日,暴雨发布最新训推一体AI服务器,以大容量内存和灵活的高速互连选项满足各种AI应用场景,最大可能支持扩展插槽,从而大幅提升智能算力性能,以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AIG…

物联网实战--平台篇之(三)账户后台数据库

目录 一、账户后台设计 二、账户数据库 三、数据库操作——增 四、数据库操作——改 五、数据库操作——查 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240…

Netty的第一个简单Demo实现

说明 Netty 的一个练习,使用 Netty 连通 服务端 和 客户端,进行基本的通信。 需求 Client 连接服务端后,给服务端发送消息HelloServer Server 客户端连接成功后,打印连接成功读取到客户端的消息后,打印到控制台&…

企业是保留传统的MES还是换新的MES?

在选择上MES系统的时候,企业可以根据自身所处行业不同、当前阶段不同,以及业务需求的差异,对症下药,选择适合自己的解决方案。对于有些企业本来就有MES系统,但是已经过时过旧,就要考虑换新的MES系统了. 保留…

高精度数学计算的瑞士军刀,mpmath库详解与应用示例

写在前言 hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。 做为一个一只脚已经踏进35岁大关的程序员,对于职场,几乎向上无望,已经没有太多的期待…

DJANGO_PART 1

DJANGO_PART 1 文章目录 DJANGO_PART 11. 安装DJANGO2. 创建项目3. APP概念4. 快速上手5. templates6. 引入其它静态文件7. 模板语法8. 请求与响应 1. 安装DJANGO 安装语句:pip install django 2. 创建项目 django中项目会有一些默认的文件和默认的文件夹 终端创建…

渗透之sql注入实战2(二次注入)

目录 平台地址: 开始: 方法1: 方法二 找提示 这里存在一个文件包含(file)。 爆源码 index.php源码 confirm.php源码: search.php源码: change.php源码: delete.php源码&…

Linux---HTTP协议

HTTP HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,主要用于在Web浏览器和Web服务器之间传输数据。 一、认识URL 平时我们俗称的 " 网址 " 其实就是说的 URL http请求样例 看起来是一行一…

英语学习笔记7——Are you a teacher?

Are you a teacher? 你是教师吗? 词汇 Vocabulary name /neɪm/ n. 名字,名声 英文名字构成: 名 字 姓      given name family name  也叫做:first name last name      例:Yanyan Gao 例句&#xff1…

Baidu Comate智能编码助手-程序员的神助攻

🎉Baidu Comate:程序员编程最牛的辅助利器,没有之一 🎈AI编程助力开发者提质增效 智能代码补全:AI编程助手可以根据上下文和用户的编码习惯,智能地提供代码补全和建议,帮助程序员更快速地编写代码&#xf…

Service 和 Ingress

文章目录 Service 和 IngressServiceEndpointservice 的定义代理集群外部服务反向代理外部域名Service 常用类型 IngressIngress-nginx安装使用 Service 和 Ingress service 和 ingress 是kubernetes 中用来转发网络请求的两个服务,两个服务用处不同,se…

OpenGL 入门(四)—— 贴纸与美颜滤镜

本篇我们来介绍贴纸效果与美颜滤镜的实现。 1、贴纸效果 贴纸实际上是一个图片,用 Bitmap 加载图片后用 OpenGL 渲染到指定的位置上。我们举例添加一个耳朵贴纸: 1.1 获取人脸位置 上一篇我们在讲大眼滤镜时,在 Native 层除了获取到人脸 5…

JAVA学习笔记(第三周)

文章目录 继承概述使用场景继承的特点子类继承的内容成员变量访问特点成员方法访问特点方法的重写构造方法this super 多态多态的表现形式多态的前提成员变量和方法调用instanceof优势弊端 包包名的规则全类名final常量 权限修饰符代码块 继承 概述 继承就是子类继承父类的特征…

PHP ASCII码的字符串用mb_convert_encoding 转utf-8之后不生效

检测数据类型是ascii,转码之后再检测还是utf-8没生效 private function toUTF8($str){$encode mb_detect_encoding($str, array("ASCII",UTF-8,"GB2312","GBK",BIG5,LATIN1));if ($encode ! UTF-8) {$str1 mb_convert_encoding($str, UTF-8, …

(2024,LSTM,Transformer,指数门控,归一化器状态,多头内存混合)xLSTM:扩展的 LSTM

xLSTM: Extended Long Short-Term Memory 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. 扩展的 LSTM 2.1 LSTM 回顾 2.2 sLSTM 2.3 mLSTM 2.4 xLSTM 架构 2…

python:画饼图

我现在因工作需要在写一篇中文文章,领导要我用python处理数据和画图,那我也刚好学习一下python画图。 import matplotlib.pyplot as plt # 饼图数据 labels [A, B, C, D] sizes [15, 30, 45, 10] # 每个部分的大小 # 绘制饼图 plt.figure(figsize(6,…

读书笔记——《高质量C++/C编程指南》(2)

目录 前言 命名规则 共性规则 简单的Windows应用程序命名规则 表达式和基本语句 运算符优先级 复合表达式 if语句 布尔变量与零值比较 整型变量与零值比较 浮点变量与零值比较 指针变量与零值比较 对if 语句的补充说明 循环语句的效率 for 语句的循环控制变量 s…

数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面

项目目录的管理 前言 在上几篇的文章里面我们完成了基本环境的搭建,整理了项目数据库表结构并且成功的手动的加载了Qt的mysql数据库驱动,现在就要开始完成项目准备工作的最后一步:构建项目目录,一个好的项目离不开一个好的代码组织结构,所以在开始动手写我们这个项…

Java | Leetcode Java题解之第70题爬楼梯

题目: 题解: public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

无人机+通信中继:短波电台技术详解

随着无线通信技术的不断发展,无人机作为一种新型的信息传输平台,已经在多个领域得到了广泛应用。其中,无人机与短波电台的结合,为通信中继领域带来了全新的可能性。本文将详细解析无人机在通信中继中的应用,以及短波电…