范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

ui自动化测试工具(性能自动化测试工具)

  技术联盟总坛2021-06-03 13:08小匠 闲鱼技术
  Flutter页面无法直接使用Native测试工具定位元素,给自动化测试带来很多不便。虽然Google官方推出了Flutter driver 和 Integration test,但是在实际使用中存在以下问题:
  不适用于混合栈APP,虽然appium中有相关的driver,但是无法切换环境。
  元素定位能力相对薄弱。
  依赖于VMService,需要构建Profile或Debug包。
  基于以上因素,我们并没有直接使用Google官方推出的工具,而是选择基于Native测试工具去扩展Flutter页面的测试能力。本文对Flutter driver 和Integration test的原理和实现进行了分析,同时简单介绍闲鱼在UI自动化测试的尝试方案。Flutter driver
  最早接触flutter自动化测试时,先尝试使用appium框架去驱动APP,当我们使用inspect功能去dump页面元素时发现很多元素会被合并成一个区域块,然后点击的时候只能通过xpath定位,想定位到某些具体的元素会比较困难,并且xpath其实是容易改变的,代码可维护性能力差。
  因为上述原因,我们开始调研Flutter官方提供的测试工具——flutter driver。一开始使用该框架的时候发现它只能适用于纯Flutter应用,对于混合栈应用并不适应,但是它底层提供的元素定位能力或许对我们有用,于是我们对它的源码进行了剖析,该框架的原理图1如下所示。
  图1 flutter driver原理图
  整个框架的流程交互比较简单,测试脚本在运行时,首先利用FlutterDriver.connect()来连接VMService获取相关的isolate,之后通过websocket来传输操作过程以及数据获取。其中测试脚本侧的所有操作都是被序列化为json字符串通过websocket传递给ioslate来转换为命令在APP侧执行,例如我们想要获取某个组件的文本内容,其最终生成的json结构体如下:{"jsonrpc":"2.0","id":5,"method":"ext.flutter.driver","params":{"finderType":"ByValueKey","keyValueString":"counter","keyValueType":"String","command":"get_text","isolateId":"isolates/4374098363448227"  }  }
  了解上述原理后,就可以通过构造协议格式,在任何语言、测试框架下都能够去驱动flutter测试,所以我们对这个协议进行了封装,使用Python进行驱动,这样可以在使用uiautomator2和facebook-wda的基础上来测试flutter页面,以满足flutter混合栈应用的测试需求。最终的实现代码demo如下。fromflutter_driver.finderimportFlutterFinderfromflutter_driver.flutter_driverimportFlutterDriverimportuiautomator2asu2if__name__=="__main__":  d=u2.connect()  driver=FlutterDriver(d)ifpageFlutterisTrue:#如果是flutter,则使用flutterdriver进行驱动  driver.connect("com.it592.flutter_app")  finder=FlutterFinder.by_value_key("input")  driver.tap(finder)  time.sleep(1)  print(driver.getText(FlutterFinder.by_value_key("counter")))else:  d(text="increase").click()
  我们尝试使用该套框架,发现其实flutter driver底层提供的能力相对比较薄弱,并不能完全满足我们的需求,主要问题如下:
  不能批量操作元素,一旦finder定位到的元素超过1个时,就会抛出异常。
  很多时候开发同学不写key,元素定位也没那么方便。
  因为flutter没有inspect工具dump元素,所以只能利用结合源码去写脚本,代码维护成本比较高。
  官方已经放弃维护该项目,所以后续估计也不会有新功能支持。integration_test
  前面提到,flutter官方放弃维护Flutter driver,并推出新的测试框架integration_test,那么这个框架会不会对混合栈应用予以支持呢,事实上试用了之后发现事情并没有我们想的那么美妙。在官方文档里有这么一句话"该软件包可在设备和模拟器上对Flutter代码进行自驱动测试"。
  integration_test底层的元素操作和定位还是基于flutter_test去驱动的,其优势主要如下:
  测试脚本可以使用各种Flutter的API。
  打包ipa、apk后就能在 Firebase Test Lab等设备群上运行测试,不需要额外驱动。
  integration_test的每个页面之间测试无关联,可以实现单个页面级别的测试。
  但是由于底层元素定位和Flutter driver的是一致的,所以Flutter driver存在的问题依旧存在,同时还存在其他局限问题:
  测试脚本打包到APP中,每次修改脚本都需要重新打包。
  对端到端测试不够友好,需要额外函数来等待数据加载完毕。
  不适合全链路级别的页面测试。
  可扩展性弱
  基于以上问题,不满足我们的使用需求,所以我们只是做了简单预研,并没有深入了解和应用。闲鱼UI自动化测试方案
  学习Flutter官方推出的相关测试框架之后,我们开始思考闲鱼UI自动化到底要怎么走?是站在官方的肩膀上去造轮子还是复用现有的原生自动化测试能力去扩展Flutter测试能力。在综合考虑投入成本以及测试脚本的维护难度后,我们选择使用图像处理技术来扩充原生自动化框架对Flutter页面的测试能力支持,整个测试方案架构如图2所示。
  图2 闲鱼UI自动化测试方案架构
  Flutter的元素不是完全不能被uiautomator2和facebook-wda识别,所以编写测试脚本时只需要处理不能被识别的元素即可。对于有name、label以及xpath不易改变的元素定位,我们优先使用原生定位能力进行定位操作,其他元素则直接使用图像处理技术进行定位操作。
  在处理无法使用原生能力定位的元素时,我们优先使用ocr文字匹配来进行定位,准确率较高,不容易受分辨率的影响,对于纯图片则通过图片查找的方式进行定位。对于一些常见的元素控件例如商品卡片、价格、icon、头像等,我们构建一个训练集,使用图像分类来判断元素的类型,从而实现常用控件的定位。
  UI自动化面临最大的问题就是——随着版本的迭代,测试脚本也需要进行不断迭代。所以在方案选型和脚本编写过程中需要考虑到脚本的健壮性以及可维护性。我们在实际脚本开发中将页面元素封装到单独的类中,并与测试逻辑分离,从而保证后期元素迭代时只需要修改对应的页面元素即可,减少维护成本。
  图3 脚本分层结构
  闲鱼性能自动化测试的相关UI操作已经使用该方案,在脚本编写时,并不需要区分当前页面是什么类型。我们的脚本已经稳定运行500+次,成功率超过98%。总结
  图4 方案对比
  从图4可以看出,无论是flutter driver还是integration test对混合栈的支持不够成熟,但是flutter driver可以进行一些扩展,对于纯Flutter应用而言,采用该方案能够基本满足测试需求,而integration test相对没有那么成熟,对于混合栈应用的测试,可能还是需要考虑混合栈的场景切换成本,使用一些ocr技术去做一些扩充可能成本更低,收益更大。
  致谢
  感谢SLM、TMQ提供的很多底层能力支持,让我们可以专心的做业务。
  flutter driver(https://flutter.dev/docs/cookbook/testing/integration/introduction)
  integration_test(https://flutter.dev/docs/testing/integration-tests)
  收藏举报0条评论

科普下肃遂拜蒙母结友而别有何作用关于到现在肃遂拜蒙母结友而别有何作用这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道肃遂拜蒙母结友而别有何作用,小编也是到科普下不戚戚于过去是什么意思关于到现在不戚戚于过去是什么意思这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道不戚戚于过去是什么意思,小编也是到网上收集225英寸(扫一扫自己脸型配发型)225英寸(扫一扫自己脸型配发型)108201650宅秘近年来,很多人对全屋智能越来越向往,而智能音箱便可以作为终端控制大多数家居。8月10日,小米正式发布小米Sound高保真智能吴浩康(吴浩康身高)吴浩康(吴浩康身高)香港文汇报讯(娱乐组)针对网上饭圈出现不良粉丝文化问题影响青少年身心,中央网信办深入开展专项整治。而中国国家广播电视总局也针对个别网络综艺节目片面追逐商业利益过死亡手表(格拉苏蒂官网)死亡手表(格拉苏蒂官网)你的未来还有多少时间?这款手表能在科学范围内预知你的死亡原创202104161114物联网新花样对于死亡你是怎么样理解的呢?我相信每个人对于死亡的定义都不大discountrate(discountrate怎么计算)discountrate(discountrate怎么计算)要点2008年金融危机以来,美联储货币政策执行框架经历了流动性短缺流动性过剩流动性充裕的转变。1)流动性短缺框架对应超储科普下肃遂拜蒙母结友而别有何作用关于到现在肃遂拜蒙母结友而别有何作用这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道肃遂拜蒙母结友而别有何作用,小编也是到科普下肃遂拜蒙母结友而别是什么句式关于到现在肃遂拜蒙母结友而别是什么句式这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道肃遂拜蒙母结友而别是什么句式,小编也科普下不戚戚于过去是什么意思关于到现在不戚戚于过去是什么意思这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道不戚戚于过去是什么意思,小编也是到网上收集科普下不戚戚于过去是什么意思关于到现在不戚戚于过去是什么意思这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道不戚戚于过去是什么意思小编也是到网上收集了一些与能效比(能效比3。28一小时多少度电)能效比(能效比3。28一小时多少度电)黑猫评测骁龙888Plus会更糟吗?该来的还是来了,正如我们所料,小米MIX4首发了下半年的旗舰芯片,也就是骁龙888的超频版骁龙888Plu
生活减肥小常识(生活中的减肥小妙招)生活减肥小常识(生活中的减肥小妙招)原创文章,抄袭必究!减肥期间为什么有的人坚持少吃多动,就可以瘦下来,而有的人坚持了很久就没有任何的效果呢?甚至还有可能出现身材越来越胖的现象。其ppt是什么文件(ppt是什么格式)ppt是什么文件(ppt是什么格式)PPT是微软office办公软件PowerPoint的文件格式,中文名称之为演示文稿,主要应用于很多教学商业演讲等场所,PPT可以做出很多炫酷的蔬菜花(47种最常用的摆盘花草)蔬菜花(47种最常用的摆盘花草)!涨姿势了202006010717BF花花世界热爱生活,热爱自然,想要了解更多跟花卉相关的奇闻异事,陶冶情操,愉悦身心的朋友,可以点击上方关注,我会芦笋怎么做好吃(凉拌芦笋怎么做又脆又好吃)芦笋怎么做好吃(凉拌芦笋怎么做又脆又好吃)色味俱全,不仅营养美味,还方便快手。很简单的养生菜,做起来吧!By栩栩年用料山药小半根黑木耳6朵芦笋一把大蒜2瓣盐,蚝油,淀粉适量做法步骤凉拌大头菜的做法(凉拌卷心菜的做法大全家常)凉拌大头菜的做法(凉拌卷心菜的做法大全家常)妈用料新鲜大头菜半个盐适量蒜末适量葱花适量白芝麻适量辣椒面适量陈醋适量生抽适量盐适量鸡精适量油少量香油1勺白糖1勺做法步骤1大头菜洗净切如何腌制糖醋蒜(10斤糖醋蒜的比例)如何腌制糖醋蒜(10斤糖醋蒜的比例)202105160921俏美食导语正宗糖醋蒜的腌制方法,又脆又甜又好吃,放上一年都不会坏现在正是新蒜下来的季节,每年的这个月份都是腌糖蒜的黄金季周瑜怎么死的(周瑜死后小乔归谁享用)周瑜怎么死的(周瑜死后小乔归谁享用)建安十五年公元210年,东吴大都督周瑜在返回南郡的路上突染暴疾,仅隔一天就暴毙于途中,年仅36岁。这样一位国之栋梁,在赤壁之战后仅两年正值事业巅小四号字(宋体小四号图片)小四号字(宋体小四号图片)合伙指南作者李立律师这是李立律师博客和合伙指南公众号第770篇文字合伙指南最新合同样本系列,是由李立律师制作并分享的持续性更新的系列常用合同样本2021年撒狗粮是什么意思(夫妻撒狗粮的经典回复)撒狗粮是什么意思(夫妻撒狗粮的经典回复)民网北京11月10日电(赵鹏)经常上网的人一定都听说过撒狗粮这个词。年轻网友习惯把单身人士称为单身汪,把某些情侣秀恩爱的行为称为撒狗粮。那么唇彩怎么用(唇彩怎么涂教程)唇彩怎么用(唇彩怎么涂教程)法国名模说过嘴唇不是用来说话,是用来性感,下面小编就教大家如何正确涂出性感漂亮的唇彩吧工具原料粉底,适合自己的唇彩一支方法步骤首先,选择一款粉底,比较透科普下动词加ing是什么词性Ved和Ving形式的用法关于到现在科普下动词加ing是什么词性Ved和Ving形式的用法这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道科普下动词加in