MeterSphere技术分享:UI自动化测试的必要性与解决方案

news2024/11/14 13:27:22

UI自动化测试体系的建设价值遵循测试金字塔模型,该模型建议测试人员在不同层次上编写和执行测试。UI测试需要编写和设计测试脚本、执行完整的应用程序,并模拟用户与应用程序交互,因此UI测试的测试速度相对较慢。但是UI测试的业务覆盖很高,通过模拟真实场景下的用户行为,详细测量UI组件的功能性和稳定性,可以有效消除人工测试所面临的大量重复性测试问题。

2022年4月,MeterSphere开源项目组所进行的UI自动化测试社区调研显示,在219份受访表单中,有82.19%的受访者表示所在的团队正在建设Web端UI自动化测试系统。

▲图1 测试金字塔模型

■ 测试金字塔的底层是单元测试。单元测试是对代码中小段逻辑的测试,这些小段逻辑可以是函数、类或类中的方法。通过编写单元测试,开发人员可以直接调用被测试的代码,以评估其输出是否符合预期,无需依赖其他组件、服务或UI。

■ 测试金字塔的中间层是接口测试或者集成测试。接口测试主要测试应用程序接口(API),关注不同模块之间的接口是否有效、传递的信息是否正确、是否符合接口标准等;集成测试的主要目标是测试整个系统是否可以协同工作。

■ 测试金字塔的顶层是UI测试。UI测试从最直观的角度进行测试,除了人工去执行,也可以完全依靠自动化。UI测试能够模拟每个用户与应用交互的动作,例如点击按钮、输入信息、填写表单等,通过运行应用程序来查看是否符合预期效果。

由此可见,这三种测试类型涉及的范畴不同。单元测试主要用于在最基本的层面上发现逻辑错误。单元测试的速度比较快,运行时所需要的资源也比较少;接口测试或者集成测试,主要验证应用程序的服务和数据库之间的接口是否能够良好地协同工作,关注的是不同组件之间的交互;UI测试关注能否启动完整的应用程序。UI测试属于最全面的测试类型,因此在运行时往往会耗费最多的计算资源和时间。

一、UI自动化测试的必要性

UI自动化测试在软件测试领域中变得越来越重要,它的必要性体现在提高测试效率、降低成本、保证测试的准确性和一致性等方面,对于提高软件质量和开发效率具有重要作用。

1. 代替手工重复

传统的手工测试需要测试工程师花费大量时间执行重复的操作,不仅效率低下,还容易出错。通过使用UI自动化工具,测试工程师可以将重复的测试任务交由程序来完成,从而节省时间和精力,将更多的时间用在设计全面的测试用例和新功能的测试方面;

2. 提升回归效率

回归测试是在软件代码发生变化后执行的测试,以确保修改不会对现有功能产生负面影响。由于回归测试需要频繁地执行,手动执行回归测试会浪费大量的时间和人力资源。而UI自动化可以高效地执行回归测试,大幅降低人力成本,同时保证测试的准确性和全面性;

3. 利用非工作时间测试

在传统的手工测试中,测试工程师只能在工作时间内执行测试任务。而通过使用UI自动化测试工具,测试工程师可以在非工作时间安排测试任务的执行,从而更好地利用时间资源,将更多的工作时间用于分析失败用例和解决问题,提高测试质量;

4. 保证操作一致性,结果可溯源

在手工测试中,由于人为因素的存在,很容易出现操作步骤的遗漏或疏忽,导致测试结果的不准确。而通过使用UI自动化测试工具,可以确保每次测试执行的步骤和验证达到一致性和可重复性,避免了人为错误的发生。

二、UI自动化测试介入的时机

经常有人会问,什么样的项目才适合进行UI自动化测试呢?UI自动化测试相当于模拟手工测试,通过程序去操作页面上的控件。而在实际测试过程中,经常会遇到无法找到控件,或者因控件定义变更而带来的维护成本等问题。我们总结了一些适合UI自动化测试介入的时间节点或者场景:

1. 产品比较稳定,不会有频繁的需求变更;

2. 需要频繁做回归验证的核心业务、核心界面;

