淘宝如何做智能化UI测试?

简介: 阿里QA导读:伴随智能UI的发展,淘宝大促会场已支持AI千人千面的解决方案。但智能UI模块样式庞大的数量级面前,传统的手工测试显得十分的力不从心,单纯地堆积人力已然无法解决问题,我们该如何应对新的挑战?让我们来看看淘宝质量团队是如何破解这个难题。



image.png

阿里QA导读:伴随智能UI的发展,淘宝大促会场已支持AI千人千面的解决方案。但智能UI模块样式庞大的数量级面前,传统的手工测试显得十分的力不从心,单纯地堆积人力已然无法解决问题,我们该如何应对新的挑战?让我们来看看淘宝质量团队是如何破解这个难题。


背景


        不同的用户有不同的偏好,不仅对于商品,对于UI也是同样如此。淘系会场的智能UI模块由此应运而生。在目前的淘系会场中,所谓的智能UI指的是借助AI提供界面千人千面的解决方案,给不同的用户展现不同的界面。在今年的双11中,智能UI模块成为了会场模块的主流方案之一,在本次双11大促中覆盖了300+的会场,使得会场除了在商品推荐上做到个性化之外,还实现了UI层面上的千人千面的个性化能力。


现状和挑战


什么是智能UI?

       通过对大量线上页面的研究,智能UI设计团队总结并提出了描述电商模块设计方案的模型。模型包含了界面的栅格、布局、样式等信息,具体定义见下图。

image.png

GDM-T

BEm+S

()当前模板区块数量,n,m.k全量维度表中某一取值)

iEA

B

模板

区块

样式打包

版式

数据字段

栅格

Grid

Temptate

Block

StyoPack

Component

S表

B表

模板

数据字段

区块

样式包

Template

Field

Block

StylePack

模板1

ItmEPic.class:342*342

白底图

场景图

SKU图

默认图

title.class:sans,黑#3332t

模板2

商品特点标签

利益点

CompainPrice.class:sans

#E61415.32pt

上市iphoneXR.

品牌logo

服务权益标

全特区

模板3

4399

SuggestPrice.class:sans,灰

销量

88vip标

收藏数

HCCC.20pt

     通过上述模型,可以将电商模块的设计数据进行结构化。在实际应用中,我们将模型拆分成几个部分分别进行描述。

image.png

场景图

1:1

342*342px

1:1

白底图

342*342px

封面图

必选

视频(wiFi)

342*342px

1:1

A-封面区

招商商品名招商商品名最多十个字

B-商品标题

必选

算法商品名算法商品名最多十个字

厨房飞主信息区钢丝球

C-可选字段

商品描述

满3件减5折

可选

C-次信息区1

评价标签

9999人认为"上身效果好"

D-次信息区1

属性标签

E-价格区

别致飘带领口

销量

月销/爆卖3万件

兜底

人气好物/优选尖货/超值好货

00:05

收藏

20000人种草

销量

爆卖23000件

评价

603位小仙女都说好

80%购买者都说好

D-利益标签

每满200减20

津贴满200减20

包邮

必选

5元红包券

显瘦新款紧身小脚裤

爆卖3万件

E-价格

¥999.99

必选

每满200减20

¥39.9

       以区块(Block)为例,在上图的智能UI商品模块视觉稿中,我们将整个模块划分为5个区块,分别为:封面、标题、卖点、营销活动、价格,每个区块有唯一对应的编码:A  -  E,每个区块可以展示不同的物料。以上图为例,该视觉稿包含的样式方案数为5个区块的乘积:3*2*8*3*1=144。前端在开发时,会根据算法接口返回的唯一编码把对应物料渲染到对应区块位置。

测试要怎么做?

       单一模块具有如此众多的样式,势必会给测试工作带来新的挑战。为了保障线上质量,在测试工作中必须覆盖所有的样式,然而在智能UI模块样式庞大的数量级面前,传统的手工测试显得十分的力不从心。从现实角度考虑,单纯地堆积人力已然无法解决问题,因此,自动化检测就顺理成章地成为了我们唯一的选择。

