什么是自动化测试?如何做自动化测试?

前面介绍了功能测试和接口测试,在介绍接口测试时提到了实现API自动化。那具体什么是自动化,为什么要做自动化,这里我们集中总结。

一. 什么是自动化?

顾名思义,自动化测试是相对人工测试而言的,它是指把人工对软件的测试行为转化为由机器执行的一种实践。

需要说明的是,单元测试属于白盒测试,很多公司的单元测试都是由开发人员负责,本文不作讨论。本文讨论的重点是API测试和GUI测试。

手工API测试的做法是,使用接口测试工具(例如Postman),然后操作以下步骤:

  1. 输入接口URL
  2. 选择请求类型,例如GET、POST等
  3. 填入header和参数信息
  4. 发送请求
  5. 验证响应,包括响应码和响应体。
  6. API自动化即是自动请求对应的API,并自动验证其结果是否符合预期。

手工GUI测试的做法是,打开待测系统,参考根据需求写好的测试用例,逐个手动点击,验证结果是否符合预期。

GUI自动化即是模拟人工在软件界面上的各种点点点操作,并自动验证结果。

二. 为什么要做自动化?

自动化测试听起来很美好,可以将测试人员从简单重复的劳动中释放出来。但自动化测试的的本质是用一段代码(自动化用例)测试另一段代码(开发实现的业务逻辑),所以自动化用例本身属于开发工作,并且要随着被测对象的更新而更新,因此也有一定的维护成本。

既然有开发和维护成本,就要考虑其性价比。来看看自动化测试的优势:

  1. 自动化测试可以替代大量的手工重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上。
  2. 自动化测试可以答复提升回归测试的效率
  3. 自动化测试可以更好地利用无人值守的时间频繁地执行测试,适合需要7*24小时持续运行的系统稳定性测试的关键业务

自动化测试可以保证每次测试执行的操作以及验证的一致性和可重复性,避免人为的遗漏和疏忽
再来看看自动化测试的劣势:

自动化测试不能取代手工测试
自动化测试本身不具有任何“智能”,它只是按部就班地执行事先定义好的测试步骤并验证结果,无法应对被测系统的变化
自动化测试有一定的开发和维护成本。统计表明,当自动化永利的有效执行次数>=5时,才能收回自动化测试的成本。
自动化测试仅能发现回归测试范围的缺陷,无法像手工测试一样做探索性测试
结合自动化测试的优势和劣势,哪些场景适合使用自动化测试呢?

需求稳定、不会频繁变更的场景
需要频繁执行回归测试的场景
通过手工测试无法实现或者手工测试成本太高的项目
例如上面说的需要7*24小时保证稳定性的关键业务,用自动化测试技术可以不间断地操作。

三. 做自动化测试的准备工作

以测试用户登录为例,手工测试的步骤如下:

注册用户
测试用户登录
这里面有两个问题:

注册时,需要注册服务是可用的,如果无法注册用户,测试也就阻塞了
测试时,该用户没有被使用。换句话说,如果此时恰好有人做删除操作,把你刚创建的用户删除了,则测试失败。
问题1是测试数据的准备问题,问题2是测试环境的干扰问题。

3.1 测试数据的准备

仍然以测试用户登录为例,我们有几种方法来获取注册的用户:

直接通过GUI操作
这种方法简单直接,但效率较低
调用API生成
实现上没问题,问题是一个前端操作可能会调用一系列后端API,且不说获取这一些列API遇到的问题,单单逐个手动操作去调用的过程,都赶得上直接在前端操作了。
通过数据库操作
实现上没问题,问题是一则测试同学并不清楚一项业务修改了哪些数据库表,其次就算知道了手动插入也麻烦,而且直接修改DB的数据,一个不小心误删了或误改了,想想手都要抖。

其实还有一种比较好的方法,调用API或通过数据库操作,做成自动化工具。例如,正常的注册需要输入用户名、密码,甚至还有邮箱手机号啥的,最后生成了账号。而如果你要测试用户登录功能,用户名、密码、邮箱、手机号都不是要关注的重点,换句话说,这些值是什么都无所谓,你只是要一个可以登录的用户名/密码即可。由此我们可以在了解了API调用序列之后,做成自动化工具(需要有前端知识),有默认的用户名(例如test+<时间戳>)和密码(例如 test123),一键注册。如此则大大提高了效率,降低了手动操作的错误的可能性。

从广义上说,自动化工具的实现,也是自动化技术的一部分。

