自动化测试大总结

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

最近要在新入职的公司准备一份自动化测试的培训,这是我在得知要做自动化测试培训以后,随手画了个图,压压惊:

在这里插入图片描述

这是我能想到的关于自动化测试的一些要点,然后根据一篇我三年前写的关于自动化测试的随笔更新了一下,当然遗憾的是到目前为止,我接触的成功的敏捷开发项目还很少,虽然敏捷近些年一直很火。关于敏捷自动化测试这一块也只有一次不太成功的经验,所以本文中我回避了这一块:

1.什么是自动化测试

以程序测试程序,以代码代替思维,以脚本的运行代替手工测试。自动化的测试涵盖了:功能(黑盒)自动化测试,功能(白盒)自动化测试,性能测试,压力测试,GUI(Graphical User Interface)测试,安全性测试等。

关于什么是自动化,查阅了一些资料,并没有一份权威规范的解释,以下摘自维基百科:

In software testing, test automation is the use of special software (separate from the software being tested) to control the execution of tests and the comparison of actual outcomes with predicted outcomes.Test automation can automate some repetitive but necessary tasks in a formalized testing process already in place, or add additional testing that would be difficult to perform manually.

首先,test automation跟 automation test是有区别的,测试自动化涵盖的面更广泛。本文阐述的是自动化测试,在这里暂且混淆这两个概念。

这一段英文不难,自行翻译。我眼里看到的几个要点:

  • 1.需要工具;
  • 2.工具控制流程,比较预期输出与实际输出;
  • 3.重复性高且有必要的测试流程可以自动化;
  • 4.用于手工测试难以达成的领域

说说我自己的理解:

自动化测试是测试思想的一个延伸,为测试工程师提供了一个“触须”,其行为可以看成一个工具,但是本质上自动化测试还是一种思想。

顺便提一句,狭义上的自动化测试指的就是基于GUI的自动化测试,而单元测试跟API测试,你有想过怎么用手工不借助任何工具去做吗?所以它们天生就属于测试自动化的范畴。

2.自动化测试的优势

回归测试更方便可靠 ;可运行更多,更繁琐的测试,且快速高效;可执行一些手工测试执行相当困难或者做不到的测试,如大量的用户并发;更好的利用资源,具有一致性和可重复性的特点,自动化测试脚本完全可复用;提升了软件的可信度;多环境下测试等。

自动化最实在的优势在于——工作好找:有一个测试工程师(并不是本人)发现一个有趣的现象,她申请过的几乎所有测试职位,在招聘时都需要自动化测试经验。但当她开始工作后,就发现这些公司都试图做自动化测试,但是结果大多不怎么地。不过,尽管她参与的都是一些杯具的项目,不过她总能把这些杯具包装成洗具以应对下一次面试。

所以呢,既然自动化测试有那么多优势,为什么还有那么多项目做失败了呢?

我个人有个推论:自动化测试的优势都是自动化测试成功完成得到的结论,而自动化测试的劣势才是自动化项目立项的基础。

还有个优势:自动化测试可以将产品的知识固化到脚本中,以降低测试人员流动对项目造成的影响。但是这个优势的前提是,这些脚本易于维护,这就需要一些必要的文档,这又是另一个议题了。

3.自动化测试无法做到的事以及劣势

永远不可能完全替代手工测试,自动化测试无法做到手工测试的覆盖率,不是每个测试用例都适合做成自动化,如建议一个页面的布局是否正确、安装测试、文档测试、兼容性测试、恢复性测试。

手工测试发现的缺陷远比自动化多。自动化测试是几乎无法发现新缺陷的,最大的用途是用来回归,确保曾经的bug没有在新的版本上重新出现。

自动化测试工具是死的,它不具备任何想象力。自动化测试的好坏,完全取决于测试工程师。

成本投入高,风险大。对测试人员的技术要求高,对测试工具同样有要求。

关于成本,包括了资金预算,人力资源,人员培训,硬件资源等。下图显示了自动化测试的投入成本与时间的关系,很显然,前面多数时间,成本是很高的。

基于以上劣势,所以虽然“贵为”自动化测试工程师,我有一大半的时间在劝老板,“亲,能不能不做自动化”。这真是个悲伤的故事。

在这里插入图片描述

4.合适引入自动化

项目周期长,系统版本不断,并且需求不会频繁变更,此时是适合引入自动化测试的。