3. 选择稳定的业务流程,不建议选择处于探索期需要经常变更的业务模块;

4. 适合维护周期长的项目,不适合短期项目;

5. 如果使用编写代码实现的自动化测试工具,需要测试团队中大部分人员具备脚本开发能力。

三、UI自动化测试面临的两大核心问题

在UI自动化测试中,测试团队普遍面临着两大核心问题,即UI自动化的维护成本和学习成本。

■ 维护成本

UI自动化测试依赖于界面元素的定位和操作,对于界面变动敏感,一旦界面设计发生变化,测试脚本可能会失效。因此需要及时更新测试脚本,从而增加了UI自动化测试的维护成本;

■ 学习成本

UI自动化测试需要使用特定的测试框架和工具,很多工具的学习曲线比较陡峭,需要掌握相应的编程语言和工具的使用方法,以及测试设计技巧,增加了测试人员的学习成本。

四、如何提高UI自动化测试效率?

UI自动化测试需要模拟人工操作界面,这就意味着它需要花费相对较长的时间来完成任务。尤其是当测试用例数量庞大时,UI自动化测试的执行时间会更长。这是因为UI自动化测试的原理决定了它无法像接口自动化那样快速执行。提高UI自动化测试效率的主要路径包括:

1. 改进用例选择策略

针对核心业务和稳定业务的用例,可以先定义明确的优先级,确保这些用例首先被执行。对于未覆盖的用例,可以根据业务重要性和风险优先级进行选择,逐步扩大测试范围;

2. 简化用例编写

将重复的测试步骤抽象出来,利用变量和循环结构来实现,避免为每个不同的测试数据编写独立的测试流程。使用测试流程控制功能,通过条件判断来控制执行分支,避免执行不必要的流程,减少测试过程中的冗余操作;

3. 减少断言设置

使用断言的方式要尽量简洁高效,在前期设计用例时考虑断言的必要性,减少不必要的断言设置,降低与应用程序的通信频率,从而提高执行的速度;

4. 减少测试步骤截图

仅在必要的步骤进行截图,避免重复截取相同内容。减少截取大尺寸的图片文件,降低资源占用;

5. 合理设置测试等待时间

分析测试环境的特性,根据稳定性和响应速度设置等待时间。使用智能等待机制,等待UI元素加载完成后再进行操作,避免出现过长的等待时间;

6. 启用多线程方式

分析测试用例的依赖关系,将互相独立的用例放在不同线程中同时执行。有效利用系统资源,通过并行执行来提高整体速度;

7. 提高服务器配置

增加服务器的处理能力和内存容量,确保有足够的可用资源供UI自动化测试使用。使用负载均衡技术,将请求分发到多个服务器,提高整体执行速度和性能。

五、MeterSphere自然语言UI自动化测试

MeterSphere开源持续测试平台涵盖测试跟踪、接口测试、性能测试和UI测试等功能模块。MeterSphere的UI测试模块基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化测试。

1. 自然语言编写,低维护成本,低学习成本

① 低维护成本

无论任何一款测试工具,都无法做到维护成本为零。无论产品是ToB或者ToC的,都是要与客户进行交互的。因此产品的发版、界面的更新、特定节日的运营活动等,都会让产品发生变动。因此,一定的维护成本不可避免,但可以通过选择恰当的测试工具、培养良好的测试习惯等方式,有效降低UI自动化测试的维护成本。

MeterSphere开源持续测试平台的UI测试模块支持元素、指令、场景的自由组合以及自由引用。元素是最基础的组成部分,指令代表一些通用测试步骤的集合,场景通常是一个完整的业务流程。在MeterSphere平台上,元素可以引用在指令和场景中,同时指令和场景之间也可以相互引用。当产品界面发生变化后,界面元素也会随之发生改变,此时通过对元素进行更新,引用该元素的指令和场景都将自动更新元素信息,这样就可以减少过多的维护成本,工作量主要聚焦在对元素的维护即可。同样的,当业务流程发生变化,在已有的指令或场景上进行增删改编辑后,所有引用关系也会同步更新,通过灵活的引用设计,大幅度降低了后续测试的维护成本。

