2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

用 Appraise 自动化视觉测试

  • 2018-05-20
  • 本文字数:3087 字

    阅读完需:约 10 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

在开发界面外观是成功关键的应用程序时,自动化视觉测试会带来很大的帮助。Appraise 是在麻省理工学院授权的 GitHub 上的一款开源工具,它将实例化需求的应用于视觉方面。它帮助团队使用视觉检查来审查审批对 web 页面的更改。

Appraise 的创始人 Gojko Adzic 在 2018 年欧洲测试会议上发表了题为“无痛视觉测试”的主题演讲。InfoQ 采访了 Gojko,讨论了视觉测试的难点是什么,并询问了他一些关于 Appraise 的问题。

InfoQ: 在测试可视化时,测试人员经常会遇到什么问题?

Gojko Adzic: 从历史上看,测试应用程序的视觉方面需要人的眼睛和人的判断。这使得视觉测试变得昂贵和缓慢,所以有好的启发式方法来实现适当的覆盖率是非常重要的。

对于视觉效果,通常很难表达怎么算是正确的。有人可以设计很多特定的检查,比如元素大小、定位和样式,但是屏幕上的整体组合可能仍然是错误的、怪异的或者就是很难看的。虽然人们可以很容易地发现什么东西有问题,但因为很难表达预期的结果,所以传统的自动化并不是很有帮助。

即使预期的结果是明确定义和确定的,测试可视化常常需要构建和部署应用程序的整个堆栈,从而使测试变得缓慢而脆弱。

InfoQ: 测试人员如何处理这些问题?

Adzic: 一个常见的解决方案是在用户界面下尽可能地自动化,让人们把精力集中在剩下那些需要肉眼的部分上。由于用户界面自动化往往是缓慢而脆弱的,软件团队倾向于将功能从外观和感觉上分离出来,并尽可能地在可视化界面下进行测试。为此,Mike Cohn 率先提出了著名的测试自动化金字塔,它在今天的软件测试自动化中非常有用。

对于业务应用程序或企业软件来说,这很有效,因为用户界面并不是其真正的特别之处。但是在界面外观是成功关键的应用程序中,这个庞大的任务仍然摆在开发团队的面前,团队并没有很多处理此类问题的技巧和实践。从技术上讲,有很多工具可以检查应用程序的视觉方面,但是把人排除到这个方程式之外仍然是不可能的。

在做 MindMup 的时候,我们最终解决了这个问题。因为它是一个消费者应用程序,而且用户群的大部分都是学龄儿童,视觉和界面外观对整体体验至关重要。我们是一个构建、支持和维护应用程序的小团队。随着代码库的增长,测试视觉效果所需要的时间确实会带来负面影响,使我们无法抽身去做新的特性。我们有大量的自动化测试,甚至对应用程序的大部分可视化方面进行了测试,这些测试都是使用浏览器内的测试来检查 DOM 元素的,但是这些测试很难维护。

例如,改变一些常见的思维导图可视化风格,如字体或页边距,会导致数百个测试中断。每一个测试用例都是确定的,给我几个小时和一个计算器,我可以很容易地计算出新的期望状态,但是我更愿意把时间用在改进产品上,而不是修改测试用例。当然, 我们可以抽象这些东西, 设计更小的单元测试, 不依赖于真实的视觉界面外观的样式, 但是如果有些东西没那么怪那么丑,那么这种方法也验证不出什么,所以我们仍然需要审查最终可视化结果, 这花了很多的时间。

事实上,因为其他的测试都很脆弱,我们最终会有一打左右的思维导图来展示所有的关键界面外观,然后手动加载它们以验证看起来是否正常。如果存在问题,我们只是会从面向代码的测试中复制出实际结果,并为其声明新的期望值。

这让我们思考,我们如何能够加速这个过程,也许设计一个自动化流水线来帮助我们做视觉评估能让我们更快更有效地完成它。我们认为设计自动化测试的目的并不是为了取代人类,但是如果我们能够设计出一些自动化来帮助我们做这件事,就太好了。

