软件测试基础 - 自动化测试技术

news2024/11/27 14:33:49

目录

前言:

什么是自动化测试?

自动化测试的优势:

自动化测试的劣势:

适合实施测试自动化的项目:

推行自动化测试的阻力:

软件研发生命周期各个阶段的自动化测试技术


前言:

软件测试是一个重要的软件开发过程,它的目的是检查软件是否符合预期。自动化测试是软件测试中的一种技术,它可以帮助我们更轻松地执行测试,并使测试结果更加可靠。

什么是自动化测试?

自动化测试是,把人对软件的测试行为转化为由机器执行测试行为的一种实践。
自动化测试的本质是先写一段代码,然后去测试另一段代码,所以实现自动化测试用例本身属于开发工作,需要投入大量的时间和精力,并且已经开发完成的用例还必须随着被测对象的改变而不断更新,你还需要为此付出维护测试用例的成本。当你发现自动化测试用例的维护成本高于其节省的测试成本时,自动化测试就失去了价值与意义,你也就需要在是否使用自动化测试上权衡取舍了。

自动化测试的优势:

  1. 自动化测试可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上;
  2. 自动化测试还可以保证每次测试执行的操作以及验证的一致性和可重复性,避免人为的遗漏或疏忽。
  3. 自动化测试可以大幅提升回归测试的效率,非常适合敏捷开发过程;
  4. 自动化测试可以更好地利用无人值守时间,去更频繁地执行测试,特别适合现在非工作时间执行测试,工作时间分析失败用例的工作模式;
  5. 自动化测试可以高效实现某些手工测试无法完成或者代价巨大的测试类型,比如关键业务 7×24 小时持续运行的系统稳定性测试和高并发场景的压力测试等;

自动化测试的劣势:

  1. 自动化测试并不能取代手工测试,它只能替代手工测试中执行频率高、机械化的重复步骤。你千万不要奢望所有的测试都自动化,否则一定会得不偿失。
  2. 自动测试远比手动测试脆弱,无法应对被测系统的变化,维护成本高。其根本原因在于自动化测试本身不具有任何 “智能”,只是按部就班地执行事先定义好的测试步骤并验证测试结果。对于执行过程中出现的明显错误和意外事件,自动化测试没有任何处理能力。
  3. 自动化测试用例的开发工作量远大于单次的手工测试,所以只有当开发完成的测试用例的有效执行次数大于等于 5 次时,才能收回自动化测试的成本。
  4. 手工测试发现的缺陷数量通常比自动化测试要更多,并且自动化测试仅仅能发现回归测试范围的缺陷。
  5. 测试的效率很大程度上依赖自动化测试用例的设计以及实现质量,不稳定的自动化测试用例实现比没有自动化更糟糕。
  6. 实行自动化测试的初期,用例开发效率通常都很低,大量初期开发的用例通常会在整个自动化测试体系成熟,和测试工程师全面掌握测试工具后,需要重构。
  7. 业务测试专家和自动化测试专家通常是两批人,前者懂业务不懂自动化技术,后者懂自动化技术但不懂业务,只有二者紧密合作,才能高效开展自动化测试。
  8. 自动化测试开发人员必须具备一定的编程能力,这对传统的手工测试工程师会是一个挑战。

适合实施测试自动化的项目:

第一,需求稳定,不会频繁变更。
第二,研发和维护周期长,需要频繁执行回归测试。
对于一些中长期项目,我的建议是:对比较稳定的软件功能进行自动化测试,对变动较大或者需求暂时不明确的功能进行手工测试,最终目标是用 20% 的精力去覆盖 80% 的回归测试。
第三,需要在多种平台上重复运行相同测试的场景。兼容性测试
第四,某些测试项目通过手工测试无法实现,或者手工成本太高。性能和压力测试
第五,被测软件的开发较为规范,能够保证系统的可测试性。某些用例的自动化必须要求开发人员在产品中预留可测试性接口,否则后续的自动化会很难开展。
第六,测试人员已经具备一定的编程能力。