系统的测试对象基本可以正常识别,以及对无法识别的控件能否提供一个解决方案。

系统中不存在大量的不可识别第三方控件。

需要反复测试,如可靠性测试、回归测试等需要进行上千次的系统测试。

5.不适合自动化

项目周期短,需求频繁变更。即使是周期长的项目,如果经常需求变更,也不适合做自动化。

软件版本还没有稳定的情况下,主功能或大量功能有被重新更改的可能话,也不适合做自动化。

没有明确的项目测试自动化计划,措施和管理。

多数对象无法识别,以及脚本维护频繁与艰难,二者有其一,自动化必定失败。

6.自动化测试的流程

在这里插入图片描述

合理的自动化切入点: 通常,项目只有经历了完整的系统测试之后才算具备了基本的引入测试自动化的条件。

个人观点:无论什么测试,越早介入则越有利于降低成本,降低风险。而随着新型的开发模式兴起,自动化测试也具备了尽早介入的条件。比如敏捷开发中,某核心模块核心功能完成后,则可针对该模块的该功能开始实施自动化测试。

测试自动化分析:

(1)可行性分析

(2)抽样demo分析,demo一般选取冒烟测试用例,检查脚本是否能够成功运行通过,已设计的测试点是否全部执行

(3)测试需求分析,分析哪些功能点准备进行自动化

(1)可行性分析是自动化测试最重要的部分之一。可行性分析是自动化测试最重要的部分之一。可行性分析是自动化测试最重要的部分之一。重要的话要讲三遍。

关于可行性分析,请参考2,3,4,5点;你的一个错误决定(自动化测试项目立项),很可能给好几个人带来全职工作机会,从这个角度来讲,还能促进鸡的屁==

(2)抽烟Demo,主要还是用来验证你的工具是否能用

(3)自动化测试不是100%测试,不可能达到手工测试的覆盖率,要筛选功能点进行自动化测试

测试计划定制:自动化测试计划越全面,后期越能循规蹈矩的去实施,自动化测试的成功率越高

计划赶不上变化,有时候太全面了或许也不是什么好事。

自动化测试设计阶段:主要分为自动化测试框架和自动化测试用例。

(1)自动化测试框架的设计,开发与搭建:应能保证测试的分布执行,脚本模块化,数据驱动,日志分析,错误截图,报表回收,共享对象库,公共函数库,环境配置,统一设计模式,异常处理,场景恢复的一个无人值守的,针对每个独立项目的测试框架

关于为什么需要自动化测试框架,我有另外一篇文章详细说明了,这里不再复述

然后我顺便说说找对象的事,是自动化测试框架找对象,不是我找对象:)

通常每种框架都应该支持动态跟静态两种找对象的方式,静态找就涉及到对象库,包括对象库的读、写、合并、维护等一系列问题,这些都可以交给框架做;

关于动态查找,我举个RFT的例子,你们意会一下:

Two types of find API in Rational Functional Tester:

find(Subitem Properties).
find(Subitem Properties, Boolean mappableOnly).
Subitems can be either atChild() or atDescendant() or atList().

atChild: One or more properties that must be matched against the direct child of the starting TestObject.
atDescendant: One or more properties that can be matched against any child of the starting TestObject
atList: A sequential list of properties to match against. Valid subitems for atList are atChild, atDescendant, and atProperty.
mappableOnly: Arguments that limit the search. If it is set to true, the search for children will be limited to those test objects that are mappable, otherwise non-mappable test objects are also searched.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先测试工具会提供动态查找的接口或者方法,RFT里面提供的是find方法,调用这些接口或者方法即可实现动态查找。

动态查找的好处是可以采用“相对路径”来定位对象,而相对的,对象库则采用的是“绝对路径”。如果一旦对象的一些属性改变,静态查找的方式可能会找不到对象,当然了,现在的自动化测试越来越智能,已经可以做到选取匹配度最高的对象返回。动态查找还有个好处是它找到的对象是“代码”,你可以进一步在框架里去对这些对象进行处理,而对象库里的每一个对象都是一个独立的对象,你可以使用它们,但是很难改变它们。

通常现在的自动化测试框架都是采用动静结合的方式,即两种找对象的方式都会兼顾,因为一般来说,静态查找的方式速度更快,效率更高。但是静态查找带来的问题也是显著的,主要集中在对象的维护管理以及合并上,如何共享对象,避免重复加对象等。此时,规范对象命名就显得很重要了。以往我做的自动化测试项目中,这些都是坑。