通过梳理智能UI模块的现状,我们的自动化测试方案主要需要解决以下几个问题:

  • 针对不同智能UI模块,自动获取所有样式方案,并分别生成测试页面。
  • 针对某一特定方案,自动校验数据投放和显示的逻辑,即:页面上展示的图片以及数据是否正确。
  • UI样式检测。内容包括商品坑相互之间的间距,以及商品坑与边框的边距等。


解决方案


测试样本生成

//区块全部描述信息
{
 "blocks":
   [
     {"name":"封面区","code":"A","children":["1","2","3"]},
     {"name":"标题区","code":"B","children":["1","2"]},
     {"name":"卖点区","code":"C","children":["1","2","3","4","5","6","7","8"]},
     {"name":"营销活动区","code":"D","children":["1","2","3"]},
     {"name":"价格区","code":"E","children":["1"]}
   ],
   "key": "A^1|B^2|C^4|D^1|E^1"
}

上述代码描述了一个智能UI模块的区块信息,其中key字段表示当前所使用的样式“A^1|B^2|C^4|D^1|E^1”:

A1:封面区显示场景图

B2:标题区显示算法商品名字段

C4:卖点区显示销量字段

D1:营销活动区显示满减字段

E1:价格区显示价格字段

根据模块的区块描述信息,我们很容易就可以遍历生成模块对应的所有样式。

image.png

模块代码

页面模板

测试页面

items数据

mock数据

模块样式

       对于会场所使用的模块,我们开发了相应的功能,用于批量生成模块的测试页面。测试页面的数据投放方式(阿拉丁、kangaroo)以及渲染方式与线上正式页面保持一致。通过构造页面的mock数据,我们可以指定测试页面所使用的样式,同时也可以设置模块所要展示的商品或店铺等数据字段。

image.png

130091G*081F906D087C692C*8940930

A15/491G98589687C9920*8940095

115/9911895900071C92090895

1151*879G*4911F*08610*8070921E-09418930

文百池1梦

爽面地1

未版小户型水足五

989780

小户卫水启石方系

浙丈西难技糕摄

¥980

¥989

小户兰水享石为东

严中六课绿市!书店

超中式冰克吃书室

小艺水品石方果

木防林团1万人己种

人北欧同格

2人北攻员吃

太航村能1万人已科草

989

合国购工

980

¥989

¥980

住甲9买

穷天十长南品书决

福十式南山增鸡合

西件上品工味木

白除琴保工艺精画

¥907.5*6840

亮性心儿酒幻快木康只

99:980

03780

自动识别

     生成模块测试页面之后,我们希望能够对于页面上的元素进行自动识别,判断是否与生成页面时所使用的mock数据相一致。

image.png

中式属机超:

小号日冰要石夏

小户孕水新石方

W:989

新中式黑胡桃书桌

新中式黑胡桃书桌

高端性价比家具

高端性价比家居

9x980

t3日本花台

隔店北木大书单

康山设计车家式全

980

9980

伊3780

   整个识别的过程大致可以分为两个步骤:

  1. 识别坑位(商品坑、店铺坑等等);
  2. 识别坑位中的信息。

目标检测(Object Detection)

     为了能够识别页面截图中的商品/店铺坑位,我们采用了深度学习中的目标检测算法。整个流程可以分为3个步骤:数据准备、训练、部署。

1.数据准备

       众所周知,机器学习需要大量的数据样本用于训练。那么用于智能UI模块训练的样本需要如何生成?如果单纯依靠手工标注的方式,显然费时费力,效率低下,样本的多样性也比较难以保障。因此我们选择的是imgcook。通过imgcook提供的sketch插件,我们可以从设计师提供的sketch文件中抠出对应的模块,生成相应的DSL代码,具体详情可参考文档:https://imgcook.taobao.org/dsl。在获取到模块对应的DSL代码之后,我们就可以对所有模块进行统一管理。

image.png

商品模块

商品模块

商品模块

商品模块

moduleitom

moduloitom

moduo.ltom

module_item

ZARA

ZARA

皮霸租多八个字

牛皮息量多八个字

牛皮廊租多八个字

商品标题限八个字

商品标翅限八个字

商品标题限八个字

大家评"效果好"

大家详数果好

商品标塞阳制十字以内

大家评"效果好"

550人认为-上母菠果饼

已减210元

已减9999元

日已减210元

278.99

278.00

¥278.00(列后)

¥278.009*9

2020-05-0915:22

2020-05-0915:02

