当前位置: 首页 > news >正文

自动化测试的优缺点

自动化测试的优势

能够极大地提升测试的效率,测试人员可以迅速地在指定平台部署测试脚本且对相应功能进行测试。

“弱化”了软件测试人员个体差异对测试结果的影响。

提高整个测试团队的技能水平。

自动化测试的缺陷

自动化测试的缺陷在于:总是按照既定的流程往下走,不能像人一样随机应变。一旦功能发生变动,就需要重新维护测试脚本。

自动化脚本的关键

要开发一套高质量的测试脚本,并不是简单的录制/回放,而是需要满足以下特点:

  能够有效发现产品缺陷
  有良好的可读性和错误日志,能够方便测试人员快速定位问题所在
  能够稳定、重复、独立地运行,经过严格的审查流程
  经过充分的脚本验收流程

在开发测试脚本的时候,需要时刻记得脚本的目的是暴露问题,任何在运行脚本时抛出的异常都有可能是产品问题产生的,因此需要避免在代码中隐藏问题。

一个好的自动化脚本的开发人员首先必须是一个好的测试人员,只有对需要测试的产品非常熟悉,才能够开发出真正有效的测试脚本。

如何提高测试脚本的可维护性?这就要求脚本有详细的错误日志和可读性。

如何提高测试脚本的稳定性?这就要求测试脚本能够具备运行独立性和可重复性。

当一个脚本运行失败后,可能的原因有如下几个方面:

  由于产品本身的缺陷导致脚本执行失败
  由于测试脚本本身存在的缺陷导致误报
  由于测试环境搭建产生的问题导致失败

不幸的是,在一个项目中,真正由于产品缺陷导致的脚本执行失败所占的比率并不高,测试人员往往花费大量的时间去解决脚本缺陷和测试环境导致的失败。

因此,在开发测试脚本的时候,需要注意:

  环境搭建和数据加载后,需要有明确验证步骤,如果数据加载失败,及时中断脚本运行且提示出错原因
  对于每一个验证点,需要在日志里输出实际值和期望值,若验证失败,在日志里详细描述
  尽量不要在程序里捕捉有可能出现的异常,应该将异常暴露给用户,使测试人员能够清楚地知道异常产生的位置

如何有效提高脚本的可读性?

  通用的代码编程规范
  充分利用测试代码中的注释
  将测试描述和测试代码分离

如果没有保证测试用例执行的独立性,就可能产生如下问题:

  由于所有用例之间的关系紧密,某一个用例执行失败导致了后续一系列用例的执行失败
  增加了测试人员解决脚本问题的难度,用例失败,测试人员难快速定位问题原因
  测试人员无法从中选取部分测试用例单独运行

自动化测试框架

一个设计良好的自动化测试框架,能够很方便地帮助测试人员开发高质量的自动化测试用例。

在开发一个自动化框架之前,首先需要考虑该框架需要满足什么样的要求。

一套自动化脚本的运行周期中主要完成了以下工作:

  测试环境配置
  执行待测试的用例
  测试结果的记录
  测试环境清除
  测试报告生成

这些过程也构成了设计一个自动化框架的最原始的功能需求。

一个设计良好的自动化测试框架应该具备:

  提高测试用例脚本开发效率--如何能够方便测试人员开发测试用例,能够做到数据和执行过程分离
  具有完善的环境搭建的支持--让测试人员更加关注测试业务逻辑部分代码的开发
  具有完善的测试结果汇报功能--让测试人员更好地测试业务逻辑

我们需要将环境准备的工作在测试自动化框架的层面进行实现,具体来说,需要实现以下功能:

  测试环境的搭建和测试数据的清除
  测试用例脚本的执行调用
  执行结果报告的生成

在设计这样的自动化测试执行引擎时,首先需要考虑的是平台无关性。

制定自动化开发时间点时需要考虑的因素

不要在产品不稳定的时候开发自动化:初期缺陷较多,手动测试也可以熟悉产品,发现原有测试计划的不足和覆盖率缺失问题。

将测试脚本用于回归测试中:功能相对稳定,且计划也得到了较好的优化。

首先开发通用task:前期重点

测试自动化脚本应该基于一个相对稳定的测试环境下,且依照成熟的测试计划进行开发。如果初期开发大量自动化脚本,往往会导致后期大量的脚本返工量,反而降低了效率。

自动化测试的选取

自动化测试分为UI测试和API测试两大类,API测试属于更高层的测试方式,和单元测试相比,它更贴近用户的操作。

GUI测试往往采用录制/回放的方法,最大程度模拟用户操作,站在用户的角度去发现问题,和最终用户的行为联系紧密。但往往比预期要困难,因为UI设计变更会增加自动化测试复杂度,因此,GUI测试适用于当UI界面趋向于稳定的时候。