(2)自动化测试用例设计三部曲:手工测试用例是从无到有,然后自动化测试用例是根据手工测试用例来写的。首先,筛选手工测试用例。然后转换手工测试用例,最后新增&补充自动化测试用例。

为什么不能用手工测试用例完全替代自动化测试用例?

自动化测试用例的范围往往是核心业务流程或者重复执行率高的,自动化测试的覆盖率不能达到手工测试的覆盖率。自动化测试的用例选择一般以正向为主,而反向的情况却有很多,但是并不是所有反向情况自动化测试都会涵盖,而是有筛选的选取一部分。也并不是所有的手工测试用例都可以用来做自动化的,如页面布局的检查。手工测试可以不需要回原点,但是自动化测试往往是必须的。自动化测试用例与手工测试用例不同,不需要每个步骤都写预期结果。

通常做自动化测试的时候我都会写一个叫做shake-down test的测试用例,这个用例会把系统里所有完成了的表单都过一遍,只是做一个Navigate的操作,以确保某个页面是否可用。

每次做回归测试前,可以先跑一遍shake-down test,很快可以确定哪些功能是accessible,相当于做了一整个系统的一个冒烟测试。

测试脚本设计与开发:

测试脚本大致可划分为:

(1)线性脚本:通过录制直接产生的线性可执行的脚本

(2)结构化脚本:具有顺序,循环,分支等结构的脚本

(3)可共享脚本:可以被多个测试用例使用,被其他脚本调用的脚本(即模块化的脚本)

(4)数据驱动脚本:测试数据跟业务流程控制分离的脚本,通过读入数据文件来驱动流程进行的脚本

(5)关键字驱动脚本:脚本,数据,业务分离,数据和关键字在不同的数据表中,通过关键字来驱动测试业务逻辑。关键字驱动的特点是,它更像是描述一个测试用例在做什么,而不是如何做。

(6)混合型脚本:以上任意两种及以上

(7)敏捷自动化测试脚本/框架:这一块等我有了成功经验再补充=。=

自动化测试执行:

(1)无人值守的测试:环境搭建,部署与配置;自动化测试用例与测试脚本相互绑定;自动化测试用例执行顺序排列与组合

(2)异常处理与场景恢复

提交自动化测试产物:大致需要提交执行情况,测试结果,分析报表,测试报告,质量情况等。

测试脚本维护:严格来讲,每个阶段都在做测试脚本维护。一个不值得维护的自动化测试项目是不值得立项的。

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

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

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

相关文章

[NKCTF2024]-PWN:leak解析(中国剩余定理泄露libc地址,汇编覆盖返回地址)