3.2 测试环境的准备

平时测试人员的操作都是在测试环境上进行的。需要专门为自动化测试搭建并维护一套测试环境吗?很显然,是有一定的物质成本和维护成本的。如果并用一套测试环境,会相互干扰。尤其是很多流程比较长的业务,你要验证一个环节,可能刚好这个数据被别人用了,就会导致用例的失败,由此又要去分析,最后发现是数据的问题。这里说下我曾经接触过的几个解决方案:

自动化用例中实时搭建环境,自动化用例执行完再释放环境
优点:自动化测试环境天然的隔离
缺点:实时搭建环境不仅需要大量的服务器,还需要大量的时间。
因此并不适用快节奏的互联网产品
分别维护手工测试环境和自动化测试环境
优点:数据的隔离
缺点:有更新时需要部署并维护两份。
互联网产品的快节奏决定了部署是很频繁的,这种方法效率也比较低
共用手工测试环境和自动化测试环境
优点:只需要部署并维护一份环境

缺点:数据会相互干扰

当然,可以有其他办法来解决数据的干扰,譬如命名规范,自动化用例相关的用户等固定有个前缀(例如auto),大家手工测试时不使用这类的数据。

使用哪种方案,要依据当前要解决的问题来决策。如果自动化处于起步阶段,大可先共用环境,等自动化建起来再说;如果比较成熟了且数据干扰严重,可以考虑维护两套环境等。

四. 自动化技术简介

4.1 API自动化技术

代码级的API测试是比较简单的,因为API测试的基本步骤是很标准的:

准备测试数据
发起请求
验证响应结果
而无论是请求参数还是响应参数,都是K-V的键值对,验证结果只需要解析这些键值对即可。因此常用的类和方法也就那么几种。

难点在于:业务流程设计哪些接口,接口用例如何设计、如何组织管理等。

本文不详细介绍,有时间 & 有人需要,我再更新吧~

4.2 GUI自动化技术

GUI自动化测试的核心思想是,基于页面元素识别技术,对页面元素进行自动化操作,以模拟实际终端用户的行为并验证软件功能的正确性。

GUI自动化测试主要有两大方向:

传统web浏览器的GUI自动化测试:主流方案是selenium
移动端的GUI自动化测试:主流方案是Appium,app+selenium
先来了解一下selenium和appium的工作原理。

作为TE的你肯定知道,selenium1.0和2.0的技术是截然不同的。前者的核心是Selenium RC,而后者的核心是webDriver。鉴于目前的2.0和3.0(和2.0本质是一样的)是主流,这里只介绍selenium 2.0的工作原理。

Selenium 2.0是典型的client-server模型,client端即测试用例,sever端即远程服务器,其执行流程如下:

了解原理之后,剩下的工作就只剩下用代码实现测试用例了。当然这里面的关键就是,如何识别页面元素(有人需要的话,专门开一篇来介绍)。

正确识别了页面元素,代码就是验证业务流程。这部分本身属于开发工作,和开发写代码一样,需要有代码规范、分层设计、封装(模块的封装、页面对象的封装等)。

五. 常见面试题

  1. 如何定位页面元素
  2. APP测试和web测试有什么区别?
  3. 接口自动化是如何做的?
  4. GUI自动化测试的原理及步骤
  5. GUI自动化测试中,如何保证测试用例的稳定性?

六. 思考和总结

本文介绍了自动化的概念及为什么要做自动化,做自动化测试需要做的准备工作:测试数据及测试环境,最后简单介绍了代码级别的自动化测试技术。

从广义上说,自动化技术不仅仅包含代码实现的测试用例,还应包含代码实现的自动化工具。

关于代码级别的自动化测试技术,以后有了时间再来更新细节~

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

npm ERR! network This is a problem related to network connectivity.

问题详细描述 PS D:\ALearnBlog\shiyi-blog\blog-web> npm install -g vue/cli npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/vue%2fcli failed, reason: connect ETIMEDOUT 104.1…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统&#xff08;ubuntu 22.04 win11&#xff09;&#xff0c;默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN)&#xff0c;方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制&#xff0c;远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

css2背景