2020-05-0915:14

2020-05-0915:27

优惠券绑定模块2

榜单模块

优惠券榜单模块1

直播榜单模块

module.-coupon_rank1

module.coupon_rank2

modulevideorank

modulerank

365天不圣专的挖座

味力意方蚁教

已发皮999万元会员权盐

清店艳

5折

萧1000名9折岁

小米

1000

小丽官方镇制名

巴发性06.4万元会员机赖

会兴权造转享等

¥1000

满2000可丹

1000

100

分享镇柞

已测度200.5万元

订盟电费店23080

超键出电满2300网

2020-05-0911:55

2020-05-0014:37

2020-05-0914:34

2020-05-0914:40

image.png

保存

配置文档

moduleitem

快速设置

节点属性

素材库设置

Picture(image_2)

商品白底图

内容:

增强个数:

Text(text_12_0)

商品标题

内容

增强个数:

20

Text(text8_0)

商品利益点

内容:

增强个数:

布局关联

商品标题限制十字以内

关联节点

可隐藏

目标节点

550人认为"上身效果好"

Block21436

lmage.2

新增一个关联

跨店满200减20

颜色关联

¥278.00

新势力周

¥599

样本配置

2000

抖动

目标样本总量

清空全部样本

       如上图所示,我们对设计稿中提取出的模块做了统一管理,并且对模块中的区域进行了进一步的标注。例如在上图的商品模块中,我们将图片区域标注为商品白底图,商品标题、商品利益点、商品描述以及价格等区域也分别进行了标注。这样做的目的,是为了在后续的样本生成中,可以自动生成更多的样本用于训练。在生成样本时,我们会从淘宝的商品池中随机选取一张商品白底图,替换上图模块中的白底图,其他商品标题价格等字段也是类似的处理方式。总的来说,标注得越细致,所生成样本的多样性越能得到保障。

image.png

商品标题限制十字以内

斐乐男子七分裤

555人认为"上身效果好?

550人认为"*上身效果好"

烤店满200减20

烤店满555减55

¥3895744599

新965849

¥599

商品标题限制十字以内

550人认为"上身效果好"

跨店满200减20

新州刀¥278.00

¥599

斐乐男子七分裤

斐乐男子七分裤

550人认为"上身效果好"

555人认为"上身效果好"

烤店满200减20

烤店满555减55

新川¥1554100

*¥213143958

¥599

8¥333

     完成单个模块的数据录入之后,我们会将模块组装成类似手机截屏的样式,并自动对图中的模块进行标注,生成最终的测试样本。

image.png

全局配置

12期

采用网页仿真布局

BeatsStudio3降噪无线耳机

免点

截图区域大小

满200减50

买2件9析

¥183x12期预售价¥1230

1334

750

相当于2听可乐

低至7.3元/天

间距

行列间距

边距

+

背景

618¥1035

618¥2999

618¥9999

默认(白色)

底色

12期免息

24期免息

6期免息

12期

12期

12期

背景图

请填写图片地址

免1期

免1期

免1期

素材配置

SK-I|护肤神仙水

SK-I|护肤神仙水

module_1.2

SK-II护肤神仙水

module14

dule_1.3

module_botto...

肉量1000

排3模块

已免1调限量1000

限量1000

已免1期

1排2模块

底部bar_1.5

1排4模块

已免1期

¥2150已减196.2元

¥2150已液196.2元

¥2150已液196.2元

¥196.2x11期

¥196.2x11期

¥196.2x11期

定位方式

布局模式

无特殊定位

普通排列

列表

头部固定

底部固定

5G新尝鲜

护肤神仙水

春翼小猫鞋

618

直播

主会场

我的6188

全部会场

榜单

      至此,为了训练所用的数据准备就基本完成。依托于淘宝庞大的商品数据库,我们可以根据需求,生成任意数量的测试样本,并自动完成标注。

2.训练

   我们采用的是标准的Faster R-CNN模型,具体细节可参见论文:http://arxiv.org/abs/1506.01497,模型的结构如下图所示,这里就不再赘述。

image.png

classifier

Rolpooling

proposals

RegionProposalNetwork

featuremaps

convlayers

image

     由于训练需要GPU资源,因此我们准备了一台装有2张Nvidia GTX 1080显卡的机器用于训练。从我们的使用情况来看,一般训练一个模型可以在2小时以内完成,AP(Average Precision)在95%以上。