推行自动化测试的阻力:

  • 前期的学习成本通常会比较大,很难在短期内对实际项目产生实质性的帮助,此时如果管理层对自动化测试没有正确的预期,很可能会叫停自动化测试;
  • 测试工程师通常会非常热衷于学习使用自动化测试技术,以至于他们的工作重点会发生错误的偏移,把大量的精力放在自动化测试技术的学习与实践上,而忽略了测试用例的设计,这将直接降低软件整体的质量;
  • 业务测试人员担心自动化技术会替代自己的工作,故采取不配合的工作态度;

软件研发生命周期各个阶段的自动化测试技术

在软件研发生命周期的各个阶段都有自动化测试技术的存在,并且对提升测试效率有着至关重要的作用。软件研发各个阶段的自动化测试有:单元测试、代码级集成测试、Web Service 测试和 GUI 测试阶段的自动化技术。

** 单元测试的自动化技术 **

  • 1. 单元测试用例框架代码生成的自动化:框架代码应该由自动化工具生成,而不是由开发者手工完成。
  • 2. 部分测试输入数据的自动化生成:自动化工具能够根据不同变量类型自动生成测试输入数据。
  • 3. 自动桩代码的生成:自动化工具可以对被测试代码进行扫描分析,自动为被测函数内部调用的其他函数生成可编程的桩代码,并提供基于测试用例的桩代码管理机制。
  • 4. 被测代码的自动化静态分析:目的是识别出违反编码规则或编码风格的代码行。
  • 5. 测试覆盖率的自动统计与分析:自动化工具可以自动统计各种测试覆盖率,包括代码行覆盖率、分支覆盖率、MC/DC 覆盖率等。

** 代码级集成测试的自动化技术 **
从测试用例设计和测试代码结构来看,代码级集成测试和单元测试非常相似,它们都是对被测试函数以不同的输入参数组合进行调用并验证结果,只不过代码级集成测试的关注点,更多的是软件模块之间的接口调用和数据传递。
代码级集成测试与单元测试最大的区别是,代码级集成测试中被测函数内部调用的其他函数必须是真实的,不允许使用桩代码代替,而单元测试中允许使用桩代码来模拟内部调用的其他函数。

由于代码级集成测试主要应用在早期非互联网的传统软件企业,那时候的软件以 “单体” 应用居多,一个软件内部包含大量的功能,每一个软件功能都是通过不同的内部模块来实现的,那么这些内部模块在做集成的时候,就需要做代码级集成测试。
现在的开发理念追求的是系统复杂性的解耦,会去尽量避免 “大单体” 应用,采用 Web Service 或者 RPC 调用的方式来协作完成各个软件功能。所以现在的软件企业,尤其是互联网企业,基本不会去做代码级集成测试。

** Web Service 测试的自动化技术 **
Web Service 测试,主要是指 SOAP API 和 REST API 这两类 API 测试,最典型的是采用 SoapUI 或 Postman 等类似的工具。但这类测试工具基本都是界面操作手动发起 Request 并验证 Response,所以难以和 CI/CD 集成,于是就出现了 API 自动化测试框架。

对于基于代码的 API 测试用例,通常包含三大步骤:

  • 1. 准备 API 调用时需要的测试数据;
  • 2. 准备 API 的调用参数并发起 API 的调用;
  • 3. 验证 API 调用的返回结果。

Web Service 测试 “自动化” 的内涵:

  • 1. 测试脚手架代码的自动化生成;
  • 2. 部分测试输入数据的自动生成: 单元测试针对的参数是函数输入参数和函数内部输入,而 API 测试对应的是 API 的参数以及 API 调用的 Payload。
  • 3. Response 验证的自动化: Response 验证自动化的核心思想是自动比较两次相同 API 调用的返回结果,并自动识别出有差异的字段值,比较过程可以通过规则配置去掉诸如时间戳、会话 ID(Session ID)等动态值。
  • 4. 基于 SoapUI 或者 Postman 的自动化脚本生成: 开发一个自动化代码转换生成工具。这个工具的输入是 SoapUI 或者 Postman 的测试用例元数据(即测试用例的 JSON 元文件),输出是符合 API 测试框架规范的基于代码实现的测试用例。这样一来,原本的测试用例积累可以直接转换成在 CI/CD 上可以直接接入的自动化测试用例。

