自动化测试的技术路线

news2024/11/15 8:37:30

本文中我谈一下自动化测试的技术路线,同时也是测试团队的发展路线。

团队路线1.工程化路线

如果你们公司只有你一个测试,那工程化的路线是必然的选择。另外,我个人比较推崇工程化而非平台化。

下图介绍了工程化路线下写出来的自动化测试:

工程化的测试脚本用法是,我们给他一个命令:我要运行xxx测试,它就去自动执行相关测试,然后给出报告。它的特点就是把测试脚本看做一个软件项目来做,因此测试人员都需要掌握一种编程语言,以及这套脚本里会用到的各种库。

工程化的测试脚本是用这些东西实现的:

某种测试执行器:比如 Junit,pytest,robotframework 等等,来负责执行测试。(关于测试执行器可以看我之前介绍测试执行器的文章: 初识测试执行器)

某种测试驱动库:比如测网页,需要 selenium 来驱动浏览器,测app可能用appium 来驱动移动设备或模拟器,测接口就用 requests 来调用接口。

某种方式来管理测试数据:最开始可能是写在csv文件里,也可能写在 excel 里或者写在数据库里,同样需要对应的库来管理这些数据。

某种方式来管理业务逻辑:这块是我们自己写的东西,比如测试脚本怎样管理,业务逻辑怎样重用。举个例子,在selenium web 测试里会很流行用 page object 模式来管理测试逻辑和页面控件。而其他测试里,大家也会自己设计自己的“模式”来做。

然后工程化的测试脚本还会用到一些常见工具:

最常用的工具是:

版本控制系统: git 和 github 等,用来管理测试脚本,因为测试脚本工程化了,可能有很多分支和版本,测试脚本也会和待测软件的版本相对应。

持续集成系统:jenkins 等,用来定时跑测试脚本或者在开发提交代码的时候触发测试脚本。


简单来说,把这套工程化脚本在本地调通之后放到 git 上,接着用 jenkins 来执行这些脚本,这样整个流程就走通了,这也就是工程化路线下的测试脚本的雏形了。这么一套东西,称其为“测试框架”。但这也不是终点,后续还可以引入更多工具,以及对一些工具做二次开发,或更改其源码,或为其开发插件等等。


我比较喜欢把这条路线称为集体飞升路线,怎么说呢,在用工程化的测试脚本的团队里,招人都必须招能写代码的,但是新人需要写的代码又不会太难。同时在测试框架内还有很多别人实现的东西你可以参考。这条路线的难点就是你需要一个高手在最开始搭建一个可以扩展和优化的基础框架,并持续优化这个框架。后续加入进来的各种萌新就可以很快掌握那些用到的技术。最大的优点是整个团队的技术都得到提升


我之前诺基亚公司用的框架更是好多年前别人写的,一直有专人优化下来,度过了整个3G时代,现在到做5G了,还能用。我现在团队在用的框架我一年前写的,今天我仍然在优化其数据管理的模块,这些优化是持续性的,而非一劳永逸。这种模式的最大缺点是领导可能觉得框架写完是一次性的,你写完了赶紧干别的去,但不优化,一套框架和脚本慢慢就会废掉,变得不适用、用起来麻烦、变成没人愿意碰的东西。

团队路线2.平台化路线

理解了工程化路线,再来看平台化路线,这种路线早期起始与大QA时代。

如果你们公司有很多测试人员,并且测试部门比较有钱,那么就可能选择平台化路线。

下图介绍了平台化路线下写出来的自动化测试:

 

 

测试平台的用法是,在网页上做很多事情。写测试,管理测试,调度和执行测试,可能都是在页面上做的。它的特点是把测试脚本分成平台部分和脚本部分。对,脚本部分我上图里没画,因为他不是代码形式的脚本了。因此就出现了两种测试人员:测试平台开发人员测试脚本编写人员

测试脚本编写人员并不需要掌握一种编程语言,而只需要掌握业务逻辑,然后使用平台来编写测试。这极大限制了测试脚本编写人员的技术发展路线,因此我并不喜欢这种测试平台。

测试平台开发人员可能需要掌握一般网站开发技能,包括前端和后台,但是很少有像普通软件开发项目一样分工为前端开发和后台开发的测试平台开发人员,这是因为测试平台通常只是玩具级项目,也就是内部用用,没什么流量的xx 管理系统。很多平台可能只是一两个人搞几天搞出来的,好不好用他们不管,做出来就是为了刷KPI升职的。这并不是说测试平台开发人员都是全栈,只是因为领导并不愿意在内部项目里投入更大资源。于是就希望招一些二线开发人员来低成本地做一个能用的平台出来。

测试平台是用这些东西实现的:

自制的测试执行器:与工程化不同,测试平台往往会选择自己做一个执行器。比如诺基亚的某使用了很多年的老测试平台,测试用例你得在网页上打勾勾选,选好了点一个执行按钮它才能执行这些测试。虽然我们都知道勾选很麻烦,但毕竟看起来酷?同样我之前诺基亚公司,后面另一个部门做的新平台选择了让用户输入一个 robotframework 启动命令的方式来执行测试,这就是第三种路线(平台框架混合路线)的雏形了,暂且不提。