图2是基于MeterSphere页面对象模式编写的“抢购”UI自动化场景测试模型:

图片

▲图2 基于MeterSphere的“抢购”UI自动化场景测试模型

② 低学习成本

市面上有很多自动化测试框架,包括基于浏览器界面相关的、移动端应用相关的、桌面应用程序相关的框架等。当我们在选择时首先应该选择大众化的自动化测试框架,这样的框架经过了丰富的项目检验;其次应该选择由主流开发语言编写的测试框架,例如Java或Python,其框架不仅通用性强,在后续使用中遇到问题也更容易找到相关解决方案。

MeterSphere开源持续测试平台的UI测试模块全面兼容Selenium开源框架。UI测试脚本使用自然语言编排实现,将操作指令以可视化控件的形态进行封装,测试人员通过界面化的点选、拖拽等操作即可完成测试脚本,不必进行代码编写。

■ 传统编写代码实现

图片

▲图3 传统编写代码实现

■ MeterSphere自然语言编排实现

图片

▲图4 MeterSphere自然语言编排实现

2. 自然语言UI自动化测试对比编写代码实现的优势

自然语言编写的UI自动化测试相比传统编写代码实现的UI自动化测试,其优势体现在:

■ 更高的效率

自然语言UI自动化可以快速地创建测试用例,减少了手写代码的时间和出错率,提高了测试效率;

■ 更低的门槛

对于不熟悉编程语言的测试人员来说,使用自然语言的编写方式更容易上手,降低了学习和使用的门槛;

■ 更直观的操作

通过界面化的编排,测试人员可以更直观地了解测试用例中的操作流程,更容易发现和纠正错误;

■ 更易于维护

可视化的界面编排设计可以帮助测试人员轻松维护和更新测试用例。通过修改公用的测试元素来同步更新测试用例,快速响应应用程序和需求的变化。

相比之下,使用代码实现的方式需要测试人员掌握编程语言和框架的知识,编写代码时需要仔细考虑每个细节,相对容易出错。同时,代码实现的方式对于代码的维护和修改也相对困难一些,需要更深入地了解代码的逻辑和结构。因此在UI自动化测试方面,使用自然语言编排是更为高效和直观的方式。

总结:

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

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

软件测试面试文档

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

 

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

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

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

相关文章

【STL】stack,deque,queue 基础,应用与操作