** GUI 测试的自动化技术 **
GUI 自动化测试主要分为两大方向:

  • 传统 Web 浏览器的 GUI 自动化
  • 移动端应用的 GUI 自动化

自动化测试试一把 “双刃剑”,虽然它可以从一定程度上解放测试工程师的劳动力,完成一些人工无法实现的测试,但并不适用于所有的测试场景,如果维护自动化测试的代价高过了节省的测试成本,那么在这样的项目中推进自动化测试就会得不偿失。

对自己测试现状的反思:没有真正理解自动化的概念,过去只是片面的认为用例执行的自动化就是自动化,也是为自动化而自动化。其实自动化贯穿了整个测试过程,从用例设计,数据准备,用例生成,响应判断,用例执行,执行结果分析,都包含了自动化的内容。现在 devops 的流行,让自动化的占据了更多的比重。个人认为自动化最重要的是思想,当现在宏观的角度看待项目,看待整个测试过程,自动化应该是我们工作的指导思想,就是通过一切手段高质量、高效率、低入驻成本的守护产品的质量。

测试主要精力放在用例设计和业务的理解上,自动化的实现只是一种手段,不能过于追求自动化实现,反而忽略了测试用例的设计,这样不仅本末倒置,而且失去了自动化的意义。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

还在手动维护Yapi?

因前后端人员通过接口定义字段,返回值等对接时非常苦恼,没有一个很好的平台维护,后端每次迭代都要写开发文档,需求变化,多系统联调等,给前后端联调造成阻塞。 1、后端开发文档编写规范 1)文档…

DataWhale AI夏令营——机器学习

DataWhale AI夏令营——机器学习 学习记录一1. 异常值分析2. 单变量箱线图可视化3. 特征重要性分析 学习记录一 锂电池电池生产参数调控及生产温度预测挑战赛 已配置环境,跑通baseline,并在此基础上对数据进行了简单的分析。 1. 异常值分析 对训练集…

Python知识使用目录体系

Python知识使用目录体系 前记:开始以Get No.方式进行记录,知识体系的建立 Get No. No1: IDEA(Java主要编辑器)中添加Python插件;(就在此总目录中写,属于纪念开始) 附加:另外一个pycharm工具使用python工…

pyqt5中的控件

字体部分 学习如何加载本地字体a.tff import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton from PyQt5.QtGui import QFont, QFontDatabaseclass MyWindow(QWidget):def __init__(self):super().__init__()self.button Noneself.label None…

【Java开发】 Mybatis-Plus 06:通用枚举功能

枚举类是开发时绕不开的话题, Mybatis-Plus 也提供了简便的枚举功能,快学起来吧~ 目录 1 版本区别 2 通用枚举功能实现 2.1 创建枚举类 2.2 实体类新增枚举字段 3 枚举字段测试 3.1 新增 ① 后台指定枚举 ② 前后端交互 3.2 查询 3.3 修改 ①…

递归排序算法快速排序的实现过程

快速排序(Insertion Sort)也是一种递归排序算法。 快速排序原理:先以列表中的任意一个数为基准(一般选头或尾),将列表分为左、右两个子列表。 左子列表的数要比基准数小,右子列表的数要比基准数大。然后继续把左子列表和右子列表按同样的方…

蓝桥杯专题-真题版含答案-【九宫幻方】【打鱼还是晒网】【阶乘尾数零的个数】【等差素数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

【Java】重写compareTo()方法给对象数组排序

