自动化测试的优缺点
自动化测试的优势
能够极大地提升测试的效率,测试人员可以迅速地在指定平台部署测试脚本且对相应功能进行测试。
“弱化”了软件测试人员个体差异对测试结果的影响。
提高整个测试团队的技能水平。
自动化测试的缺陷
自动化测试的缺陷在于:总是按照既定的流程往下走,不能像人一样随机应变。一旦功能发生变动,就需要重新维护测试脚本。
自动化脚本的关键
要开发一套高质量的测试脚本,并不是简单的录制/回放,而是需要满足以下特点:
能够有效发现产品缺陷
有良好的可读性和错误日志,能够方便测试人员快速定位问题所在
能够稳定、重复、独立地运行,经过严格的审查流程
经过充分的脚本验收流程
在开发测试脚本的时候,需要时刻记得脚本的目的是暴露问题,任何在运行脚本时抛出的异常都有可能是产品问题产生的,因此需要避免在代码中隐藏问题。
一个好的自动化脚本的开发人员首先必须是一个好的测试人员,只有对需要测试的产品非常熟悉,才能够开发出真正有效的测试脚本。
如何提高测试脚本的可维护性?这就要求脚本有详细的错误日志和可读性。
如何提高测试脚本的稳定性?这就要求测试脚本能够具备运行独立性和可重复性。
当一个脚本运行失败后,可能的原因有如下几个方面:
由于产品本身的缺陷导致脚本执行失败
由于测试脚本本身存在的缺陷导致误报
由于测试环境搭建产生的问题导致失败
不幸的是,在一个项目中,真正由于产品缺陷导致的脚本执行失败所占的比率并不高,测试人员往往花费大量的时间去解决脚本缺陷和测试环境导致的失败。
因此,在开发测试脚本的时候,需要注意:
环境搭建和数据加载后,需要有明确验证步骤,如果数据加载失败,及时中断脚本运行且提示出错原因
对于每一个验证点,需要在日志里输出实际值和期望值,若验证失败,在日志里详细描述
尽量不要在程序里捕捉有可能出现的异常,应该将异常暴露给用户,使测试人员能够清楚地知道异常产生的位置
如何有效提高脚本的可读性?
通用的代码编程规范
充分利用测试代码中的注释
将测试描述和测试代码分离
如果没有保证测试用例执行的独立性,就可能产生如下问题:
由于所有用例之间的关系紧密,某一个用例执行失败导致了后续一系列用例的执行失败
增加了测试人员解决脚本问题的难度,用例失败,测试人员难快速定位问题原因
测试人员无法从中选取部分测试用例单独运行
自动化测试框架
一个设计良好的自动化测试框架,能够很方便地帮助测试人员开发高质量的自动化测试用例。
在开发一个自动化框架之前,首先需要考虑该框架需要满足什么样的要求。
一套自动化脚本的运行周期中主要完成了以下工作:
测试环境配置
执行待测试的用例
测试结果的记录
测试环境清除
测试报告生成
这些过程也构成了设计一个自动化框架的最原始的功能需求。
一个设计良好的自动化测试框架应该具备:
提高测试用例脚本开发效率--如何能够方便测试人员开发测试用例,能够做到数据和执行过程分离
具有完善的环境搭建的支持--让测试人员更加关注测试业务逻辑部分代码的开发
具有完善的测试结果汇报功能--让测试人员更好地测试业务逻辑
我们需要将环境准备的工作在测试自动化框架的层面进行实现,具体来说,需要实现以下功能:
测试环境的搭建和测试数据的清除
测试用例脚本的执行调用
执行结果报告的生成
在设计这样的自动化测试执行引擎时,首先需要考虑的是平台无关性。
制定自动化开发时间点时需要考虑的因素
不要在产品不稳定的时候开发自动化:初期缺陷较多,手动测试也可以熟悉产品,发现原有测试计划的不足和覆盖率缺失问题。
将测试脚本用于回归测试中:功能相对稳定,且计划也得到了较好的优化。
首先开发通用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&#…...
算法进阶-搜索
算法进阶-搜索 题目描述:给定一张N个点M条边的有向无环图,分别统计从每个点除法能够到达的点的数量 **数据规模:**1 < n < 3e4 **分析:**这里我们可以使用拓扑排序根据入边对所有点进行排序,排序后我们按照逆序&…...
时空智友企业流程化管控系统 sessionid泄露漏洞 复现
文章目录 时空智友企业流程化管控系统 sessionid泄露漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 时空智友企业流程化管控系统 sessionid泄露漏洞 复现 0x01 前言 免责声明:请勿利用文章内的相关技术从…...
QT编程,QMainWindow、事件
目录 1、QMainWindow 2、事件 1、QMainWindow QMenuBar:菜单栏 QMenu: 菜单 QAction: 动作 QToolBar: 工具栏 QStatusBar: 状态栏 setWindowTitle("主窗口"); //: 前缀 文件名 setWindowIcon(QIcon(":/mw_images/10.png")); resize(640, 4…...
人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用
大家好,我是微学AI ,今天给大家介绍一下人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用,随着人工智能(AI)和深度学习技术的发展,大模型已经开始渗透到各个领域,包括数学教育。本文将详细介绍基于大模型在数学…...
C++学习day5
目录 作业: 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部分使用方法,如在表格中插入或删除一行数据以及清空表格数据等。在添加数据时,设置了条件判断如正则表达式,若用户输入的数据不合法,则添加失败并提示用户错误的地方,便于用户修…...
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邮箱账号 写在前面: 要注意,注册Google邮箱必须要确保自己能够 科学上网,如果暂时做不到,请先进行相关学习。使用的手机号是大陆(86)的。 在保证自己能够科学上网后,在浏…...
docker版jxTMS使用指南:数据采集系统的高可用性
本文讲解4.6版jxTMS中数据采集系统的高可用性,整个系列的文章请查看:4.6版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4.2版jxTMS的说明ÿ…...
vue如何禁止通过页面输入路径跳转页面
要禁止通过页面输入路径跳转页面,你可以使用Vue Router的导航守卫(navigation guards)来拦截导航并阻止不希望的跳转。 下面是一种常见的方法,你可以在全局导航守卫(global navigation guards)中实现这个功…...
mac,linux环境的基础工具安装【jdk,tomcat】
安装 一 linux环境一)、JDK安装卸载: 二)、 tomcat 安装1、[下载](https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.63/bin/apache-tomcat-8.5.63.tar.gz)后,在目录 /usr/local/tomcat下,解压缩2、配置tomca…...
chrome窗口
chrome 窗口的层次: 父窗口类名:Chrome_WidgetWin_1 有两个子窗口: Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…...
某快递公司Java一面
1.平衡二叉树和红黑树的区别? 平衡二叉树是一种二叉搜索树,其左子树和右子树的高度差不超过1,以确保在最坏情况下的查找效率是O(log n)。而红黑树是一种自平衡二叉搜索树,通过引入颜色标记(红色和黑色)来维…...
【C++ Primer Plus学习记录】指针——声明和初始化指针
指针用于存储值的地址,因此,指针名表示的地址。*运算符被称为间接值或解除引用运算符,将其应用于指针,可以得到该地址处存储的值。 例如,假设manly是一个指针,则manly表示的是一个地址,而*manl…...
切换至root用户时,命令提示符颜色为白色,如何修改?
当我切换至root用户时,发现命令提示符里的内容全部为白色,如图所示: 这让人看着不愉快,上网先搜索下解决方案:【切换到 root 账户字体全是白的,怎么改颜色啊】- 百度贴吧,但是这个解决方案只是…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...