stack 1.stack相关介绍 stack(栈) 栈是一种后进先出(LIFO, Last In First Out)的数据结构,意味着最后插入的数据最先被移除。C 中的栈是通过容器适配器实现的,底层默认使用 deque(双端队列&am…

数字电子技术-数值比较器

目录 数值比较器 1、1位二进制数值比较器 多位数值比较器 4位数值比较器74LS85(TTL型) 74LS85数值比较器的使用说明 数值比较器 Digital Comparator,又称数字比较器,用以对两个数字的大小或是否相等进行比较的逻辑电路。 1、1位二进制数值比较器 A和B只能取值…

硬盘数据恢复必备:4 款强大硬盘数据恢复软件推荐!

在数字化的时代,我们的生活和工作越来越离不开电脑,而硬盘作为重要的数据存储设备,一旦出现数据丢失的情况,往往会给我们带来极大的困扰。别担心,今天就为大家推荐四款强大的硬盘数据恢复软件,帮助你轻松找…

六西格玛绿带培训多少钱?从授“鱼”到授“渔”

六西格玛作为一种全球公认的质量管理方法,其影响力日益扩大,而六西格玛绿带培训作为这一体系中的关键环节,更是吸引了众多希望在职场上脱颖而出的专业人士。本文,深圳天行健企业管理咨询公司将从多个维度深入探讨“六西格玛绿带培…

巴菲特的长期投资策略:新投资者实现财务自由的启示

在投资界,沃伦巴菲特的名字几乎无人不晓。作为伯克希尔哈撒韦公司的董事长和首席执行官,巴菲特以其卓越的投资智慧和长期价值增长策略,成为了全球投资者的偶像。巴菲特的成功不仅仅是因为他的财富,更在于他对投资的深刻理解和对财…

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词: Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述: Linux 磁盘管理体系通过“挂载点”概念替代了 Windows 中的“分区”概念,将硬盘部分以文…

如何保养净水器

俗话说,“三分用,七分养”,这句话道出了家电这类消费品使用寿命的秘诀。家电的长久运行并不仅仅依赖于其出厂时的品质,更与我们日常的维护保养息息相关。虽然行业标准或制造商通常会规定家电的推荐使用年限,但在许多家…

【计算机网络】传输层协议UDP

目录 一、端口号1.1 端口号范围划分1.2 认识知名端口号 二、UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的缓冲区2.4 UDP使用注意事项2.5 基于UDP的应用层协议 一、端口号 传输层协议负责数据的传输,从发送端到接收端。端口号标识一个主机上进行通信的不同的应用…

Go语言的io输入输出流

Go语言的输入输出流不如其他语言那么直观,由于是通过实现接口方法的隐式继承所以比较抽象,今天具体介绍一下go语言的输入输出流。 go语言输入输出在io库中,使用Reader接口,如下: type Reader interface {Read(p []by…

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk,网址及官方说明文档如下: 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图: 下载完后就要编译了。 1.下载VS,我的开发环境是 visual studio 2019 2. 下载CMake&#xff…

UNRAID系统忘记密码解决办法

前言 unraid系统自己通过命令修改密码以后,怎么也进不去了。 这次带来如何重置密码 操作

1-2.Jetpack 之 Navigation 跳转编码模板

一、Navigation 1、Navigation 概述 Navigation 是 Jetpack 中的一个重要成员,它主要是结合导航图(Navigation Graph)来控制和简化 Fragment 之间的导航,即往哪里走,该怎么走 2、Navigate 引入 在模块级 build.gra…

《关节机械臂:智能仓库的高效助手》

关节机械臂作为一种高度精密的机器设备,在现代制造工厂的智能仓库系统中发挥着至关重要的作用。其设计初衷便是精准地模拟人类手臂在订单拣选操作中的各种运动,以实现高效、准确的物流作业。 这些多功能的机器人由多个关节巧妙组合而成,通常拥…

人工智能【AI】:未来的驱动力

在21世纪,人工智能(AI)已经成为推动技术进步和创新的关键力量。AI不仅仅是科幻小说中的概念,它已经渗透到我们日常生活的方方面面,从智能手机的语音助手到复杂的医疗诊断系统,AI的应用无处不在。 人工智能…

KG Structure as Prompt:利用知识图谱构建Prompt,提高大模型对因果关系的理解

KG Structure as Prompt:利用知识图谱构建Prompt,提高大模型对因果关系的理解 秒懂大纲提出背景解法拆解创意视角中文意译 论文:Knowledge Graph Structure as Prompt: Improving Small Language Models Capabilities for Knowledge-based Ca…

Mybatis框架映射---代码实现(XML配置以及注解形式)

目录 一. 映射关系 1 对 1-映射方式 1.通过xml文件实现映射的一对一关系 总结 : 2.通过注解的方式来实现下面的 1 对 1 的映射关系,实现级联查询 总结: 二. 映射关系多对一 1.通过xml文件实现映射的多对一关系 2.通过注解的方式来实现…

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式?如何使用PHP通过SMTP协议发信? PHP作为一种广泛使用的服务器端脚本语言,提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程:设置参数 这…

Qt 模型视图(一):概述

文章目录 Qt 模型视图(一):概述1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图(一):概述 ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会被自动…

PCIe扫盲(11)

系列文章目录 PCIe扫盲(一) PCIe扫盲(二) PCIe扫盲(三) PCIe扫盲(四) PCIe扫盲(五) PCIe扫盲(六) PCIe扫盲(七&#xff09…

剪画:一带一路机遇下,自媒体如何跨越语言障碍!

随着国家 “一带一路” 的持续推进,我国的文化魅力如璀璨星辰,在世界舞台上熠熠生辉。美食的独特风味、华服的精美绝伦,越来越受到外国人的喜爱。这对于做自媒体的小伙伴们而言,无疑是一个巨大的机遇。 然而,机遇往往与…