API测试通过直接调用软件产品的外部接口来验证返回是否符合预期,但无法覆盖到界面UI的显示正确性。API接口往往不会有频繁的变化,能够减少后期测试脚本维护的工作量。

根据产品特点,可以采取不同方式去实施API测试,既可以直接调用产品暴露的API,也可以通过模拟用户的HTTP请求来调用服务器端的Service。

测试脚本的验收

当完成脚本开发之后,为了保证脚本的高质量交付,需要制定高效的脚本评审流程和验收流程。

产品代码清晰描述了某个功能点,能够通过直观的检查确定功能是否完成。
自动化脚本明确描述了测试流程、需要检查的功能点,以及期望结果。

一套能够永远毫无差错运行的脚本不一定是高质量的脚本,因为这也有可能是由于脚本没有发现产品的问题。

自动化脚本评审分成代码评审和功能点评审两大方面。

代码评审:

  代码是否符合代码规范
  代码的扩展性如何
  阅读代码是否能清楚知道每个测试用例的测试步骤
  是否能很好地暴露脚本运行时发现的问题

功能点评审:

  关注代码是否涵盖了所有的功能验证点,测试步骤和验证点是否和测试计划保持一致

测试脚本的验收就是为了确保脚本的用户能够顺利地运行这套脚本。

如果说评审是为了保证代码的质量和功能点的涵盖,验收流程确保了自动化脚本的运行稳定性和可重复性。

自动化脚本验收:

  应当由非脚本开发者且具备中等技能的测试人员实施
  支持跨平台的产品应覆盖到不同平台
  不仅仅关注脚本的运行是否顺利,也要关注日志是否详细,是否有助于定位问题
  验收中发现的任何问题应该由脚本开发者负责解决

自动化测试的稳定性

测试自动化脚本的稳定性直接决定了测试的效率。

影响自动化测试脚本的稳定性因素:

  脚本中对某些输入参数的硬编码:这是影响脚本稳定性最重要的因素。
  脚本等待时间硬编码:在开发脚本时机路的等待时间未必就是将来测试环境中的运行时间
  跨平台问题:不同的操作系统或者数据库可能存在不同,因此必须在多个平台上进行测试。

如何权衡手动测试和自动化脚本开发的关系

对于比较稳定的测试项目,可以考虑在编写测试计划的时候同步编写脚本,测试计划的作者同时也是测试脚本的开发者,这将极大提高自动化开发的效率,但前提是每一个测试人员都具有自动化脚本开发的能力。

环境搭建和数据准备工作不会有频繁的变更,可以考虑在项目初期先完成这部分的自动化工作。

把握测试自动化的度。

用公式平谷自动化脚本开发的必要性

脚本开发执行成本=脚本开发工作量+(平均调试脚本工作量+平均执行脚本工作量)*每产品周期执行次数

手工执行成本=平均手工执行工作量*每产品周期执行次数

ROI=脚本开发执行成本/手工执行成本

如果这个ROI比例在5以内,则说明需要用5倍的工作量去开发自动化脚本。换句话说,这套脚本如果未来执行了5次,我们就把成本赚回来了,以后每运行一次,我们就能盈利一次。而如果某功能点的手动测试需要半天时间,而我们需要花费1个多月的时间去开发自动化脚本,这个比例就在60以上了,也就是说以后要运行60次以上才能收回成本。

B站最完整Python接口自动化测试进阶教程合集!真实模拟企业项目实战,看完这套就够了

相关文章:

自动化测试的优缺点

自动化测试的优势 能够极大地提升测试的效率,测试人员可以迅速地在指定平台部署测试脚本且对相应功能进行测试。 “弱化”了软件测试人员个体差异对测试结果的影响。 提高整个测试团队的技能水平。 自动化测试的缺陷 自动化测试的缺陷在于:总是按照…...

深度学习基础知识 Dataset 与 DataLoade的用法解析