查看保护 查看ida 先放exp 完整exp: from pwn import* from sympy.ntheory.modular import crt context(log_leveldebug,archamd64)while True:pprocess(./leak)ps[101,103,107,109,113,127]p.sendafter(bsecret\n,bytes(ps))cs[0]*6for i in range(6):cs[i]u32(p…

想要品牌传播有效,先清楚这三个本质问题

在互联网时代,企业想要提高市场竞争力就需要做好品牌传播。然而有许多企业在做品牌传播时都会踩坑,原因是因为忽视了这三点,接下来就让媒介盒子和大家分享: 一、 文案本质是“购买理由” 在文案技巧中经常会出现一些词&#xff…

【SVN】clean up报错:Cleanup failed to process the following paths 解决方法

报错来源:代码更新有一个文件既不能接受自己的也不能接受别人的,只能取消,再提交提醒clean up,随后报标题错误。 解决方法:参考https://www.cnblogs.com/pinpin/p/11395438.html 1.下载sqlite3 网址:SQL…

请求转发和请求重定向的区别

请求转发(Forward)和请求重定向(Redirect)虽然都是 HTTP 服务器,处理客户端请求时进行(页面)跳转的实现方式,但是二者有以下 5 点不同: 1. 定义不同。 2. 跳转方不同。 3. 数据共享不同。 4.最终 URL 地址不同。 5.代码实现不同。 具体内容如下&…

实践笔记-linux内核版本升级(centos7)

linux内核版本升级 1.查看当前内核版本信息2.采用yum方式进行版本升级2.1导入仓库源2.2选择 ML 或 LT 版本安装2.3设置内核启动 3.删除旧版本内核 1.查看当前内核版本信息 #查看操作系统版本 cat /etc/redhat-release #查看系统内核 uname -r2.采用yum方式进行版本升级 2.1导…

微信公众号视频下载

这几天想在微信公众号中下载几个视频,但没有视频中没有下载图标,试了据说可以下载视频的网站也不行。折腾了我几天,一直不得其法,没想到最后想要放弃时,被我找到了下载方法,很简单,在这里分享给…

基于SpringBoot+Vue的在线学习平台(源码+文档+部署+讲解)

一.系统概述 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台的网络应用,在外国学习平台已经是很普遍的方式,不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学…

华为USG6000v

1、安全区域 一个及或多个接口的集合 默认的安全区域 Trust --- 优先级85,一般连接内网 Untrust --- 优先级5, 一般连接外网 Dmz --- 优先级50,一般连接服务器、 Local --- 优先级100,防火墙接口所在区的区域 2…

在短视频的挤压下,长视频何去何从?长视频行业能否借助AI重拾信心?

回顾2019年中国网络视听大会,长视频行业的领袖们曾在演讲中对短视频进行了猛烈抨击,这一场面至今仍然令人印象深刻。当时,长视频平台似乎还有一些自信,但如今,他们已经被来自各方的竞争对手挤得喘不过气来。今年以来&a…

数组数据构建二叉树

1、数组数据说明 数组中的数据是按照二叉树的层次存放的,位置上没有数据的放NULL. 比如: int a[] {5,1,4,NULL,NULL,3,6}; 2、数组数据构建二叉树 2.1、构建节点 如上图,节点需要一个结构体指针成员指向左孩子 一个结构体指针成员指向右…

Softing WireXpert 4500线缆认证仪的独特之处——双控系统

Softing推出的WireXpert 4500线缆认证仪,可用于结构化布线认证,认证速率高达40Gb/s。该线缆认证仪专为实用性而设计,重量轻,手感舒适,主机与副机均配备6英寸工业LCD触摸屏,使其更适用于布线现场。 WireXper…

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换,从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量,样本的多个特征组成特征向量。 线性代数——特征值对应的…

spikingjelly学习-训练网络

【MNIST数据集包含若干尺寸为28*28的8位灰度图像,总共有0~9共10个类别。以MNIST的分类为例,一个简单的单层ANN网络如下 我们也可以用完全类似结构的SNN来进行分类任务。就这个网络而言,只需要先去掉所有的激活函数,再将尖峰神经元…

CSDN 广告太多,停更通知,转移到博客园

文章目录 前言新博客地址 前言 CSDN的广告实在是太多了,我是真的有点忍不了。直接把广告插在我的文章中间。而且我已经懒得找工作了,我当初写CSDN的目的就是为了找工作,有个博客排名。当时经济环境实在是太差了。我也没必要纠结这个2000粉丝…

SpringBoot通用模块--文件上传开发(阿里云OSS)

文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务,需要有存储的支持,那…

lora微调过程

import os import pickle from transformers import AutoModelForCausalLM from peft import get_peft_config, get_peft_model, get_peft_model_state_dict, LoraConfig, TaskTypedevice "cuda:0"#1.创建lora微调基本的配置 peft_config LoraConfig(task_typeTask…

记一次SQL优化

问题描述: 原本执行此查询,需要占用546G内存数据, 但经过与实施人员沟通,以及对于业务的排查 (精简SQL,站在业务的角度优化SQL) 去掉排序功能(运维,及生产人员可接受&am…

HarmonyOS 开发-应用异常处理案例

介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法,主要分为应用崩溃、应用卡死以及系统查杀三种。 效果图预览 使用说明: 点击构建应用崩溃事件,3s之后应用退出,然后打开应用进入应用异常页面&#x…

Maven与Jave web结构

Maven 简介 https://www.liaoxuefeng.com/wiki/1252599548343744/1255945359327200 java web module web目录 –src 应用程序源代码和测试程序代码的根目录 –main –java  应用程序源代码目录     --package1     --class1     --class2 –resources  应用…

P8707 [蓝桥杯 2020 省 AB1] 走方格

原题链接:[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意:现在有个人站在第 1 行第 1 列,要走到第 i 行第 j 列(每次只能向右或者向下走)&#xff0…