全程软件自动化测试

news/2024/5/19 2:06:39/文章来源:https://blog.csdn.net/wx17343624830/article/details/128130924

软件自动化测试的概念

“什么是软件自动化测试?”也许很多人的回答是:“使用自动化测试工具或者编写自动化脚本来自动化测试软件”,还有一些权威网站,比如 WikiPedia 是这样定义的:

“在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行一些重复但必要的测试工作,也可以完成手动测试几乎不可能完成的测试。对持续交付和持续集成的开发方式而言,测试自动化是至关重要的。”

这些回答都没有错,都说到了基本的关键点上。但是自动化测试不仅是编写自动化测试代码和使用自动化测试工具这么简单,就像软件开发本身也不仅仅是编写代码这么简单。

我将自动化测试分为狭义的自动化测试和广义的自动化测试。狭义的自动化测试主要指通过编写自动化测试代码和使用自动化测试工具,将测试用例自动起来去测试被测系统。而广义的自动化测试则是将其看作一个独立的软件项目,要完成它则需要经历整个软件开发生命周期(SDLC)的各个阶段,如分析、架构、开发、测试和上线等。就算只使用自动化测试工具,不需要写代码来进行测试,也是会包含这些阶段的。只不过有时候,一些小项目中有些阶段很短,工作量也很少,就算做了,也不会有强烈的感知。但是在很多大项目中,大部分阶段感知比较强烈。所有软件自动化测试就好比一只麻雀,虽小却五脏俱全。

要进行广义的自动化测试,首先需要对项目进行,包括业务需求、技术架构、研发计划、管理流程和质量需求等。通过这些分析 ,可以有效地制定自动化测试策略和计划,从而获得合理的 ROI,这样才能保证自动化测试有效地实施,并获得期望的结果。

然后根据自动化测试策略和计划,设计自动化测试的架构,并完成相应的调研和预演工作。在设计体系结构时,可能仅仅选择一个成熟的自动测试工具,如 Selenium IDE, PostMan, JMeter 等;可能选择一个需要二次开发的自动化测试框架和测试驱动,如 Cucumber, JUnit, Mocha, Gatling, SeleniumWebDriver, RestAssured, Cypress 等;可能已经存在的自动测试工具或框架都不适合自己的项目,因此重新开发适合自己项目的自动化测试工具或框架。重新造轮子的情况虽然不是很普遍,但是总有人和项目会遇到一些新的问题,并且通过当前已有的工具和框架不容易解决,而需要开发新的自动化测试工具或者框架。因此出现了数量众多的自动化测试工具和框架,所以如果不全新开发,则需要在如此多的工具和框架中选择适合的,这是设计和架构阶段很重要且相对比较困难的工作。因为要了解并熟悉尽可能多的工具和框架,才能尽可能地选择最适合的。

当策略、设计和架构都已经确定并完成之后,则需要进行开发和测试。主要内容是通过使用自动化测试工具实现测试用例自动化,或者是通过编写代码实现测试用例自动化。并在开发过程中完成对于自动化测试本身的测试,类似于开发人员编写完代码之后的自测。由于成本等原因,一般不会有另外的人员来对自动化测试进行二次测试,所以自动化测试开发人员需要充分自我保证自动化测试的正确性和有效性。如果其存在问题,而自测的时候又没有发现,则很难再次被发现,并造成自动化测试失效,最终就无法发现被测系统的 bug。为了解决这个问题,业界出现了变异测试(Mutation Test),用以检测自动化测试的有效性,从而可以缓解这个问题。

开发和测试完成之后,就需要上线并运维了。上线就是将自动化测试部署到测试环境中,运行自动化测试对被测系统进行测试;而运维则是需要对运行中的自动化测试进行监控,对自动化测试的结果和日志进行分析等,特别是针对大规模的自动化测试。

不管是狭义的自动化测试,还是广义的自动化测试,其核心是以软件测试为需求的软件开发,所以要做好自动化测试,需要以软件开发的视角来对待,只有这样才能做好自动化测试,特别是大规模的自动化测试。

软件自动化测试的意义