image.png

1排2模块

小户型水磨石方桌

新中式黑胡桃书桌

北欧小户型水磨石方桌

高端性价比家具

¥980

¥989

1排2模块

北欧卧室梳妆台

黑胡桃木大书桌

高性价比黑胡桃木家具

原创设计北欧风全实木

¥980

¥3780

1排2模块

新中式茶桌椅组合

实木中式茶桌书桌

自然环保工艺精湛

流云曲面桌

¥907.5

¥3325

image.png

小户型水磨石方桌

新中式黑胡桃书桌

北欧小户型水磨石方桌

高端性价比家具

¥989

¥980

6个坑位

北欧卧室梳妆台

黑胡桃木大书桌

高性价比黑胡桃木家具

原创设计北欧风全实木

¥980

¥3780

实木中式茶桌书桌

新中式茶桌椅组合

流云曲面桌

自然环保工艺精湛

¥3325

¥907.5

       在实际使用中我们发现,如果直接训练模型对图片中的商品坑进行识别,识别的准确率并不理想,因此我们对方案进行了调整。如上图所示,我们首先训练的是一个比较粗粒度的模型,对图片中的布局进行一个识别,识别出其中的1排1、1排2、1排3、底部bar等模块。其次,我们又训练了一个坑位级识别的模型,对上一步识别的结果进行再一次的识别,最终达到的效果,可以将1排2、1排3等常规模块中的每个坑位都识别出来,也可以识别出组件中的按钮等元素。

3.部署

     最终我们需要将完成训练完成的模型进行部署。我们在训练中使用的是PyTorch,可以选择相应的平台完成相关模型的部署。


内容识别

     在对模块进行识别之后,我们需要对模块中的内容进行进一步的识别,以校验模块内容是否正确。整个校验可以分为两部分:

  1. 图片校验。基于OpenCV,校验mock数据中所使用的图片是否在模块中展示。
  2. 文字校验。基于OCR能力,校验mock数据中的文字信息是否在模块中正确显示。

image.png

//mock商品信息

"item":+

图片校验

itenIng;"TingLiconcom/bao/uploitkj

ITEmACtPrice:980".

"itemDeclaration":"高端性价比家具",

itenTitl"新中式黑胡桃书桌"

文字校验

新中式黑胡桃书桌

高端性价比家具

¥980

S9

     在实践中,首先我们会检测页面上识别到的坑位数是否与mock数据一致。其次,我们会分别检测每个坑位的图片以及文字信息是否与对应的mock数据相符合。

UI样式检测

     在智能UI模块的设计中,设计师规定了模块与边框的距离已经商品坑位相互之间的间距,但在具体实现中开发可能会有所疏漏,因此我们设计了对应的自动检测能力。

image.png

小户型水磨石方桌

新中式黑胡桃书桌

北欧小户型水磨石方桌

高端性价比家具

¥989

¥980

       以上图中的第一个坑位为例,通过目标检测我们可以从图片中识别到坑位的位置,然而由于精度问题,算法识别出的边框与实际边框存在一定的误差,因此我们无法直接通过算法识别到的坑位边框来进行边距的计算。为了解决这个问题,我们可以在生成测试页面的时候指定页面的背景色(非白色),然后基于目标检测算法识别到的坑位边框,以一定的偏移量向上/向下/向左/向右比较图片中像素点的颜色是否与背景色一致,从而定位到准确的坑位边框,最终实现边距的精确计算。

其他

       不可避免的是,智能UI中依然有部分功能需要涉及人工测试,比如线上会场的真实数据以及真实页面的校验。此外,整个自动化测试也需要留底用于日后的校验或复盘。基于上述考虑,我们也做了相应功能的开发。目前我们的系统支持mock页面的生成,也支持线上页面的获取。在截图方面,我们可以通过浏览器模拟手机页面来截图,也支持通过指定的手机真机来截图。

image.png

模拟器截图

mock页面

手机截图