某种测试驱动库:这个和工程化里面是完全一样的。

某种方式来管理测试数据:因为采用了web网站形式,所以数据十有八九在数据库里了。数据库的优点是数据都保存下来了,缺点是:慢。读也慢,改也麻烦。

某种方式来管理业务逻辑:这个和工程化里面也是完全一样的。

前端页面和后台:这个看你用比较老的架构还是新的架构,老式的架构要求你至少掌握bootstrap和基础的javascript才能做,还有一些前端模板技术,比如python系里的jinja2,java系里的Struts。前面也提过了,测试平台通常就一两个人搞几天搞出来的,所以这几个人可能很有热情,很想用新技术,于是,有些原来是做前端出身的作者会搞成单页应用形式,用到一些诸如三大前端框架(argular,vue,react)之类的东西,也可能后台也用nodejs做。而有些做java出身的作者则会用 springboot 做。python出身的作者可能用django,flask甚至webpy,bottle做。上次去面试遇到一个面试官说他要先用springboot做,后期再改成golang。我之前诺基亚还有一个平台因为作者想玩一下非关系型数据库所以用了mongodb。还有一个平台的作者设想了使用zookeeper、docker等自动实时创建jenkins master。。。其他后台技术也可能会用到很多很多,总之有什么技术就可能用什么技术。

看到这里,测试平台大概怎么回事,应该也知道了吧。相当于把工程化测试脚本里的所有内容包括jenkins和git都封在了一个平台里。做平台和用平台的往往不是同一批人,我喜欢称其为“割裂路线”。

回想起以前在诺基亚和平台组的无数次撕逼,以及质量本身差的要死的测试平台,我真心不喜欢这种路线。但是,这种路线有其优点,那就是: 看上去高大上,容易刷KPI,忽悠不懂技术的领导。但是,其缺点也是很严重,不好用、割裂的团队。不写代码的测试脚本编写者固然技术路线被锁死,做测试平台开发人员的人,技术路线也不怎么好走,长期做玩具项目也是没什么前途。

前端懂一点,后台懂一点,这个语言懂一点,那个框架懂一点,有什么用?有专精的点吗?懂一百个技术的皮毛未必比得过精通一两项技术。如果要走web开发相关的技术路线,在这种内部项目上是走不下去的。你的测试平台好到足够产品化变成一个对外的项目吗?


总结

无论是平台路线也好,工程路线也好,在上述基础上,都可以做更多的优化改善,或者找到一些有技术含量的点。下面是一些我之前公司有人做的点:

1.引入热点技术比如 AI, 实现人工智能测试结果分析等。

2.引入数据分析和数据可视化技术,利用测试执行结果及日志分析产品质量数据产生各种图表。

3.扩展、改写第三方库或开源工具。

4.优化测试的执行,引入分布式、并行、协程等技术从各种角度来提高测试运行速度。

5.优化框架或平台使用者的体验。

6.对平台或者框架用的jenkins做高可用性支持,比如各种备份等。

7.测试结果、测试日志等的收集,形成持久化的日志服务器,便于前面提过的做分析或做挖掘。

8.上云,上容器,上管道,把 devops 的东西搞进去。(这一点也是我之前公司十多年前的平台和现在新写的平台的区别)

最后给大家的建议是:

不要做单纯使用框架或平台的人,尽量参与其建设,特别是不要做单纯使用平台的人。

写框架或写平台的人也不要太沉迷于一样又一样的新技术,我个人相信精通一点才能在技术路线上走得更远。


最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[oeasy]python0075_删除变量_del_delete_variable

删除变量 回忆上次内容 上次我们研究了字节序 字节序有两种 符号英文名称中文名称<little-endian小字节序>big-endian大字节序 字节序 用来 明确 整型数字存储的 顺序 如果 读写数字出了错 可以 考虑一下 是否 字节序出了问题 变量现在可以 声明初始化存储了 但是 …

Animator Animator Controller Avatar relationship

Animator 组件用于将动画分配给场景中的游戏对象。Animator 需要对Animator Controller 的引用&#xff0c;该控制器定义要使用的动画剪辑&#xff0c;并控制何时以及如何在它们之间混合和过渡。 如果 GameObject 是具有 Avatar 定义的人形角色&#xff0c;则 Avatar 也应在此组…

【数据结构】--189.轮转数组

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Python GUI 案例 (tkinter module)