随着软件系统的规模越来越大,涉及的领域越来越多,软件测试也越来越困难和复杂,而人工测试的问题也越来越明显。自动化测试可以改善或者解决人工测试的这些问题,所以软件自动化测试的意义主要包括:

  • 极大地减少回归人工测试的成本
  • 极大地提高测试的执行效率
  • 可以避免测试人员由于各种不确定的情况所导致测试疏漏,误判等错误
  • 可以完成一些人工无法或者很难完成的测试,比如性能测试,模糊测试等
  • 作为测试驱动开发(TDD)和 DevOps 等的关键实践,帮助团队更高效地开发出高质量的软件

虽然自动化测试有这么多好处,但是仍有不少局限,比如需要相应的开发和维护成本,需要对测试结果和日志进行分析的成本,以及相应的测试环境成本等。但是这些成本的大小,依赖于自动化测试的规模和被测系统的复杂度等。

自动化测试的意义和优点

自动化测试(尤其是单元测试的自动化),是 极限编程 和 敏捷软件开发的一个关键特征,这也被称为测试驱动开发 (TDD)。单元测试的用例可以在代码编写完成之前就设计好,并作为功能的一种定义形式存在。随着新的代码不断完成编写,单元测试随之进行,缺陷被不断找出,因而代码也不断得到改进。由于开发人员能够及时发现缺陷然后立即作出改变,修复的代价大大减小,这种不断发展的开发方式被认为比瀑布模型这类开发结束再测试的方式更为可靠。

使用 单元测试 框架(如 JUnit、NUnit 等“xUnit”类型测试框架)执行自动化测试是目前软件开发行业的大趋势。单元测试框架的应用使得各部分代码开发完成后立即进行相关单元测试来验证它们是否如预期在运行成为可能。

手工完成一些软件测试的工作(例如大量的低级接口的回归测试)十分艰苦耗时,而且寻找某些种类的缺陷时效率并不高,因而测试自动化,提供一种完成这类工作的有效方法。

一旦自动化测试方法开发完成,日后的测试工作将可以高效循环完成。很多时候这是针对软件产品进行长期回归测试的高效方法。毕竟,早期一个微小的补丁中引入的回归问题可能在日后导致巨大的损失。

全程软件自动化测试

全程软件测试已经是一个成熟并且比较普及的概念,但是由于自动化测试技术本身的一些局限和普及率,导致全程软件自动化测试对于很多团队来讲还是一个不知道或者可望而不可及的实践。但是随着自动化测试技术的发展,比如基于自然语言的自动化测试框架(Cucumber,Concordion 等)出现,使得业务分析阶段就可以产出一些自动化测试可以直接使用的测试用例;比如高速稳定易用的 Web UI 自动化测试工具(Cypress 和 TestCafe 等)的出现,使得基于 Web UI 的大规模功能测试,加入日常的持续集成流水线成为了可能;比如基础设施技术(Docker,Prometheus 和 Google Analytics 等)的成熟,从而可以更容易和安全地在产品环境实施并监控自动化测试。并且随着敏捷开发和 DevOps 的理念和实践的普及,全程软件自动化测试的思想越来越容易被接受,实施成本会越来越低,从而真正实现全程软件自动化测试。

测试左移与自动化测试

测试左移是预防缺陷最有效的方法和实践之一,它的核心理念就是缺陷发现得越早,修复的成本越低,比如修复的时间长短和人力成本。从而可以实现质量内建,并且尽可能在相同的研发周期内获得更高的质量。它的核心实践就是将测试工作左移到软件开发生命周期(SDLC)中开发之前的阶段,比如业务分析阶段。利用测试分析的各种方法帮助业务人员发现一个不合理的业务需求,帮助开发人员理解业务需求,发现其中的一些思考的盲点,从而尽可能地避免将这些问题遗留给开发人员。

持续集成与自动化测试

持续集成(CI)是敏捷开发中非常重要的一个实践,其核心就是开发人员频繁地将工作产出(比如代码等)集成在一起,并通过各种方法(比如编译,测试等)来验证它们集成在一起之后是否存在问题。这种实践可以尽可能早地发现软件的很多问题,但是发现问题的时间点和数量很大程度依赖于其中自动化测试执行的速度和覆盖率。