css2背景 一.背景颜色二.背景图片三.背景平铺四.背景图片位置五.背景图像固定六.复合型写法七.背景颜色半透明八.总结 一.背景颜色 默认是transparent(透明&#xff09; 二.背景图片 默认是none 三.背景平铺 默认是background-repeat(平铺&#xff09; 四.背景图片位置…

OK-Robot机器人实现零样本算法 可在非结构化环境下完成拾取与放置任务

纽约大学的机器人专家团队与Meta人工智能学院研发人员共同合作开发了一种新型机器人&#xff0c;该机器人具备在非结构化环境下的认知能力&#xff0c;可在陌生房间利用视觉语言模型&#xff08;VLMs&#xff09;&#xff0c;进行物品的抓取与放置。在论文当中&#xff0c;该团…

在线黑色响应式全屏滚动主页html源码

html5黑色大气的个人博客全屏滚动个人主页源码 右键记事本即可修改 直接上传服务器空间就可使用

如何从 0 开始学 Python 自动化测试开发

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

2.18通过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试

应用程序&#xff1a; #include<stdlib.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<unistd.h> #include<string.h> #include<sys/ioctl.h> #include"myled.h&quo…

阿里云香港轻量应用服务器是什么线路?cn2?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

递归算法与分治思想

递归算法 直接或间接的调用自身的算法称为递归函数,采用栈结构,先调用的最后返回。 主要形式就是先纵后横,一个分支走到底,再退回一个到兄弟节点,依次回退。 列出递归的三种形式:切蛋糕、递推公式、等价转换。 递归要素: 明确递归得到结果是什么提取重复的逻辑,缩小…

数据库第五次实验

目录 1 创建数据表 2 创建多个用户 ​​​​​​​3 用户的授权 ​​​​​​​4 用户权限的回收 ​​​​​​​5 角色的创建与授权 ​​​​​​​6 回收角色的权利 ​​​​​​​7 审计的设置 1 创建数据表 SQL语句&#xff1a; use experimentfive; create table…

2024年开工,煮熟的鸭子飞了咋办

去年是我居家创业的第一个年头&#xff0c;业绩总体来说不及预期&#xff08;上班的收入&#xff09;&#xff0c;仅仅满足日常开支&#xff0c;没有任何的盈余。 去年有点项目没完成收尾&#xff0c;所以初四我就选择开工了&#xff0c;就图一个大吉大利。年前积压的客户需求…

【uCore 操作系统】1. 应用程序与基本执行环境

文章目录 【 1. 代码框架简述 】1.1 OS 是怎么跑起来的&#xff1f;1.1.1 qemu 的作用1.1.2 rustsbi.bin 的作用 1.2 qemu 是怎么跑起来的&#xff1f;1.3 OS 文件夹1.3.1 kernel.ld1.3.2 entry.S1.3.3 main.c1.3.4 sbi.c 1.4 bootloader 文件夹 【 2. makefile 和 qemu 】2.1 …

【SpringBoot】项目启动增加自定义Banner

SpringBoot项目启动增加自定义Banner 前言 最近有个老哥推荐我给博客启动的时候加上自定义Banner&#xff0c;开始我还不太明白他说的是那部分&#xff0c;后面给我发了这样一个&#xff0c;瞬间就懂了~ // _ooOoo_ …

C++入门篇——命名空间

在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存 在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c; 以避免命名冲突或名字污染&#xff0c;namespace关键…

数字经济政策 | ZF工作报告-60个文本词频

根据各省政府工作报告&#xff0c;参考金灿阳(2022)和陶长琪(2022)&#xff0c;借助Python软件&#xff0c;统计数字经济相关的关键词词频&#xff0c;分别记为数字经济政策词频A、数字经济政策词频B A文献参考 B文献参考 年度趋势 一、数据介绍 数据名称&#xff1a; 政府工…

Spring Boot java -jar --spring.profiles.active=dev 失效问题

之前动态部署修改配置文件的情况不多&#xff0c;所以也没注意过&#xff0c;这个问题今天困扰了好久&#xff0c;经过多方查询后得到了解决办法 直接上代码 <profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profi…

债券专题二:可转债估值-二叉树模型

1. 模型背景 由于可转债自身的属性较多&#xff0c;因此对其定价的难度也会加大&#xff0c;在诸多影响因素中&#xff0c;未来的股价占比最高。由于股价的不可预测性&#xff0c;导致了可转债的定价在实际交易中作用非常有限。随着可转债发行数量和规模的增大&#xff0c;越…

2.18 C++ day6

思维导图 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲…

C++初阶(十三) 模板

一、非类型模板参数 模板参数分类类型形参与非类型形参。类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

基于微信小程序的健身房私教预约系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…