人类在评估某样东西是否正常时很在行,但我们不需要参与收集所有信息的过程,所以我们开始将所有事情都自动化,除了最后的决定。我们构建了一个工具,它可以执行为应用程序设置的那些简单枯燥的工作来尝试许多不同的视觉测试用例,然后将它提交给我们进行审批。我们有了这个,就可以评审比之前多得多的案例了。而不是那十几二十个思维导图来帮我们在同一时刻检查很多东西的,我们可以围绕各个方面设计测试,让自动化部分仅仅呈现出不同效果,有那么点视觉单元测试的意思。

InfoQ: Appraise 是什么?

Adzic: Appraise 是我们为 MindMup 构建的工具,并最终开源,这样其他人就可以使用类似的方法来解决同样的问题了。

Appraise 采用了实例化需求的方法,但将其应用于视觉效果。我们举一些具体的例子,通过一个自动化层来创建可执行的规格说明,然后使用无头的 Chrome 来截屏,并将其与预期的结果进行比较。不同于通常的实例化需求的工具,我们无法认定预期和实际结果之间的差异就是错误,Appraise 采用了审批测试的方法。它把所有存在差异的地方显示给人类,让人来判定差异是否正确,如果是,就批准它。

批准失败的测试用例使实际结果成为下一个测试运行的预期,因此维护测试的成本就很低廉了。我只需按下一个按钮,而不是重新花时间计算 SVG 位置,就可以让新的屏幕截图成为我新的期望状态。因此,我们从有效的测试设计和自动化实例化需求的工具,以及对典型的批准测试的简单测试维护中获得了很多好处。这意味着我们可以快速地做大量的测试用例,并能很容易地管理它们。

Appraise 可以帮助团队肉眼快速审查审批对 web 页面、视觉布局和浏览器组件的更改。它的设计目的是使视觉语言的接受 / 回归测试自动化,而不是 xUnit 风格的代码,因此设计人员、测试人员、UX 专家和产品经理的跨职能组可以在测试中进行协作。

此外,通过采用具体的示例方法,评价团队可以通过可视化的例子创建易于维护的、可验证的开发人员文档。该工具使用 Markdown 作为可执行的规范格式,这意味着团队可以轻松地将其现存的文档发布到 Github 或作为静态 HTML 站点。

Appraise 是在麻省理工学院授权的,并且代码是托管在 GitHub 上。该产品的当前还是 alpha 版本。我要说的是,它对我们的用例非常有用,我们使用它帮助测试 MindMup 的界面外观,但是可能需要再打磨打磨才能对其他产品和团队工作流程有用。它目前仅限于 JavaScript 和在 Chrome 中运行,但要把它扩展到其他浏览器和运行时执行应该也不难。

InfoQ: 测试人员如何使用 Appraise 进行视觉测试?

Adzic: 它不是主要针对测试人员的工具,而是跨职能团队。人们可以从使用草图的可视化示例开始,无论是用手绘、线框图还是图形工具,然后对相关的例子、边界值和边界情况进行充分地讨论。这种讨论,就是 BDD 和实例化需求的真正威力所在。

然后把这些草图放入 markdown 文档来创建一个可执行的规范,这将成为一个半自动化的测试。然后,开发人员将构建这些特性和一些可能的测试夹具,类似于 FitNesse 夹具或 Cucumber 步骤,将这些示例联系到应用程序中。

Appraise 会运行应用程序,抓取截屏并剪辑它们,然后与预期的视觉效果进行比较。如果一切顺利,它就会什么也不提。如果发现有任何差异,就会将其抛出来请人来审批。当然,对于手工绘制的草图来说,测试最初会失败,但是我们已经把比较差异弄得很简单了,因此,用户体验设计师或产品专家可以评审并批准正确的内容,而这将成为下一个运行的基线。对于不正确的程序,开发人员在 Chrome 中使用典型开发工具很容易检查什么出错了,并修复它。

通过这种方式, 评价的目的是支持跨职能的对话和方便人们识别和评审的差异。