测试右移与自动化测试

随着软件系统的技术架构,基础设施和业务复杂度的不断高速增长,软件系统在产品环境的问题越来越多。所以如果能快速发现产品环境的问题,则可能减少很多损失;或者能持续发现产品环境上的问题,并能自动生成重现问题的自动测试用例,则可以持续提高自动化测试的有效性。

敏捷开发、DevOps、持续测试与自动化测试

敏捷开发和 DevOps 是现代软件开发,交付和运维中非常流行和重要的两个思想。经过多年的发展,它们分别包含了很多的方法和实践。在它们共同的实践中,自动化测试占到了非常重要的位置。可以毫不避讳的说,如果没有自动化测试,敏捷开发就很难敏捷起来,DevOps 几乎无法做到其希望的快捷,频繁和可靠的交付软件。而持续测试更是需要大规模的自动测试才能真正的高效实施,否则更多的则是缘木求鱼。

对于全程软件测试中的自动化测试,需要通过测试前移来进行自动化测试策略,分析和设计等,通过在开发中实施持续自动化测试,并在系统交付后在线上仍然进行自动化测试,并结合敏捷开发、DevOps和持续测试 等思想和实践,从而真正的实施全程软件自动化测试。

小结

软件自动化测试一直都被很多人诟病成本高,难以实施,不仅是因为它确实需要一定的成本,还因为大量编写自动测试的人员并不具备专业的自动化测试开发技能,包括代码编写技能,软件设计技能,测试工具和框架的熟悉度,基础设施的熟悉程度等等。但是由于软件规模和复杂度的增加,以及软件交付周期的缩短,团队必须通过实施自动化测试来应对大规模和高复杂度的软件,以及符合业务需求的交付周期。

另外,由于现代自动化测试技术的蓬勃发展,在整个软件开发生命周期中的各个阶段都能使用自动化测试技术来进行一定自动化测试的工作。随着技术的发展和普及,各个阶段的自动化测试程度会越来越高,从而可以更好地实现全程软件自动化测试。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

(三) 共享模型之管程【共享带来的问题】

一、共享带来的问题 1. 临界区 (1)一个程序运行多个线程本身是没有问题的 (2)问题出在多个线程访问共享资源 1️⃣多个线程读共享资源其实也没有问题 2️⃣在多个线程对共享资源读写操作时发送指令交错,就会出现问题 …

清朝盛衰的六个时间点!

清朝盛衰的整个过程经历了六个时间节点: 一六六一年﹙顺治十八年﹚是第一个时间节点。 正月初六夜半时分,顺治帝预感生命垂危,急命太监传呼麻勒吉与王熙两人赶赴养心殿。帝对王熙说:“朕出痘,势将不起,尔…

三、【react-redux】数据共享

文章目录1、优化项目结构2、添加一个新容器组件2.1、新项目结构2.2、CODE2.2.1、reduc/constant.js2.2.2、redux/actions/person.js2.2.3、redux/reducers/person.js2.2.4、redux/store.js2.2.5、Count.jsx2.2.6、Person.jsx2.3、Result3、总结本示例修改自 上一章 求和Demo 1、…

前端js传入Long类型精度丢失解决办法

目录 问题背景 解决过程 1.对比数据库数据 2.查询资料 解决方法 问题背景 在进行业务开发的 时候发现更新数据库中的一条数据没有成功,查看SQL日志发现SQL正常执行无错误信息,但是受影响行数为0,但是数据是从前端传过来的 ,一…

地图数据设计(四):地图比例尺

前言 比例尺作为地图数学基础的组成部分之一,表示了地图的空间尺度,是地图精度和内容详尽程度的决定因素。今天的文章将从比例尺的基本概念、常见比例尺参数以及SuperMap iDesktopX中比例尺设置三个方面展开。 1 比例尺的基本概念 1.1 定义 一般来说&am…

GmNAC181促进结瘤并提高根瘤的耐盐性

文章信息 题目:GmNAC181 promotes symbiotic nodulation and salt tolerance of nodulation by directly regulating GmNINa expression in soybean 刊名:New Phytologist 作者:Xiaodi Wang,Youning Wang, Xia Li et al. 单位…

