鉴源论坛 · 观模丨面向界面的图形化测试技术
作者 | 熊一衡 华东师范大学软件工程学院博士
苏亭 华东师范大学软件工程学院教授
版块 | 鉴源论坛 · 观模
01 什么是面向界面的图形化测试(GUI Testing)
图形用户界面(GUI) 是一种通过图形化方式呈现信息、数据、功能和操作的用户界面,旨在提供更加直观、友好、易用的体验,以满足用户的需求和期望。图形用户界面通常由窗口、菜单、按钮、文本框、图标、标签等组件构成,用户可以通过鼠标、键盘等输入设备进行交互和操作。GUI界面的设计和布局需要考虑用户的习惯、视觉效果、易用性等因素,以提供最佳的用户体验。
面向界面的图形化测试是一种常用的软件测试方法,旨在验证用户界面是否符合业务规范和用户需求,以及验证应用程序的功能是否正确响应用户操作,以保证应用程序的质量和稳定性。图形化测试通常在开发的中后期进行,可以确保应用程序的功能和用户界面的质量,提高用户体验,降低用户投诉和退款率。此技术可以有效地提高测试效率和测试质量,在各种应用程序的测试中得到广泛应用。
例如,如果一个用户访问京东商城的网站主页(https://www.jd.com/),他将看到导航栏、搜索栏、推荐栏和其他诸多组件。测试人员可以针对不同的关注点来对这个网页进行图形化测试。例如,点击“免费注册”按钮,网站是否能弹出相应的注册网页,包括导航、搜索、表单、购物车、支付等功能是否能正常响应用户操作。
通过图形化测试,可以发现应用中的问题和缺陷,提高应用的质量和用户体验,增强用户的满意度和忠诚度,从而提高应用的价值和竞争力。
02 常见的面向界面的图形化测试技术
2.1 基于人工的测试
基于人工的测试是一种传统的软件测试方式,测试人员通过手动操作应用程序的用户界面,模拟用户的行为和操作,来发现和报告应用的问题和缺陷。在实际应用中,应用系统级的功能性问题很大程度上是依靠人工测试找到 [1]。基于人工的图形化测试需要有经验的测试人员,能够全面地覆盖测试用例和测试场景。然而,测试的效率和准确性很大程度上受到测试人员的技能水平和经验的影响。基于人工的测试主要包括以下步骤:
(1)理解项目需求和制定测试计划:测试人员必须分析所有的需求文档,以便识别软件的预期行为和需要测试的确切内容。测试人员根据需求和规格说明书,制定测试计划和测试用例。
(2)测试环境和测试数据准备:测试人员准备测试环境和测试数据,包括安装和配置测试软件、准备测试数据、设置测试工具和设备等,以确保测试环境的一致性和稳定性。
(3)手动测试执行:测试人员按照测试计划和测试用例,手动操作应用程序的用户界面,模拟用户的行为和操作,包括点击、输入、选择、拖拽等,以验证应用程序的功能和性能,并记录测试结果和异常情况。
(4)缺陷报告和总结:当测试人员发现缺陷的时候,需要根据测试团队所制定的报告模版生成缺陷报告,包括缺陷的描述、缺陷分类、缺陷级别等等,并跟踪和确认缺陷的修复和验证。在测试完成之后,测试人员根据测试的结果生成测试报告并提交给项目团队。
基于人工的测试的优点包括:测试灵活性高,人工测试可以基于一个功能自己构建不同的测试用例,并且适应不同的程序表现;测试准确性高,自动化测试工具没有测试人员经验丰富,人工测试可以更加准确判断一个应用表现是否为一个程序错误;测试反馈及时,可以及时发现和报告软件缺陷和问题。
然而,基于人工的测试也存在一些缺点,如测试效率低,需要较长的测试时间和测试人员的工作量,当短时间内需要生成大量测试用例时,不适合用人工测试;测试成本高,相对于自动化测试,人工测试需要耗费大量人力和时间;测试可重复性差,测试结果可能受到测试人员的主观因素的影响;测试覆盖率有限,可能无法涵盖所有的测试用例和测试场景。
2.2 基于录制回放的测试
基于录制回放的测试通过记录用户在图形界面上的操作,生成测试脚本,然后回放测试脚本到目标应用上来模拟用户的操作并验证应用程序的功能。录制回放测试技术属于自动化测试的一种形式,不需要人工编写测试脚本,减少工作人员的工作量,适用于需要重复执行相同测试用例的场景,如回归测试、性能测试等。录制回放测试技术主要包括以下步骤:
(1)录制测试脚本:测试人员打开测试工具,启动录制功能,然后在应用程序的用户界面上进行操作和事件,如点击按钮、输入文本、选择菜单等,测试工具会自动捕捉和记录用户的操作和事件,并生成测试脚本。
(2)编辑测试脚本:测试人员可以对生成的测试脚本进行编辑和优化,如添加断言、调整等待时间、修改参数等,以确保测试脚本能够正确地模拟用户的操作和验证应用程序的功能和性能。
(3)回放测试脚本:测试人员启动回放功能,测试工具会自动执行测试脚本,模拟用户的操作并验证应用程序的功能和性能,同时记录测试结果和异常情况。
(4)生成测试报告:测试人员分析测试结果,包括测试通过率、测试覆盖率等,发现软件缺陷和问题,并向开发团队提供测试报告。
录制回放测试技术的优点包括:测试成本低,不需要会编写测试脚本的专业人员,测试效率高,可以根据测试人员的录制自动化生成测试脚本并自动执行测试;测试准确性高,可以模拟真实用户的操作并验证应用程序的功能和性能;测试可维护性高,可以快速修改和更新测试脚本和测试数据。
然而,录制回放测试技术也存在一些缺点,如测试脚本的可靠性和稳定性受到应用程序的变化和测试环境的影响,需要保证测试环境的一致性和稳定性;测试脚本的维护成本较高,应用程序代码和界面在不断变化,因此需要不断更新和优化测试脚本和测试数据来适应这些改变;测试覆盖度有限,依赖于测试人员的录制,测试人员一般偏向于录制一些核心功能和核心步骤。
Selenium IDE [2] 是Selenium Suite下的一款非常受欢迎的开源Web自动化测试工具,其核心功能是录制回放测试。它不需要用户有任何编程知识,只需记录用户与浏览器的交互从而可以快速地创建、执行和调试自动化测试脚本。Selenium IDE提供了一个简单的界面,可以通过简单的拖放操作和录制功能,快速创建自动化测试脚本,无需编写任何代码。它支持多种浏览器,包括Chrome、Firefo等。此外,Selenium IDE还可以导出测试脚本为多种编程语言的代码,如Java、C#和Python等。
2.3 基于模型的测试
基于模型的测试是一种自动化测试方法,它利用模型来描述被测试系统的行为和结构,从而生成测试用例,验证系统的正确性和可靠性。基于模型的测试可以提高测试效率和覆盖率,减少测试人员的工作量,适用于复杂和多变的应用程序,如嵌入式系统、软件系统、网络系统等。
基于模型的测试主要包括以下步骤:
(1)建模:测试人员使用建模工具,根据需求和规格说明书,构建被测试系统的模型,包括功能模型、状态模型、数据模型等,以描述被测试系统的行为和结构。
(2)模型分析:测试人员对模型进行分析和验证,包括模型检查、模型仿真、模型测试等,以发现和修复模型中的错误和问题。
(3)测试用例生成:测试人员利用模型生成测试用例,包括基于覆盖率的测试用例、随机测试用例、符号执行测试用例等,以覆盖模型中的所有路径和状态,并达到测试目标和测试要求。
(4)自动化测试执行:测试人员使用自动化测试工具,执行生成的测试用例,对被测试系统进行自动化测试,包括功能测试、性能测试、安全测试等,以检验被测试系统的正确性和可靠性。
(5)测试报告和总结:测试人员整理测试结果和问题报告,生成测试报告和总结,包括测试通过率、测试覆盖率、缺陷统计、测试建议等,以提供给项目团队和管理者参考和决策。
基于模型的测试的优点包括:测试效率高,可以自动生成测试用例和测试脚本,并自动执行测试;测试覆盖率高,可以覆盖模型中的所有路径和状态;测试可重复性好,可以多次执行相同的测试用例和测试脚本;测试结果准确性高,可以自动化地验证被测试系统的正确性和可靠性。
然而,基于模型的测试也存在一些缺点,如模型的建立和维护成本高,需要投入大量的人力和物力资源,并且需要建模人员非常了解待测试应用;门槛高,模型的构建需要有非常专业的建模人员,熟练使用各种专业技能 [3];模型的应用范围有限,可能无法覆盖所有的测试需求和测试场景。因此,在实际测试中,应根据测试需求和应用程序的特点,综合选择不同的测试方法和工具,以提高测试效率和质量。
Fastbot [4] 是一款由字节跳动Quality Lab研发的一款开源的基于模型的GUI测试工具,用于发现手机app中的稳定性问题。Fastbot将app的GUI信息抽象成模型中的state,将执行的动作抽象成模型中的action,然后基于构建的模型生成测试用例,并提供多种算法策略,目标是达到较高的 Activity 覆盖率及较强的问题发现能力。同时,Fastbot还支持跨平台测试,在海量设备上多机协同测试。Fastbot也利用了图像检测技术来支持较丰富的图像 UI 异常检测能力(黑白屏、图像重叠、控件遮挡等等)。
03 面向界面的图形化测试的挑战
根据statista网站上的报道,48%的移动应用测试人员将图形化界面看作主要的测试关注点[5]。面向界面的图形化测试在应用的功能和质量起着至关重要的作用,在实际应用中也存在不少挑战:
(1)代码和设计变更:鉴于应用界面以及功能的频繁更新,测试人员需要不断调整测试脚本以适应新的测试场景。
(2)错误处理:当测试复杂应用程序时,可能会遇到各种程序问题,来干扰测试进行,如何处理这些问题是一个常见的难题。
(3)测试工具与被测软件的同步问题:测试工具与测试对象之间如果同步出了问题,很可能会导致测试失败,影响测试结果的准确性 [6]。
(4)依赖于测试工具:首先需要选用合适的测试工具,并对测试的应用进行相应的定制和配置。
(5)需要专业技能:需要具备一定的编程和测试技能,才能进行测试脚本编写和自动化测试工具的配置和使用。
(6)多样性:不同的软件界面设计不同,测试人员需要熟悉各种不同的界面风格和交互方式。
04 总结
面向界面的图形化测试技术已经成为各种应用程序测试的重要手段之一。这种测试技术广泛应用于各种应用程序的测试中,特别是对于那些用户界面比较复杂、交互性比较强的应用程序,如游戏、手机app、网站等。此技术可以有效地提高测试效率和测试质量。尽管取得了巨大进展,但该测试技术仍然面临着许多挑战,学术界和工业界也在不断探索尝试各种新的技术和方法,以提高测试的效率和质量。
参考文献:
[1] Itkonen J, Mantyla M V, Lassenius C. How do testers do it? An exploratory study on manual testing practices[C]//2009 3rd International Symposium on Empirical Software Engineering and Measurement. IEEE, 2009: 494-497.
[2] Selenium IDE -https://www.selenium.dev/selenium-ide/.
[3] Dias Neto A C, Subramanyan R, Vieira M, et al. A survey on model-based testing approaches: a systematic review[C]//Proceedings of the 1st ACM international workshop on Empirical assessment of software engineering languages and technologies: held in conjunction with the 22nd IEEE/ACM International Conference on Automated Software Engineering (ASE) 2007. 2007: 31-36.
[4] Fastbot https://github.com/bytedance/Fastbot_Android.
[5] “Focus areas for testing mobile applications from 2013 to 2017” -https://www.statista.com/statistics/500605/worldwide-mobile-application-testing-focus-areas/.
[6] Alégroth E, Feldt R, Ryrholm L. Visual gui testing in practice: challenges, problemsand limitations[J]. Empirical Software Engineering, 2015, 20: 694-744.
相关文章:

鉴源论坛 · 观模丨面向界面的图形化测试技术
作者 | 熊一衡 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 | 鉴源论坛 观模 01 什么是面向界面的图形化测试(GUI Testing) 图形用户界面(GUI) 是一种通过图形化方式呈现信息、数据、功能和操作的用户界面,旨在…...

Midjourney以图生图的详细教程(含6种案例介绍)
🏆 文章目标:学习并介绍Midjourney以图生图的详细教程 🍀 Midjourney以图生图的详细教程 ✅ 创作者:熊猫Jay 🎉 个人主页:Jay的个人主页 🍁 展望:若本篇讲解内容帮助到您,…...

基于单片机的电路特性测试仪的设计
摘 要 当今社会科技的飞速发展,智能和便捷已经成为人们的日常诉求。现在放大电路在使用过程中经常出现故障,并且需要测试电路数据,但是大多数是手动进行测试,一定程度上影响了工作效率。 为了测量数据更安全更便捷,针…...

五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同
近日,为规范旅游市场秩序,促进旅行社高质量发展,文旅部发布了《文化和旅游部办公厅关于进一步规范旅游市场秩序的通知》(下称《通知》),对旅游业提出了新的要求。 《通知》中规范了旅行社经营行为。旅行社要…...
IAP升级遇到的问题
文章目录 1. app程序在SystemClock_Config中跑飞2. 程序HAL_Delay中卡死3. 通过外部flash模拟的U盘没能被电脑识别4. 将bin文件拷贝到片内flash中失败5、APP程序跳转过后串口不能工作 这几天在STM32G473使用IAP升级的时候踩了不少坑 1. app程序在SystemClock_Config中跑飞 boo…...
简单聊聊k8s,和docker之间的关系
前言 随着云原生和微服务架构的快速发展,Kubernetes和Docker已经成为了两个重要的技术。但是有小伙伴通常对这两个技术的关系产生疑惑: 既然有了docker,为什么又出来一个k8s? 它俩之间是竞品的关系吗? 傻傻分不清。…...

半小时学会HTML5
一、了解几个概念 1、HTML定义 HTML是(Hyper Text Markup Language)超文本标记语言,超文本包含:文字、图片、音频、视频、动画等。 2、W3C 是什么? W3C 即(World Wide Web Consortium) 万维…...

研报精选230421
目录 【行业230421南京证券】氢能行业:地缘政治加速绿色能源转型 【行业230421华安证券】AIGC行业研究框架与投资逻辑 【行业230421信达证券】工控行业深度报告:行业拐点将至,国产品牌加速崛起 【个股230421国信证券_华阳集团】聚焦汽车智能化…...

AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
Midjourney和Stable Diffusion都可以通过输入文本生成出令人惊叹的AI图像。 Midjourney是一个收费的在线服务,通过discord对话的形式来生图,局限性较大,但由于后台官方模型做得好,因此出图效果非常完美; Stable Diffus…...

人工智能论文的风格特点
搞清楚AI领域论文的风格特点是写出一篇高质量AI论文的前提,AI领域的论文有如下显著特点。 1. 论文的架构非常清晰且富有逻辑。一篇高质量的AI论文,读者通过大致扫一眼论文的各级标题就能够对论文的写作思路形成清晰的认识,明白论文各部分之间…...

成功上岸国防科大!
Datawhale干货 作者:王洲烽,太原理工大学,Datawhale成员 写在前面 相比较于一般的经验贴,我更想在这里讲述一下自己的故事。我一开始报考的是北理工,但很遗憾9月份北理改考408了,无缘京爷,所以…...

【C语言】输入输出、字符串操作、内存操作、文件操作函数
三对基本输入输出函数 1.gets(),puts() gets()从标准输入中获取一个字符串,到str(自己创建的char型数组)中,读到换行或输入末尾结束获取r; 成功返回str,失败返回空。 char *gets(char *str)…...

[golang gin框架] 25.Gin 商城项目-配置清除缓存以及前台列表页面数据渲染公共数据
配置清除缓存 当进入前台首页时,会缓存对应的商品相关数据,这时,如果后台修改了商品的相关数据,缓存中的对应数据并没有随之发生改变,这时就需要需改对应的缓存数据,这里有两种方法: 方法一 在管理后台操作直接清除缓存中的所有数据,当再次访问前台首页时,就会先从数据库中获取…...

文件夹改名,如何在改名之后批量复制文件夹名称
在日常时候中会遇到给文件夹改名的时候,那么我们又如何在改名之后批量复制文件夹名称?今天就由小编来给大家分享一下操作办法。 首先第一步,我们要进入文件批量改名高手,并在板块栏里选择“文件夹批量改名”板块。 第二步…...

汇编与内联 x86-64
机器字长 x86是32位系统 64是64位系统 这里的32和64,指的都是机器字长 机器字长是 能直接进行整数/位运算的大小指针的大小(索引内存的范围) 容易与机器字长混淆的概念:字 字 字存储字长 字是MDR寄存器的位数,代表每个主存存储体中的存储…...
OSCP-UT99(IRC、Unreal Tournament 99)
目录 扫描 WEB IRC 提权 扫描 sudo nmap 192.168.142.44 -p- -sS -sV PORT STATE SERVICE VERSION 21/tcp open ftp FileZilla ftpd 80/tcp open http Apache httpd 2.4.16 (OpenSSL/1.0.1p PHP/5.6.12) 44…...
Kubernetes CPU内存资源限定
在 Kubernetes 中创建工作负载时,您可以为 Pod 中的每一个容器指定其所需要的内存(RAM)大小和 CPU 数量。如果这些信息被指定了,Kubernetes 调度器可以更好的决定将 Pod 调度到哪一个节点。对于容器来说,其所需要的资源…...

fitlog使用教程(持续更新ing...)
诸神缄默不语-个人CSDN博文目录 fitlog包是用于自动版本管理和自动日志记录的Python包,是fastNLP团队开发的。 fitlog 中文文档 — fitlog 文档 我下载的是fitlog 0.9.15版本。 他们团队的文档写的真的不行,崩溃,FastNLP也很难用࿰…...

Linux下搭建Go开发环境
Linux下搭建Go开发环境可以按照以下步骤进行: 1、下载最新的Go语言二进制包,可以从官网 https://golang.org/dl/ 下载。 2、将下载好的包解压缩到你想要安装的目录下,如 /usr/local/go。 3、添加环境变量,在终端中输入以下命令…...
一文搞懂SQL注入攻击
SQL注入攻击 1. 前言2. SQL注入简介3. SQL注入步骤4. 防范SQL注入 1. 前言 随着互联网的发展和普及,网络安全问题越来越突出,网络在为用户提供越来越多服务的同时,也要面对各类越来越复杂的恶意攻击。SQL注入(SQL Injection&…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...