教育房产时事环球科技商业
投稿投诉
商业财经
热点动态
科技数码
软件应用
国际环球
晨报科学
新闻时事
信息智能
汽车房产
办公手机
教育体育
生活生物

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条评论

平板充电慢是什么原因(平板为什么充电很慢怎么办)平板充电慢是什么原因(平板为什么充电很慢怎么办)有用户发现,在夜间为iPad充电之后,会显示充电标识,但早上起来查看电量仍然没有上涨,或上涨的比较少。遇到此类iPad充电缓慢或无法平板充电慢是什么原因(苹果平板充电慢是什么原因)平板充电慢是什么原因(苹果平板充电慢是什么原因)用户发现,在夜间为iPad充电之后,会显示充电标识,但早上起来查看电量仍然没有上涨,或上涨的比较少。遇到此类iPad充电缓慢或无法充平板电脑通话版(可以插卡打电话的平板有哪些)平板电脑通话版(可以插卡打电话的平板有哪些)PConline单机评测现在的平板市场领域,更新换代速度非常之快,产品已完全覆盖了高中低市场。不可忽视的是,在每个不同的消费领域中,在一苹果平板电脑软件(苹果平板电脑怎么使用)苹果平板电脑软件(苹果平板电脑怎么使用)很多人都做过类似的分享了,更多更详细的也有很多,我这里只是简单分享一下这半年来个人使用过觉得不错的APP。Part1计划amp效率这一块其实科普下错题整理该如何整理错题集关于到现在科普下错题整理该如何整理错题集这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道科普下错题整理该如何整理错题集,小搜集收集(如何搜集和整理写作资料)搜集收集(如何搜集和整理写作资料)搞好写作资料的收集和整理对文字写作有着十分重要而且非常直接的作用。古今中外,凡在写作上有显著成就者,都与大量收集积累写作资料有关。如法国的科学幻想如何整理衣柜(家庭衣柜整理衣服诀窍)如何整理衣柜(家庭衣柜整理衣服诀窍)天到了,又到半年一度的换季整理大环节。衣橱自来都是物品堆积最多的地方,也是让人最头疼的地方。望着凌乱不堪的衣柜,你已经迫不及待想要整理好这些服饰磁盘碎片是什么(如何整理电脑磁盘碎片)磁盘碎片是什么(如何整理电脑磁盘碎片)很多电脑小白都会问这样一个问题,为什么之前我用的机械硬盘用一段时间电脑就会变慢,用个一两年可能就需要重装系统。这个时候问电脑高手的话,高手总说电脑桌面日历(日历安装到桌面)电脑桌面日历(日历安装到桌面)忍心卸载,强烈建议收藏202106261529知识与技能分享7款好用的电脑软件,每一个都很实用,不管是工作学习,还是生活中都能用得到!1Dropit文白衬衫黑裙子(白衬衫黑裙子配什么)白衬衫黑裙子(白衬衫黑裙子配什么)为了提升服装时髦度,大部分人都把焦点放在了款式上,恨不得把所有的潮流元素都穿在身上。但实际上,服装的时髦度与款式关联不大,反而是色彩起到决定性作用长裙配什么鞋子(粉色裙子配什么高跟鞋好看)长裙配什么鞋子(粉色裙子配什么高跟鞋好看)天气变暖,终于到了能穿裙子的时候啦!一到春天,各种美丽的裙子就能派上用场,光是想想就觉得开心,尤其是最显气质的长裙。今天,我们列出了八种鞋
寓言的特点(寓言故事的三大特点)寓言的特点(寓言故事的三大特点)君阳随笔庄子说寓言十九,借外论之。(寓言)由此可见,寓言一词在庄子中已出现。但庄子的所谓寓言,义为寄托之言,就是假借别人的话,论说自己的理。依庄子看秦腔的特点(秦腔的三大特点)秦腔的特点(秦腔的三大特点)岁月轮回情不老,丹心映得长夜明秦腔现代戏陕北往事近日亮相陕西西安,回溯革命历史,展现陕北人民家国情怀。动人的情节和细腻的表演让观众不时落泪,掌声雷动。2白色牡丹(白茶和白牡丹茶的区别)白色牡丹(白茶和白牡丹茶的区别)白茶和白牡丹茶的区别是什么呢?白牡丹茶属于白茶,与白茶是一种归属关系,两者之间是存在一定差异的,具体的区别如下!白牡丹茶的简介白牡丹茶属于白茶类,为秦皇岛景点排行榜(秦皇岛三日游最佳安排)秦皇岛景点排行榜(秦皇岛三日游最佳安排)202107221717寻味秦皇岛秦皇岛有许多好玩好看好吃的地方,在河北地区秦皇岛的旅游资源非常丰富多样,可以满足不同人群的需求,那么接下来知识另的部首和结构是什么关于到现在另的部首和结构是什么这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道另的部首和结构是什么小编也是到网上收集了一些与另的深圳好玩的景点(深圳最著名的十八大景区)深圳好玩的景点(深圳最著名的十八大景区)深圳市经济特区,你去旅游,应该去哪里玩呢?我觉得你应该去这些地方看看。1世界之窗,位于南山区。门票220元,70周岁以上老年人凭身份证免票。知识寄小读者是中国什么文学的奠基之作关于到现在寄小读者是中国什么文学的奠基之作这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道寄小读者是中国什么文学的奠基之作小编也古罗马神话电影(希腊和罗马神话电影)古罗马神话电影(希腊和罗马神话电影)上回我们讲到提比略及其养子平定了北日耳曼地区叛乱的故事,这回我们首先把时间线往前推,讲讲提比略这家伙是怎么当上帝国的第二位奥古斯都的。屋大维本人青梅竹马的意思(好看的青梅竹马甜宠小说)青梅竹马的意思(好看的青梅竹马甜宠小说)在同学聚会或者是亲朋好友的聚会中,青梅竹马,总能勾起人许多的回忆。可能有人会说我小时候没有喜欢的女孩,不存在有青梅竹马。首先,我来消除大家一好看的国产喜剧电影?(国产十大经典喜剧电影)好看的国产喜剧电影(国产十大经典喜剧电影)喜剧片的一大好处就是放松心情,愉悦身心,新时代大家工作生活亦或者学习压力都比较大,看喜剧的好处是可以开心,可以笑。俗话说得好笑一笑,十年少mp3转cda格式转换器(手机kwm转mp3格式转换器)mp3转cda格式转换器(手机kwm转mp3格式转换器)软件版本软件大小软件授权适用平台VistaWin7下载httpdl。pconline。com。cnhtml21124id64