为什么需要自动化测试?自动化有哪些优势?

前言

自动化测试,最近些年可谓是大火。招聘上的要求也好,培训班的广告也罢,比比皆是,足以说明它在业内的火爆程度。

虽然说会写自动化测试并不能说明你就很牛批,但是你不会的话,那么很抱歉,你的上升通道就会变得窄了。

一、为什么需要自动化测试

自动化的优势:

1.自动化可以代替手工大量地重复的工作,测试可以把大量的时间放在用例设计和新功能上边

2.自动化可以大量提升回归测试效率,特别适合敏捷开发

3.自动化可以大量地利用无人值守的时间去执行用例,特别适合非工作是爱你执行测试,工作时间分析测试用例失败的工作模式

4.自动化可以实现某种测试无法完成或者付出巨大的代价的测试类型,比如关键业务的测试7*24持续运行系统的稳定性和高并发场景的压力测试;

5.自动化可以保证每次执行的操作和验证的一致性和可重复性,避免认为的遗漏和疏忽;

 自动化的劣势和坑:

1.自动化不能代替手工,他只能代替手工测试中执行频率高,机械化重复的步骤,千万不要奢望所有的测试都要自动化,否则会得不偿失;

2.自动比起手工测试脆弱,无法对测试系统的变化做出识别,业界流传:开发者手一抖,自动化测试忙一宿,这也从侧面反应了,自动化测试一直居高不下的事实,原因自动化不具备智能识别,只能按部就班按的测试,没有任何的处理能力;

3.自动化测试的开发工作量远远大于单次的手工测试,所以只有开发完成的手工测试大于5次,才能收回自动化测试的成本;

4.手工测试发现的bug通常会比自动化发现的错误多,且自动化只能发现回归测试的缺陷;

5.测试效率很大程度上依赖自动化用例设计以及实现质量,不稳定的自动化比没有自动化更糟糕;

什么样的项目适合自动化: 

1.需求稳定不会频繁变更

2.研发和维护周期长,需要频繁地回归测试;

3.需要多个平台重复运行相同的测试场景;

4.某些测试项目无法通过手工测试实现,或者手工的成本高;

5.测试软件开发较为规范,能够保证系统的稳定可测试性;

6.测试具备编码能力

二、自动化的类型

大家通常会去选择做自动化的类型一般有2种:一种是UI自动化、一种是接口自动化

那UI自动化中,又可以有web系统的自动化、APP的自动化等等。

笔者本人曾经开发维护过一套web自动化的服务,说实话,投入回报率不高,所以后来也就逐步放弃了。

回想起来,这也算是领导没弄清目的就盲目开展的典型案例了,不过这段开发经历对我来说还是很宝贵的。

到后来重点就转移到了接口自动化了,为什么呢?

首先声明,这里讲的接口是指协议接口了,比如http协议的接口,并不是程序接口,比如java里的interface。

那么接口层相比于UI层,最大的优点是更接近底层逻辑,可以让测试更早的介入。于是更早的发现bug,修复的成本也就越低了。

另外,接口测试也可以更容易发现UI测试中不容易发现的问题。

比如说,一个接口没有对非法传参进行处理,虽然UI在输入框进行了一些不合规的类型输入校验,但是只要抓个包修改下参数请求过来,就会立即暴露出问题。

三、搭建一个接口自动化框架需要的技能

编程语言:既然做了这行,编程是跑不掉的。java、python 哪个熟悉用哪个吧,我个人偏向于脚本用python。

单元测试框架:不同语言有不同的测试框架,python有unittest、pytest等,java有testng、junit等。我个人偏向python的pytest。

搜索解决问题:其实有了前面2个点是基石,剩下的就是你遇到什么问题或者需求,知道如何去搜索解决实现的能力了。比如能找到合适的

第三方库,来增加自己的框架,拿pytest来说,可以用requests库来发送请求,用jmespath库来提取复杂的接口响应,以及用allure框架来

输出一个漂亮的报告等。

搞清楚了这些,基本上就可以开始做起来了。

一开始不用过度的考虑自己的框架的终极形态是什么样子的,因为我觉得没有最好的框架,只有最适合的框架。在你实现的过程中,会遇到不同的问题,

然后你不断迭代优化你的框架去解决这些问题,于是乎框架会一点点的变成大家心中的样子

四、自动化测试优劣的隐性指标

1 、自动化的维护成本

针对同一个业务,不同的自动化测试实现方案,对应的维护成本可能天壤之别。诚然,自动化的维护成本,受业务成熟度、迭代速度、项目规范程度影响,但不妨考虑以下情况下,你的维护成本如何:

新增了一些逻辑(如,接口/服务/应用),对新增部分维护自动化,你需要多长时间;

删除了一些逻辑(如,接口/服务/应用),对删除部分维护自动化,你需要多长时间;

修改了一些逻辑(如,接口/服务/应用),对修改部分维护自动化,你需要多长时间;

在项目迭代速度加快时,并伴有增删改逻辑时,你的自动化脚本还能跟得上吗?其实,这是不少团队都会面临的严峻考验。 一个正处于快速发展的业务,每次业务测试、回归时,可能都会想放弃自动化测试,转而来手工执行测试。因为,自动化测试还要不断调试自动化代码,大概率来不及这次的测试,还不如直接手动测试的效率高

2、自动化运行成本

这里的自动化运行成本是说,从想执行自动化到执行结束需要符合的能力&时间成本。一般的自动化运行过程大致如下:

1)创造一些自动化执行条件。比如,找运行数据,设置运行环境等等,这一步如果没有被自动化掉,需要花费人力&时间;

例如,实现的自动化只能"一条腿走路",即只实现了半自动化,并没有实现100%的自动化,运行前/中/后可能需要人为参与。

2)执行自动化。这里主要是自动化运行所需时间,时间越长,导致的等待时间越长。可能你会说,自动化执行的时候,你可以去干别的事情啊,没必要一直等待执行结束。但既然执行了自动化,肯定想像手工测试一样,"马上"看到执行结果,得到及时反馈,才能避免在不同工作间来回切换。

3)验证自动化结果。一般结果的验证都包含在上一个步骤里面了,但不排除有些验证仍然需要人工来check的情况。这种情况,其实也属于半自动化的一种实现形式。

4)自动化失败问题排查。各种各样的原因,都会导致自动化运行失败了,比如,数据问题、环境问题、自动化维护不及时、第三方问题等等。自动化失败后,能否比较清晰地给出失败原因,甚至能根据自动化失败结果,直接定位到失败原因,这些做到位了,会让你对自动化爱不释手。

总结

自动化的前景完全不必担忧,且不说人类社会发展的大方向就是自动化,难道我们如今不是把很多很多的工作都交给了各种工具么?

市场有没有前景是一回事,自己能否把握住,是另一回事。测试自动化是一定是未来的方向。

在以往的过程中,我无数次的问自己这些问题,思考了很多以前回避的、懒得去想的问题,也对自己、对未来有了更清楚的认识。这何尝不是一种成长呢?

 

总结:

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

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

力扣每日一题-拆炸弹-2024.5.5

力扣题目:拆炸弹 题目链接: 1652.拆炸弹 题目描述 代码思路 根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理,而k不等于0时,需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口,然后移动,获…

【Mac】 DSync for mac(文件比较同步工具) v2.7安装教程

软件介绍 DSync是一款文件比较同步工具,通过简便的三步即可完成繁琐的比较、同步操作,您甚至可以通过跳过、删除或反转您选择的文件的复制方向来微调您的同步。这是在Mac上同步文件的最简单方法。 安装教程 1.打开安装包,将「DSync」拖到右…

YUM源仓库部署和NFS共享存储服务

一.YUM源仓库部署 1.YUM 概述 (1)是基于RPM软件包构建的软件更新机制 (2)可以自动解决依赖关系 (3)所有软件包有集中的YUM软件仓库提供 2.准备YUM源 (1)软件仓库的提供方式&…

个人直播/流媒体服务解决方案实践

目录 1. 说明 1.1 拓扑结构图 2. 准备工作 2.1 软硬件清单 3. 步骤 3.1 按上面的软硬件清单准备好材料 3.2 内网检查测试 3.3 透传到公网服务器 3.5 机顶盒配置 4. 总结 5. 参考 6. 后语 1. 说明 - 在本地局域网建立流媒体服务,并发布到公网服务器供终…

【Unity 组件思想-预制体】

【Unity 组件思想-预制体】 预制体(Prefab)是Unity中一种特殊的组件 特点和用途: 重用性: 预制体允许开发者创建可重复使用的自定义游戏对象。这意味着你可以创建一个预制体,然后在场景中多次实例化它,…

轻松上手的LangChain学习说明书

一、Langchain是什么? 如今各类AI模型层出不穷,百花齐放,大佬们开发的速度永远遥遥领先于学习者的学习速度。。为了解放生产力,不让应用层开发人员受限于各语言模型的生产部署中…LangChain横空出世界。 Langchain可以说是现阶段…