深度学习基础知识 Dataset 与 DataLoade的用法解析 1、Dataset2、DataLoader参数设置:1、pin_memory2、num_workers3、collate_fn分类任务目标检测任务 1、Dataset 代码: import torch from torch.utils import dataclass MyDataset(torch.utils.data.D…...

【ElasticSearch】深入探索 DSL 查询语法,实现对文档不同程度的检索,以及对搜索结果的排序、分页和高亮操作

文章目录 前言一、Elasticsearch DSL Query 的分类二、全文检索查询2.1 match 查询2.2 multi_match 查询 三、精确查询3.1 term 查询3.2 range 查询 四、地理坐标查询4.1 geo_bounding_box 查询4.2 geo_distance 查询 五、复合查询5.1 function score 查询5.2 boolean 查询 六、…...

使用wireshark解密ipsec ISAKMP包

Ipsec首先要通过ikev2协议来协商自己后续协商所用的加解密key以及用户数据的esp包用的加解密包。 ISAKMP就是加密过的ike-v2的加密包,有时候我们需要解密这个包来查看协商数据。如何来解密这样的包? 首先导出strongswan协商生成的各种key. 要能导出这些key&#…...

算法进阶-搜索

算法进阶-搜索 题目描述&#xff1a;给定一张N个点M条边的有向无环图&#xff0c;分别统计从每个点除法能够到达的点的数量 **数据规模&#xff1a;**1 < n < 3e4 **分析&#xff1a;**这里我们可以使用拓扑排序根据入边对所有点进行排序&#xff0c;排序后我们按照逆序&…...

时空智友企业流程化管控系统 sessionid泄露漏洞 复现

文章目录 时空智友企业流程化管控系统 sessionid泄露漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 时空智友企业流程化管控系统 sessionid泄露漏洞 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从…...

QT编程,QMainWindow、事件

目录 1、QMainWindow 2、事件 1、QMainWindow QMenuBar&#xff1a;菜单栏 QMenu: 菜单 QAction: 动作 QToolBar: 工具栏 QStatusBar: 状态栏 setWindowTitle("主窗口"); //: 前缀 文件名 setWindowIcon(QIcon(":/mw_images/10.png")); resize(640, 4…...

人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用

大家好&#xff0c;我是微学AI ,今天给大家介绍一下人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用&#xff0c;随着人工智能(AI)和深度学习技术的发展&#xff0c;大模型已经开始渗透到各个领域&#xff0c;包括数学教育。本文将详细介绍基于大模型在数学…...

C++学习day5

目录 作业&#xff1a; 1> 思维导图 2> 多继承代码实现沙发床 1>思维导图 2> 多继承代码实现沙发床 #include <iostream>using namespace std; //创建沙发类 class sofa { private:string sitting; public:sofa(){cout << "sofa的无参构造函数…...

1.软件开发-HTML结构-元素剖析

元素的嵌套 代码注释 ctrl/ URL url 统一资源定位符 一个给定的独特资源在web上的地址 URI...

QTableWidget 表格增删数据

QTableWidgetQTableWidgetQTableWidget部分使用方法&#xff0c;如在表格中插入或删除一行数据以及清空表格数据等。在添加数据时&#xff0c;设置了条件判断如正则表达式&#xff0c;若用户输入的数据不合法&#xff0c;则添加失败并提示用户错误的地方&#xff0c;便于用户修…...

Tableau:商业智能(BI)工具

Tableau入门 1、Tableau概述2、Tableau Desktop2.1、初识Tableau Desktop2.2、Tableau工作区2.3、数据窗格与分析窗格2.4、功能区和标记卡2.4.1、列和行功能区2.4.2、标记卡2.4.3、筛选器功能区2.4.4、页面功能区2.4.5、附加功能区、图例、控件 3、Tableau视图4、Tableau工作簿…...

【gmail注册教程】手把手教你注册Google邮箱账号

手把手教你注册Google邮箱账号 写在前面&#xff1a; 要注意&#xff0c;注册Google邮箱必须要确保自己能够 科学上网&#xff0c;如果暂时做不到&#xff0c;请先进行相关学习。使用的手机号是大陆&#xff08;86&#xff09;的。 在保证自己能够科学上网后&#xff0c;在浏…...

docker版jxTMS使用指南:数据采集系统的高可用性

本文讲解4.6版jxTMS中数据采集系统的高可用性&#xff0c;整个系列的文章请查看&#xff1a;4.6版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版升级内容 4.2版jxTMS的说明&#xff…...

vue如何禁止通过页面输入路径跳转页面

要禁止通过页面输入路径跳转页面&#xff0c;你可以使用Vue Router的导航守卫&#xff08;navigation guards&#xff09;来拦截导航并阻止不希望的跳转。 下面是一种常见的方法&#xff0c;你可以在全局导航守卫&#xff08;global navigation guards&#xff09;中实现这个功…...

mac,linux环境的基础工具安装【jdk,tomcat】

安装 一 linux环境一&#xff09;、JDK安装卸载&#xff1a; 二&#xff09;、 tomcat 安装1、[下载](https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.63/bin/apache-tomcat-8.5.63.tar.gz)后&#xff0c;在目录 /usr/local/tomcat下&#xff0c;解压缩2、配置tomca…...

chrome窗口

chrome 窗口的层次&#xff1a; 父窗口类名&#xff1a;Chrome_WidgetWin_1 有两个子窗口&#xff1a; Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…...

某快递公司Java一面

1.平衡二叉树和红黑树的区别&#xff1f; 平衡二叉树是一种二叉搜索树&#xff0c;其左子树和右子树的高度差不超过1&#xff0c;以确保在最坏情况下的查找效率是O(log n)。而红黑树是一种自平衡二叉搜索树&#xff0c;通过引入颜色标记&#xff08;红色和黑色&#xff09;来维…...

【C++ Primer Plus学习记录】指针——声明和初始化指针

指针用于存储值的地址&#xff0c;因此&#xff0c;指针名表示的地址。*运算符被称为间接值或解除引用运算符&#xff0c;将其应用于指针&#xff0c;可以得到该地址处存储的值。 例如&#xff0c;假设manly是一个指针&#xff0c;则manly表示的是一个地址&#xff0c;而*manl…...

切换至root用户时,命令提示符颜色为白色,如何修改?

当我切换至root用户时&#xff0c;发现命令提示符里的内容全部为白色&#xff0c;如图所示&#xff1a; 这让人看着不愉快&#xff0c;上网先搜索下解决方案&#xff1a;【切换到 root 账户字体全是白的&#xff0c;怎么改颜色啊】- 百度贴吧&#xff0c;但是这个解决方案只是…...

设计模式——17. 状态模式

1. 说明 状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态发生改变时改变其行为。状态模式将对象的状态封装成不同的状态对象,并将状态切换时的行为委托给当前状态对象。这样,对象在不同状态下具有不同的行为,而无需在对象本身中使用大量的条件语…...

系统架构设计:14 论软基于架构的软件设计方法(ABSD)的软件开发

目录 1 基于架构的软件设计(ABSD) 2 基于架构的软件开发过程 2.1 架构需求过程 2.2 架构设计过程</...

如何在 Spring Boot 中进行文件上传

在 Spring Boot 中进行文件上传 文件上传是Web应用程序中常见的功能之一&#xff0c;它允许用户将文件从客户端上传到服务器。Spring Boot提供了便捷的方式来处理文件上传&#xff0c;并且整合了Spring框架的强大功能&#xff0c;使文件上传变得相对简单。本文将介绍如何在Spr…...

Python 图形化界面基础篇:将应用程序打包为可执行文件

Python 图形化界面基础篇&#xff1a;将应用程序打包为可执行文件 引言 PyInstaller 简介步骤1&#xff1a;安装 PyInstaller 步骤2&#xff1a;创建 Python GUI 应用程序步骤3&#xff1a;使用 PyInstaller 打包应用程序 完整示例代码解释结论 引言 在开发完一个图形用户界面…...

Android 13.0 蓝牙遥控器确认键弹不出输入法的解决方法

1.概述 在android13.0设备定制化开发时,遥控器是使用红外遥控器,也有使用蓝牙遥控器的,所以出现的问题不一定相同,今天遇到个问题就是蓝牙遥控器在输入数据时弹不出输入法的问题 首选排除输入法的问题,安装其他的输入法,也是同样的问题,这样就确定是系统EditText控件相关…...

spring boot面试50问

目录 前言&#xff1a; 1. 什么是 Spring Boot&#xff1f; 2. 为什么要用SpringBoot&#xff1f; 3. SpringBoot与SpringCloud 区别&#xff1f; 4. Spring Boot 有哪些优点&#xff1f; 5. Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1…...

条例24~25(设计与声明)

条例24 若所有参数皆需要类型转换&#xff0c;请为此采用非成员函数 有时候让类型内成员函数支持隐式类型转换是不妥善的。比如当我们想在类内实现operator *&#xff08;&#xff09; 模拟乘法的时候。通常情况下表现良好&#xff0c;但若你想额外实现混合式运算。例如 int…...

Spring5应用之事务处理

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言事务…...

Python 中最常用的4种股票价格移动平均方法(三)

一、简介 移动平均线是各级交易者和投资者最广泛使用的技术指标之一。它们通过计算特定时期内的平均价格来帮助消除股票价格的固有波动性。移动平均线计算起来很简单,但也有更复杂的形式,旨在捕捉市场的更多细微差别。 这个由四部分组成的系列将讨论总共 4 种不同的移动平均方…...

Mybaits缓存踩的坑

记Mybaits缓存踩的坑 1.问题提出 最近开发一个记录操作前后修改内容的功能&#xff0c;获取修改前数据比较简单&#xff0c;直接从数据库获取&#xff0c;记录修改后的功能也比较简单&#xff0c;直接将用户修改的内容封装成po对象&#xff0c;然后两个比对就可以了&#xff…...