线上页面

       此外,通过上文对于智能UI模块的分析可以发现,智能UI模块样式在生成的过程中,采用的是类似笛卡尔积的方式,将不同区域的物料进行了一个组合。在具体的测试过程中,特别是针对人工测试,我们认识到,没有必要对每一种样式都进行测试,只要检测的样式可以覆盖所有的物料,就可以保障模块的质量。因此,我们对每个智能UI模块生成的样式进行了去重处理,使得需检测的样式降低了一个数量级,从而大大减少了工作量。

总结

     在2020年的双十一中,我们通过上述方案对智能UI模块进行了质量保障,累计覆盖样式20000+。总体而言,整个智能UI方案接受住了大促的考验,线上未产生故障或bug,同时也为业务带来了稳定的增长,智能UI逐渐成为流量精细化运营不可或缺的新能力。


相关文章
|
14天前
|
Ubuntu API Python
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
48 1
|
2月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
70 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试的未来之路:自动化与智能化的融合之旅
随着技术的飞速发展,软件测试领域正经历着一场革命。传统的手动测试方法逐渐让位于更加高效、智能的自动化测试策略。本文将探讨自动化测试工具的演进,以及人工智能如何赋能未来的软件测试实践,提升测试效率和准确性。我们将通过实例分析,了解自动化测试工具的现状,探索AI技术在测试中的应用,并展望未来软件测试的趋势。
50 2
|
2月前
|
测试技术 Swift iOS开发
探索iOS自动化测试:使用Swift编写UI测试
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是保证船只不偏离航线的灯塔。本文将带领读者启航,深入探索iOS应用的自动化UI测试。我们将通过Swift语言,点亮代码的灯塔,照亮测试的道路。文章不仅会展示如何搭建测试环境,还会提供实用的代码示例,让理论知识在实践中生根发芽。无论你是新手还是有经验的开发者,这篇文章都将是你技能提升之旅的宝贵指南。
|
2月前
|
机器学习/深度学习 边缘计算 人工智能
软件测试的演化之路:从手动到智能化
【8月更文挑战第6天】在数字化浪潮不断推进的今天,软件测试作为保障软件质量的重要环节,经历了从原始的手动测试到现在的智能化测试的转变。本文将探讨这一演变过程,分析其背后的驱动力和未来趋势,以及这些变化给软件产业带来的深远影响。
|
2月前
|
测试技术
一款功能完善的智能匹配1V1视频聊天App应该通过的测试CASE
文章列举了一系列针对1V1视频聊天App的测试用例,包括UI样式、权限请求、登录流程、匹配逻辑、消息处理、充值功能等多个方面的测试点,并标注了每个测试用例的执行状态,如通过(PASS)、失败(FAIL)或需要进一步处理(延期修改、待定、方案再定等)。
55 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试的未来:自动化与智能化的融合
随着科技的发展,软件测试领域正在经历一场革命。传统的手动测试方法正逐渐被自动化和智能化技术所取代。本文将探讨这一趋势如何影响软件测试的未来,以及它为提高软件质量和开发效率带来的机遇。
|
3月前
|
安全 算法 测试技术
淘宝API接口测试中的安全性保障
在电商领域,淘宝API连接商家与消费者,安全性至关重要。本文探讨了确保API接口测试安全的方法与最佳实践:接口签名确保请求完整性;Token方案防抓包和数据爬取;使用Postman和Katalon Studio提高测试效率。此外,还强调了使用授权认证、数据加密、参数验证及限制请求频率等安全配置的重要性。最后,提醒测试者注意账户授权、数据格式、遵循安全规范及保持工具更新。这些措施共同保障了API的安全性和稳定性。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的未来:自动化与智能化的交汇点
随着技术的迅猛发展,软件测试领域正站在一个崭新的十字路口。本文将深入探讨自动化测试和人工智能(AI)如何共同塑造软件测试的未来,提升测试效率与准确性。通过分析当前趋势和未来预测,我们将揭示这些技术如何影响测试策略、工具选择以及质量保证流程,进而推动软件开发的整体进步。
65 1
|
3月前
|
安全 Java 测试技术
淘宝API接口测试全攻略
淘宝提供丰富的API接口以促进与平台的数据交互和功能开发。为确保稳定性和安全性,API接口测试至关重要。测试前需熟悉API文档、选配工具(如Postman、JUnit、Selenium)并在独立环境中进行。测试包括端到端、单元及集成测试,并需关注安全问题和正确的数据传输格式。通过有效测试可提升API质量与用户体验。