快速了解Oracle 数据库 23ai

Oracle Database 23ai 于2024年5月2日正式发布。快速了解可以看官网主页和官方博客。 官网主页 23ai的3个要点,核心都是数据: 数据的人工智能 主要指数据库内置机器学习和AI向量搜索。这实际是Oracle融合数据库策略的延续,避免了复杂的数据…

SparkStructuredStreaming状态编程

spark官网关于spark有状态编程介绍比较少,本文是一篇个人理解关于spark状态编程。 官网关于状态编程代码例子: spark/examples/src/main/scala/org/apache/spark/examples/sql/streaming/StructuredComplexSessionization.scala at v3.5.0 apache/spark (github…

电商企业案例:金蝶云星空对接易仓

案例背景 某跨境电商公司,作为行业的新锐力量,业务覆盖全球数十个国家,产品线丰富多样。随着业务量的激增,原有的信息孤岛问题日益凸显,导致订单处理延迟、库存管理混乱、物流效率低下。尤其是发货单、销售退件单等跨…

代码随想录训练营31day-动态规划4

一、完全背包(参考博客) 和01背包区别在于物品可以无限次放入背包。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 因此在需要在遍历顺序上进行区别,参考代码随想录: 二、518.零钱兑换II 题目求的是组…

尊享面试100(272.最接近的二叉树搜索值|| python)

刚开始想着用最小堆,把每个元素都加进去,然后找出最小的k个值,复杂度应该是(nklogn) import heapq as pq class Solution:def __init__(self):self.h []pq.heapify(self.h)def closestKValues(self, root: Optional[TreeNode], …

[极客大挑战 2019]PHP

1.通过目录扫描找到它的备份文件,这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。 我们提交的select参数会被进行反序列化,我们要构造符合输出flag条件的序列化数据。 但是,这里要注意的就是我们提…

Go 语言(四)【常用包使用】

1、命令行参数包 flag flag 包就是一个用来解析命令行参数的工具。 1.1、os.Args import ("fmt""os" )func main() {if len(os.Args) > 0 {for index, arg : range os.Args {fmt.Printf("args[%d]%v\n", index, arg)}} } 运行结果&#…

Pytorch基础:内置类type的用法

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 在python中,一切数据类型都是对象(即类的实例),包括整数、浮点数、字符串、列表、元组、集合、字典、复数、布尔、函数、…

ChatGPT的真实能力如何?七大NLP任务一探究竟!

文章链接:https://arxiv.org/pdf/2405.00704 ChatGPT已经改变了人工智能社区,一个活跃的研究方向是ChatGPT的性能评估。评估的一个关键挑战是ChatGPT仍然是闭源的,传统的基准数据集可能已被ChatGPT用作训练数据。在本文中: 调查了最近的研究…

MySQL-基础篇

MySQL基础篇 MySQL概述 MySQL安装与启动 配置MySQL环境变量 MySQL数据库 SQL DDL 数据库操作 表操作 表操作-修改 注意:在删除表时,表中的全部数据也会被删除。 datagrip DML DQL DQL-基本查询 在实际开发过程中,尽量不要写se…

利用matplotlib和networkx绘制有向图[显示边的权重]

使用Python中的matplotlib和networkx库来绘制一个有向图,并显示边的权重标签。 1. 定义了节点和边:节点是一个包含5个节点的列表,边是一个包含各个边以及它们的权重的列表。 2. 创建了一个有向图对象 G。 3. 向图中添加节点和边。 4. 设置了…

vue3中标签的ref属性

组合API-ref属性 在vue2.x中,可以通过给元素添加refxxx属性,然后在代码中通过this.$refs.xxx获取到对应的元素 然而在vue3中时没有$refs这个东西的,因此vue3中通过ref属性获取元素就不能按照vue2的方式来获取。 目标:掌握使用re…

ModuleNotFoundError: No module named ‘pkg_resources‘ 问题如何解决?

ModuleNotFoundError: No module named pkg_resources 通常是因为 Python 环境中缺少 setuptools 模块。pkg_resources 是 setuptools 包的一部分,用于处理 Python 包的发行和资源。 为解决这个问题,请按照以下步骤操作: 确保 setuptools 已…

压缩png图片大小怎么操作?试试这招一键压缩图片体积

png图片是一种无损压缩格式,体积也会比其他格式的图片要大。但是,我们在使用的过程中遇到需要给png图片压缩体积的情况时要怎么办呢?很简单,只需要使用png压缩大小(https://www.yasuotu.com/png)网站-压缩图…