Python GUI 设计案例 基于matplotlib的 y-x 简单绘图 import tkinter as tk from tkinter import filedialog import matplotlib.pyplot as plt import numpy as npdef select_x_file():x_file_path filedialog.askopenfilename(title"x")x_file_entry.delete(0, t…

Pytorch学习笔记 | 数据类型 | mnist数据集

数据类型 python中数据类型和pytorch中的对应关系 注意:pytorch是没有没有string类型的 例1:创建一个3行4列的随机数数组,符合均值为0,方差为1的正态分布 import torch a=torch.Tensor(3,4) a Out[17]: tensor([[0.

iperf3跑满100G网卡实测记录

环境准备 拓扑 两台服务器 100G网卡对插直连。 ubuntu20.04, 系统设置默认状态 MTU 1500 网卡 Mellonax ConnectX5 100G rootvnet:~# lspci | grep Mellanox 98:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] 98:00.1 Ethernet control…

【高级数据结构】树状数组

目录 树状数组1 &#xff08;单点修改&#xff0c;区间查询&#xff09; 树状数组1 &#xff08;单点修改&#xff0c;区间查询&#xff09; 洛谷&#xff1a;树状数组1https://www.luogu.com.cn/problem/P3374 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行…

汇报的目标和技巧【研发版】

汇报的组织意义 要做好汇报&#xff0c;需要先理解汇报的意义&#xff0c;这是根源上的指导。直接地说&#xff0c;满足上级的需求就是汇报的价值&#xff0c;而上级需求来自企业运作的需要&#xff0c;这也是各级管理者职责的组成部分。 各级管理者的职责&#xff08;倒序引用…

API声明文件Swagger Injection攻击

Swagger 在API化的世界里&#xff0c;相信无论是前端还是后端开发&#xff0c;都或多或少地被接口维护折磨过。随着API迭代&#xff0c;老旧API文档和SDK需要更新&#xff0c;这是一个耗散研发精力的事情。为解决此类问题&#xff0c;以API为软件能力最终交付物的生态不断演进…

实训笔记7.27

实训笔记7.27 7.27笔记一、Hive数据仓库基本概念&#xff08;处理结构化数据&#xff09;1.1 Hive的组成架构1.1.1 Hive的客户端1.1.2 Hive的驱动程序1.1.3 Hive的元数据库 1.2 Hive和数据库的区别 二、Hive的安装配置三、Hive的相关配置项四、Hive的基本使用方式4.1 使用Hive的…

FS32K144官方提供串口Bootloader对接Matlab串口烧写程序

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Bootloader升级工具&#xff1a;可用TTL、232、485&#xff08;硬件收发模式&#xff09;,其中的一种&#x…

DP学习第四篇之不同路径II

DP学习第四篇之不同路径|| 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾&#xff0c;。。。 dp[i][j]: 走到[i, j]位置时&#xff0c;一共多少种路径 状态转移方程 tips: 用之前或…

【业务功能篇55】Springboot+easyPOI 导入导出

Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 代码实现复杂&#xff0c;学习成本较高。 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出…

Golang单元测试详解:单元测试的基本使用方法

Golang 单元测试 Golang 中的单元测试是使用标准库 testing 来实现的&#xff0c;编写一个单元测试是很容易的&#xff1a; 创建测试文件&#xff1a;在 Go 项目的源代码目录下创建一个新的文件(和被测代码文件在同一个包)&#xff0c;以 _test.go 为后缀名。例如&#xff0c…

性能优化 - 前端性能监控和性能指标计算方式

性能优化 - 前端性能监控和性能指标计算方式 前言一. 性能指标介绍1.1 单一指标介绍1.2 指标计算① Redirect(重定向耗时)② AppCache(应用程序缓存的DNS解析)③ DNS(DNS解析耗时)④ TCP(TCP连接耗时)⑤ TTFB(请求响应耗时)⑥ Trans(内容传输耗时)⑦ DOM(DOM解析耗时) 1.3 FP(f…

项目接入星火认知大模型!!!

项目接入星火认知大模型demo 导言 随着国内的语言大模型不断兴起&#xff0c;科大讯飞的星火大模型&#xff0c;阿里的通义千问&#xff0c;百度的文心一言等。 这些大模型给我提供了很好的便利 同时星火大模型提供了 开放api功能 使得我们能够将大模型接入到我们自己的项目当…

又一“邪恶版”ChatGPT出现,专为网络犯罪而生

最近&#xff0c;Hackread 分享了一个恶意聊天机器人 WormGPT 的详细信息&#xff0c;该聊天机器人是为帮助网络犯罪分子进行非法活动而创建的。现在&#xff0c;暗网上又出现了一个名为 FraudGPT 的聊天机器人。这是一个基于订阅的人工智能聊天机器人&#xff0c;可以为网络犯…

【AI可视化---04】点亮数据之旅:发现Matplotlib的奇幻绘图世界!用Python挥洒数据音符的创意乐章——这四篇就够了!

晴川历历汉阳树,芳草萋萋鹦鹉洲。 日暮乡关何处是,烟波江上使人愁。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工…

2023Java 岗面试,进互联网大厂必备 Java 面试八股文真题解析

前言 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 很多时候&#xff0c;面试官问的问题会和自己准备的“题库”中的问题不太一样&#xff0c;即使做了复盘&#xff0c;下次面试还是不知道该从何处下手。 为此鄙人软磨硬泡才把阿里 P8 专门归纳…

合并两个有序链表——力扣21

题目描述 法一 递归 class Solution { public:ListNode* mergeTwoLists(ListNode *l1, ListNode*l2){if(l1 nullptr){return l2;} else if (l2nullptr){return l1;} else if (l1->val<l2->val){l1->next mergeTwoLists(l1->next, l2);return l1;} else {l2-&g…