另一个可以用于视觉测试的工具是 Applitools Eyes。它使用模拟人眼和大脑的人工智能。在 Applitools Expands Application Visual Management Capabilities 中可以找到有关最近发布的更多信息。

有一些用于视觉测试工具还正处于发展阶段,例如 Chromatic 和 Screener。

查看英文原文 Automating Visual Testing with Appraise

2018-05-20 19:001653

评论

发布
暂无评论
发现更多内容

自己动手,从零开始编写Raft算法来实现分布式一致性算法

程序员高级码农

程序员 分布式 算法

「今日一句」情绪签语 App:一次与 CodeBuddy 的共创之旅

繁依Fanyi

高能预警!Community Day 20+议题大公开

声网

Flink从入门到实战,经历了30个日日夜夜,终于悟道了!

程序员高级码农

大数据 flink 程序员

Doris Manager 24.3 版本正式发布,增强集群巡检能力

SelectDB

Apache 数据库 数据分析 实时数仓 OLAP

永久免费!专为 Apache Doris 打造的可视化数据管理工具 SelectDB Studio V1.1.0 重磅发布!

SelectDB

数据库 大数据 数据分析 实时数仓 可视化工具

借助 CodeBuddy,我轻松打造了图像滤镜工厂

繁依Fanyi

RocketMQ实战—订单系统面临的技术挑战

量贩潮汐·WholesaleTide

数据库 RocketMQ

CouchDB 可观测最佳实践

观测云

couchdb

全职接单后才发现,其实不只是技术重要

程序员郭顺发

借助 CodeBuddy,我轻松开发出三分钟读书 App

繁依Fanyi

我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录

繁依Fanyi

模型即组件的技术实现路径 ——iVX 量子化架构对 GPT-4o/Mediapipe 的封装解析

代码制造者

低代码 组件化 封装 组件化开发

Arthas getstatic(查看类的静态属性 )

刘大猫

监控 Arthas 监控工具 getstatic 查看类静态属性

鸿蒙电脑正式发布!新机用户专享“鸿蒙有礼”,800元权益礼包限时领取

最新动态

《算法导论(第4版)》阅读笔记:p91-p94

codists

算法

ES 调优帖:关于索引合并参数 index.merge.policy.deletePctAllowed 的取值优化

极限实验室

Elastic Search

鸿蒙带来的机会比想象中更大

最新动态

通义灵码2.5智能体模式联合MCP:打造自动化菜品推荐平台,实现从需求到部署的全流程创新

穿过生命散发芬芳

MCP 通义灵码2.5

一次对话,让我10分钟打造一款拥有玻璃拟态风格的二维码生成大师

繁依Fanyi

Nuxt的SEO实践

溪抱鱼

typescript nuxt

【HarmonyOS 5】鸿蒙星闪NearLink详解

GeorgeGcs

借助 CodeBuddy,轻松打造「一分钟冥想」App

繁依Fanyi

打卡习惯,记录坚持:我用 CodeBuddy 做了个毛玻璃风格的习惯打卡小应用

繁依Fanyi

【浪潮海岳inDatax数据中台专栏】主数据管理中基于属性的物料编号生成技术

inBuilder低代码平台

NotebookLM 推出移动版本,音频概览支持实时互动;豆包 AI 耳机支持外教语音智能体 Owen丨日报

声网

Arthas 全攻略:让调试变得简单

刘大猫

人工智能 算法 监控 Arthas 监控工具

借助 CodeBuddy,我见证了一款在线代码格式化神器的诞生

繁依Fanyi

数据仓库是什么?常见问题解答

镜舟科技

数据仓库 数据湖 OLAP 数据模型 数据存储

我如何和 CodeBuddy 搭建「Gradia」渐变配色神器 —— 一场流动色彩的创造之旅

繁依Fanyi

打造一款属于我的在线加密实验室 —— CodeBuddy 实现 CryptoXLab 项目实录

繁依Fanyi

用Appraise自动化视觉测试_软件工程_Ben Linders_InfoQ精选文章