我们先给一个数组排序,我们肯定用的是Arrays.sort()方法: public class test2 {public static void main(String[] args) {int[] arr{3,5,4,6,9,8,1};System.out.println(Arrays.toString(arr));System.out.println("---------");Arrays.sort…

【一文详解 requests 库中 json 参数和 data 参数的用法】

在requests库当中,requests请求方法,当发送post/put/delete等带有请求体 的请求时,有json和data2个参数可选。 众所周知,http请求的请求体格式主要有以下4种:application/jsonapplicaiton/x-www-from-urlencoded multi…

音视频开发-ffmpeg介绍-系列二

目录 一、FFmpeg核心结构体 二、解码流程 三、FFmpeg解码实现 四、FFmpeg编码实现 五、FFmpeg转码实现 一、FFmpeg核心结构体 AVFormatContext:解封装功能的结构体,包含文件名、音视频流、时长、比特率等信息; AVCodecContext&#xf…

nginx代理后刷新显示404,这样解决。

项目部署之后,通过首页进入访问页面正常,F5刷新之后出现错误如下图。 怎么解决: 在Nginx配置里面增加 location / {root /www/wwwroot/phm/phmweb;index index.html index.htm;try_files $uri $uri/ /index.html;}

Kotlin基础(七):数据类和封闭类

前言 本文主要讲解kotlin数据类(DataClass)和封闭类(SealedClasses),包括使用数据类,对象复制,数据类成员的解构,使用封闭类,以及数据类和封闭类在Android开发中的应用。…

【数据挖掘】时间序列的傅里叶变换:用numpy解释的快速卷积

一、说明 本篇告诉大家一个高级数学模型,即傅里叶模型的使用; 当今,傅里叶变换及其所有变体构成了我们现代世界的基础,为压缩、通信、图像处理等技术提供了动力。我们从根源上理解,从根本上应用,这是值得付…

微信小程序——页面跳转方法和场景用法总结

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

失物招领小程序连接人与物的奇妙纽带

hello guys!! 随着生活的节奏加快,人们在各个领域都有可能会遇到丢失物品或者拾到物品的情况。不论是学生、员工还是旅游爱好者,我们都有可能在生活的轨迹中遇到这样的情况。为了提供一个便捷的平台,让人们能够分享、发布和寻找丢失物品&…

再添新品|OPT(奥普特)高速高分辨率线阵相机发布!

针对大幅面且高速生产的视觉检测场景,OPT(奥普特)持续在数据传输接口技术上进行开发创新,推出三大系列线阵相机,产品阵容再升级。 本次发布的新品共12款,分别有万兆网、CXP及CL系列的新品,分辨…

JavaDemo——使用jks的https

java使用https主要就是设置下sslContext,sslContext初始化需要密钥管理器和信任管理器,密钥管理器用于管理本地证书和私钥,信任管理器用于验证远程服务器的证书,这两种管理器都需要KeyStore初始化,两种管理器可以按需只…

OS1_进程与线程的管理

序言 1.OS以进程、线程的方式在CPU中执行静态保存在外存(内存)中的程序,进程的构成与状态转化,特别是进程的切换; 2.当有多个进程处于就绪态,有哪些常见的挑选以执行方式; 3.并发执行(乱序发射)的进程,共享…

商品信息管理-亿发商品进销存管理系统,批发行业零售门店免费试用

众所周知,批发零售行业面临着商品品类繁多、品牌众多、商品信息量庞大等挑战。同时,商品售价波动频繁,还需要管理商品批次,避免积压过期。针对这些传统批发零售行业的管理难题,加快行业数字化转型成为解决之道&#xf…

远程访问不了虚拟机【bug】

远程访问不了虚拟机【bug】 bug 虚拟机访问不了他的默认网关 虚拟机IP:172.25.254.250 虚拟机网关IP:172.25.254.1 远程登录也是超时的 错误产生 我还原了一下虚拟机的网络配置选项 导致 √ 使用本地DHCPT服务将IP地址给虚拟机 相关资源 本机的I…