【SQL】数据库事务

【SQL】数据库事务事物的ACID特性事务的状态显式事务隐式事务事务的使用举例SQL中的四种隔离级别MySQL中的隔离级别如何设置事务的隔离级别innodb默认支持事务事务是一组逻辑操作单元,使数据从一种状态转变到另一种状态事物的ACID特性 原子性(atomicity…

[附源码]Python计算机毕业设计SSM辽宁科技大学二手车交易平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【OpenCV-Python】教程:3-10 直方图(2)直方图均衡

OpenCV Python 直方图均衡化 【目标】 理解直方图均衡化提升图像的对比度 Histogram Equalization ??? 将图像的直方图拉均衡一些,分散一些;可以提升对比度。 【代码】 通过上面的图像可以看出,高亮度区域较少,需要分散该图像…

新零售行业如何玩转线上服务

如今,随着市场的千变万化,企业的商业模式正在不断经历革新。如线上企业不再单纯走电商路线,纷纷进军线下卖场,而传统门店也在寻找线上突围的机会,通过与电商平台合作,开启线上专卖店。线上线下相结合的新零…

Java并发编程—Thread类中的start()方法如何启动一个线程?

一、java线程的介绍: 在java的开发过程中,很多铁子对于java线程肯定不感到陌生,作为java里面重要的组成部分,这里就从如何创建一个线程给大家进行分析; 二、相关知识引入: ​ 之前我了解过,j…

题目1444:蓝桥杯201 4年第五届真题斐波那契

这篇文章是帮一个叫做【废柴成长中】的孩子写的。 题目&#xff1a; 这里难点应该就是在【输入为一行用空格分开的整数n m p(0<n,m&#xff0c;p<10^18)】 &#xff0c;这里一下子就把最大值干成long的最大范围了&#xff0c;很明显&#xff0c;long肯定也不行。 解析其…

简单封装一个易拓展的Dialog

Dialog&#xff0c;每个项目中多多少少都会用到&#xff0c;肯定也会有自己的一套封装逻辑&#xff0c;无论如何封装&#xff0c;都是奔着简单复用的思想&#xff0c;有的是深层次的封装&#xff0c;也就是把相关的UI效果直接封装好&#xff0c;暴露可以修改的属性和方法&#…

带你学习不一样的数据仓库系列-框架概念

编者按&#xff1a;本系列文章参考总结自IBM,FaceBook&#xff0c;Google等数据仓库构建英文文章&#xff0c;部分章节为直译过来&#xff0c;部分内容加上乐哥6年陌陌&#xff0c;快手等工作经验总结而来&#xff0c;让大家了解真实国外大厂数仓构建之路&#xff0c;国外同行对…

RabbitMQ初步到精通-第十一章-RabbitMQ之常见问题汇总

目录 RabbitMQ之常见问题汇总 1.rabbitmq丢消息场景 1.1 消息未持久化丢失 1.2 消费时消息丢失 1.3 如何阻止消息丢失 2. mq消费消息是pull 还是 push 2.1 pull形式消费 2.2 push形式消费 3. mq重复消费场景 3.1 生产端重复情况 3.2 消费端重复 3.3 如何防止 4.pre…

今年十八,喜欢ctf-web

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1fad2;每日emo&#xff1a;等我把脸皮磨厚 &#x1f342;专栏地址&#xff1a;网安专栏 本来想早点睡&…

抓包工具简单介绍和 fiddler 安装

目录 1、 抓包工具介绍 2、原理 3、fiddler 安装 1、 抓包工具介绍 抓包工具&#xff0c;是个特殊的软件&#xff0c;相当于一个 “代理程序”&#xff0c;浏览器给服务器发的请求就会经过这个代理程序&#xff0c;进一步的就能分析出请求和响应的结果如何。 通俗的讲&…

【附源码】计算机毕业设计JAVA重工教师职称管理系统

【附源码】计算机毕业设计JAVA重工教师职称管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA…

【Pandas数据处理100例】(九十四):Pandas使用any()判断DataFrame中是否有True

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

Kotlin高仿微信-第26篇-朋友圈-选择图片、小视频对话框

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…