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

前面介绍了功能测试和接口测试,在介绍接口测试时提到了实现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自动化测试中,如何保证测试用例的稳定性?

六. 思考和总结

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

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

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

 

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

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

软件测试面试文档

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

 

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

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

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

相关文章

以太网帧格式解析

以太网的正式标准是IEEE802.3&#xff0c;它规定了以太网传输的帧结构。 以太网帧格式如下图所示&#xff1a; 以太网传输数据时&#xff0c;是按照上图的格式&#xff0c;自左到右依次传输的。需要注意的是前导码和SFD不属于以太网协议的内容&#xff0c;应该是属于物理层数据…

AI检索增强生成引擎-RAGFlow-深度理解知识文档,提取真知灼见

&#x1f4a1; RAGFlow 是什么&#xff1f; RAGFlow是一款基于深度文档理解构建的开源RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow个人可以为各种规模的企业及提供一套专业的RAG工作流程&#xff0c;结合针对用户群体的大语言模型&#xff08;LL…

我独自升级崛起怎么下载 一文分享我独自升级崛起游戏下载教程

我独自升级崛起怎么下载 一文分享我独自升级崛起游戏下载教程 我独自升级&#xff1a;崛起是一款由韩国漫画改编而成的热门多人网络在线联机游戏&#xff0c;这款游戏是一款的角色扮演类型游戏&#xff0c;游戏有着独一无二的剧情模式。小伙伴们在游戏中可以体验到独特的成长系…

Meta提出全新文档级嵌入框架,利用LLM来增强信息检索能力

近年来&#xff0c;基于嵌入式检索&#xff08;embedding-based search&#xff09;或密集检索&#xff08;dense retrieval&#xff09;相比传统的稀疏检索&#xff08;sparse retrieval&#xff09;或基于词袋&#xff08;bag of words&#xff09;的方法&#xff0c;已经展示…

王道C语言督学营OJ课后习题(课时20)

#include<stdio.h> int main() {printf("%3d%3d",0,13);return 0; }

图深度学习——2.图的理论知识

1.图 1.1 图的定义 图是由节点&#xff08;顶点&#xff09;和边构成的数学结构。图用于表示对象之间的关系&#xff0c;其中节点表示对象&#xff0c;边表示对象之间的关系。 一个图&#xff0c;记为 G <V, E> &#xff0c;它包括以下两个要素&#xff1a; 1.节点&am…

函数的内容

一&#xff0c;概念 封装一份可以被重复执行的代码块&#xff0c;让大量代码重复使用 二&#xff0c;函数使用 大体分两步&#xff1a;声明函数&#xff0c;调用函数 声明函数有关键字&#xff1a;function 函数名&#xff08;&#xff09;{ 函数体 } 为基本格式&#xf…

linux系统安全与应用【下】

目录 1.开关机安全控制 1.1GRUB限制 2.终端登录安全控制 2.1 限制root只在安全终端登录 2.2 禁止普通用户登录 3.弱口令检测 3.1 Joth the Ripper&#xff08;JR&#xff09; 4.网络端口扫描 4.1 nmap命令 1.开关机安全控制 1.1GRUB限制 通常情况下在系统开机进入GRU…

哈希表实现[很详细!]

目录 哈希表 定义节点类 根据hash码获取value 向hash表存入新key value,如果key重复,则更新value 根据hash码删除,返回删除的value 关于resize()一些问题的解答 冲突测试 MurmurHash 设计思考 练习 Leetcode01 Leetcode03 Leetcode49 Leetcode217 Leetcode136 L…

人工智能大模型培训老师叶梓 探索知识库问答中的查询图生成:处理多跳复杂问题的新方法

在人工智能领域&#xff0c;基于知识库的问答&#xff08;KBQA&#xff09;技术正变得越来越重要。它使得机器能够理解自然语言问题&#xff0c;并从结构化的知识库中检索答案。然而&#xff0c;面对多跳复杂问题&#xff0c;传统的KBQA方法往往力不从心。近期&#xff0c;研究…

账号安全基本措施1

一、系统账号清理 1.1 将用户设置为无法登录 useradd -s /sbin/nologin lisi shell类型设置为/sbin/nologin用户将无法使用bash或其他shell来登录系统。 1.2 锁定用户。passwd -l 用户名 正常情况下是可以送普通用户切换到其他普通用户的 当锁定密码后passwd -l lisi就用普…

第22天:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

第二十二天 一、PHP留言板前后端功能实现 开发环境&#xff1a; DW PHPStorm PhpStudy Navicat Premium DW : HTML&JS&CSS开发 PHPStorm : 专业PHP开发IDE PhpStudy &#xff1a;Apache MYSQL环境 Navicat Premium: 全能数据库管理工具 二、数据库创建&架…

【解决】echarts条形图纵坐标显示不全

先说结论&#xff1a; option:{...grid: {containLabel: true},... }这个属性是控制整体的坐标标签的。加上这个就可以显示完整了。然后再根据其他属性调整标签的字体、颜色之类的 yAxis : [{...axisLabel:{width:100,overflow:break,truncate:...,color:red,fontSize:10,},..…

JavaScript进阶部分知识总结

作用域 局部作用域 作用域规定了变量能够被访问的范围&#xff0c;离开了这个范围变量就不能被访问作用域分为&#xff1a;局部作用域和全局作用域 局部作用域分为函数作用域和块作用域 1.函数作用域&#xff1a; 在函数内部声明的变量只能在函数内部被访问&#xff0c;外…

AWD线下攻防万字最完整战术(记第一届“长城杯”半决赛战术)

目录 准备阶段 1.登录比赛平台&#xff08;获取资产&#xff09; 查看账号账号修改 服务器SSH口令mysqlWEB服务口令(后台密码)数据库后台管理员密码 账号用户检查 2.dump源码&#xff08;方便应急响应恢复靶机&#xff09; 网站源码备份 压缩文件解压文件备份到服务器本地上传…

这10款VS Code神仙插件,嵌入式程序员必备

大家好&#xff0c;我是知微&#xff01; 嵌入式软件开发工程师平时可能更多的是使用Source Insight、Keil、IAR来阅读代码&#xff0c;写代码。 VSCode大家都听说过&#xff0c;功能十分强大&#xff0c;而且免费&#xff01; 或许是因为这款软件上手有一定的学习成本&…

css:echarts渐变色转换为css渐变色

通过一个下拉框来选择渐变类型&#xff0c;为了简化&#xff0c;我设置了三种&#xff1a;水平方向的渐变、垂直方向的渐变和径向渐变用&#xff0c;表格来配置echarts渐变色的百分比位置和颜色。 config是表格里的数据格式如下&#xff1a; offset是百分比位置&#xff0c;co…

C语言项目实践——贪吃蛇

引言&#xff1a;本篇博客中&#xff0c;我将会使用结构体&#xff0c;链表&#xff0c;WIN32 API等一系列知识完成C语言项目——贪吃蛇的实现。在观看此篇博客之前&#xff0c;请将这些知识所熟悉&#xff0c;不然可能会造成理解困难。 更多有关C语言的知识详解可前往个人主页…

[C++][算法基础]求组合数(IV)

输入 &#x1d44e;,&#x1d44f;&#xff0c;求 的值。 注意结果可能很大&#xff0c;需要使用高精度计算。 输入格式 共一行&#xff0c;包含两个整数 &#x1d44e; 和 &#x1d44f;。 输出格式 共一行&#xff0c;输出 的值。 数据范围 1≤b≤a≤5000 输入样例…

一线实战:国产数据库Mogdb双网卡同步最佳实践

前言 大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时&#xff0c;我们都会对网卡做冗余考虑&#xff0c;使用双网卡&#xff0c;比如public、心跳网络。这样的目的主要是为了安全&#xff0c;避免单点故障。当然双网卡Bond不仅是可以做主备还可以支持负载均…