《云栖TechDay》第9期:钉钉客户端自动化的应用

简介: 在4月9日的云栖TechDay活动上,卞伟为大家分享了钉钉客户端自动化的应用。钉钉产品是阿里的一款企业级IM工具,版本更新也很迅速,在迭代过程中,团队通过UI自动化对核心功能进行验证,节约回归的人力成本,并在自动化框架的基础上,针对特定场景的性能、弱网下的聊天功能也进行了自动化的改造。

49日的云栖TechDay活动上,卞伟为大家分享了钉钉客户端自动化的应用。

钉钉产品是阿里的一款企业级IM工具,版本更新也很迅速,在迭代过程中,团队通过UI自动化对核心功能进行验证,节约回归的人力成本,并在自动化框架的基础上,针对特定场景的性能、弱网下的聊天功能也进行了自动化的改造。

 

下面是Tech君整理的技术观点。

 

 


简介


钉钉是一个工作方式。从需求的层面出发,钉钉是一个IM聊天的客户端工具,对于用户而言,最关注的是APP的实际运行的效果,所以主要针对安卓和iOS进行测试,PC和外国版目前也是通过人力测试来保证的。测试的场景有功能场景(包括核心场景、聊天场景、设置场景等)、弱网场景。

 

46e564c4f29f8073d1ac10d5870e861b86efd72d

1自动化的结构

自动化的结构,最核心的是UI操作。作为UI自动化肯定要有一个机制去驱动界面的元素识别和UI操作,安卓和iOS分别使用了两套基础UI操作库。安卓是一个叫Sword的内部操作框架的一些实现原理,与appium比较类似;iOS采用的是苹果原生的instrumentsUI Automation)。 UI操作是最核心的功能,在此之上,如果把它自动化建立起来,在它的外围就需要有一个基础库,所谓基础库,比如case运行的信息打印、日志收集,包括设备本身产生的一些日志等,这是作为辅助排查问题的手段,截图跟日志的功能相辅相成,还包括配置、变量管理等。接下来是测试框架,选用的是常见的junit,并且在其之上做了一些自定义runner的封装。最外层CIjenkins去执行,PTM工作台让客户端测试的人也能去方便的发现执行和查看结果,分布式执行是指把case分成不同的模块,和不同的等级,根据需要去驱动不同的等级和模块的case执行,万一需要全量执行,就采用分布式的方式在不同的机器、不同的手机上去执行,再做一个结果的汇总。报表邮件是自动化的延伸,让执行者和开发者能清楚的知道case运行的效果怎么样。

  


应用


基础自动化


基础的自动化是核心,在它周围有一些功能、性能、弱网。基础自动化是多机执行的,用sword作为安卓自动化的元素驱动,比如,多机case在聊天、设置、ding各个场景上都会用到,在业务utils封装上肯定也要考虑到多机执行。多组执行就是分布式执行,要考虑时间、设计系统配置,运行时在两组之间是并行执行,统一收集,在一组之间是串行执行的。多场景配置,比如,运行一个全量或核心的case,全量的case两百多个,三四十分钟,有时候可能只需要去验证很关键的点,在不会对其他的功能造成影响的情况下,就可以运行最核心的case。还有,性能case、弱网case也是通过场景列表的方式传给自动化的框架的。  


功能自动化

 

c70dadf040fc16edc3fad5fc0771386e8d7fa123

2 PTM工作台

我们有一个PTM工作台提供给客户端测试的人,他只需要去关心怎么发起执行,怎么查看执行结果,怎么判断当前版本的健康程度。经过简单的配置之后,它就可以执行并且收到一些结果。

 

52533e545db0b40561594193819cb9c3a1270ad6

3结果展现

在这个结果中可以看到,最上面是一个简单的统计。比如,这次运行用了多少case,跑了多少时间,是否有疑似crash。运行的是哪个版本,通过了多少,失败了多少,有多少个被跳过的。每个case,它的状态是通过或者没通过,如果这个case失败了,自然有相应的截图,每个case之外的截图都有展现。比如,第一台设置在哪个界面,每个操作按照时间顺序一一记下来,并且作设备的标注,这样就方便事后复现在自动化中发现的一些问题。


性能

 

性能测试有两个需求:

第一,   在业务中人工去测试APP的时候,做一些监控,比如,监控cpumem等等。

第二,   在自动化里面做一些固定的场景,就要去评判做一些很简单的功能case,然后把新功能的数据采集到,性能case就可以这样做出来了。

所以性能测试的流程就是初始化操作,采集数据(包括cpumem、流量、电量、响应时间),按照功能自动化的时间把功能一步步用自动化的case写好,结束采集,上下滑动或者左右滑动去采集FPS。这些指标怎么去获得的呢?流量可以通过安卓系统希望文件直接获得上下行流量信息。加载时间通过打点的方式去做,通过服务端和客户端埋点日志。CPU由安卓系统本身拿到。内存可以通过安卓dumpsys meminfo拿到。电量把一个简单APP装载在手机上,根据时间方式来获得最终的电量消耗,APP装在手机端通话时,采集的时候去交货。FPS使用安卓的SurfaceFinger

 

361d3a532cd17e56092efd005571eaddee62cdbb

4指标信息

图中,在不同的场景看它的每个指标的信息。比如,首次打开、首次登陆、非首次登陆就有五百条未读信息等等。不同场景列下来,每一个场景有不同的性能指标。

d5d3cb9585ecc0683ac479ad1e35bf983c301ddf

5钉钉Android最近三个版本性能消耗

图为最进三个版本的性能消耗的对比,我们可以和历史数据进行比较。通过自动化采集信息的时候,我们都会给它一个版本,每次在采集数据的时候在数据库里会有记录,当需要版本对比的时候,直接拿历史数据进行对比就可以知道两个版本之间或者三个版本之间的差异有多大。

   


弱网

 

0b4375c2357aed5855ced2283bab94f8e46da24f

6网络类型的速度

弱网测试是一个很实际的例子,2G3G所谓的3.5G到最后的4G不同的就是移动通信的标准,它对速度的标准要求差别是比较大的。ITU规定的第三代移动通信无线传输技术的最低要求中,必须满足在以下三个环境的三种要求。即:快速移动环境,最高速率达144kb/s;室外到室内或步行环境,最高速率达384kb/s;室内环境,最高速率达2Mb/s。在实际的应用、测试当中,离这个标准差的还是很远的,2G下载是12kb/s,到4G是比较快的,离真正的ITU标准还是有一定距离的。那么,在不同的网络情况下,怎么样进行弱网测试呢?

 

98316416cd7231471692f584b06fa8593b8bfb44

7屏蔽箱的使用

屏蔽箱的手段是指,一个屏蔽箱隔绝了所有的信号,把手机放在屏蔽箱后,按照一定的设备通过显现式把它放大然后再衰减,先将它放大到一个值,然后再信号衰减,让我们方便控制衰减到一定的值时,把信号引入屏蔽箱中。在这种场景下,可以比较方便的进行弱网下的模拟和相应的测试。

 

26ad1af6e5e7883aefe1442afe56afd907c02eff

8更简单的方案

但是,屏蔽箱比较昂贵,怎么办呢?有一个更简单、更便宜的方案。用树莓派加上开源的弱网控制模块(FacebookATC)去达到模拟弱网测试的效果,就可以设置上下行流量等等。把手机连接WIFI时,树梅派实现模拟弱网的测试,这也是不同场景弱网的一个消耗。

   

 

执行

 

f4ba36db7020c43bbaf88eb96dc6f8951a92b90f

9问题分类报告

 

767454761daedaf1a16f5ea13c7d0d4d7c1e642c

10分析汇总

执行层面还有哪些需要去解决?客户端同学通过PTM工作台发起case,怎样评判效果?或者发现case失败了,怎么看case是因为什么原因失败的?我们对自动化进行专门维护,针对失败进行分析,把失败的原因分类通过这个报告记录下来,下一次客户端同学可以根据这个分析结果进行判断,比如,它的每一次执行,每个分类去分析每个结果。

 

我们现在采用的策略是什么?一方面是执行,执行是指每日构建,每天至少跑一次针对mate版本去进行完整的构建,每周发布、每周报告。另一方面是维护,维护是外包的专人维护。目前的case数量在UI层面比较多,安卓和iOS加起来大概有三四百个,满足性能的case有一百多个,弱网大概是几十个,因为UI自动化成本比较大,只有最核心的功能评估后才放到UI自动化的层面做。

 

 

 

关于分享人

6c76a12d4b66c09c49af0e74b708b7e051d2993b

卞伟

 

2009年加入百度,负责网页搜索核心模块测试,包括服务端模块的自动化、性能测试等,后负责众测平台、自动化测试框架的开发;2014年加入阿里巴巴,主要方向是手机端应用(来往、钉钉)的安卓端UI自动化建设,目前主要负责微应用的H5功能、性能等测试。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3天前
|
Java 测试技术 持续交付
自动化测试框架选型与实战:深入探索与应用
【5月更文挑战第8天】本文探讨了自动化测试框架的选型与实战应用,强调了其在软件质量保障中的重要性。选型原则包括考虑项目需求、技术栈、可扩展性和可维护性,以及社区支持和文档。介绍了Selenium、Appium、JUnit和Pytest等常用框架,并概述了实战应用的步骤,包括明确需求、搭建环境、编写测试用例、执行测试、分析结果、维护代码和持续集成。合理选型与实践能提升测试效率,保障项目成功。
|
4天前
|
JSON 前端开发 JavaScript
快照测试在前端自动化测试中的应用
在前端自动化测试中,快照测试常用于检验组件渲染与布局。
|
11天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用移动应用的未来:跨平台开发与操作系统的融合
【4月更文挑战第30天】随着软件开发周期的不断缩短,传统的软件测试方法逐渐显得力不从心。本文将深入探讨自动化测试在敏捷开发环境中的关键作用,分析其如何提高测试效率、减少人力资源成本,并确保软件产品的质量与稳定性。通过案例分析,我们还将讨论实施自动化测试的最佳实践和面临的挑战,为追求高效敏捷开发的组织提供参考。
|
11天前
|
数据采集 机器学习/深度学习 人工智能
自动化测试中AI辅助技术的应用与挑战
【4月更文挑战第30天】随着人工智能(AI)技术的飞速发展,其在软件自动化测试领域的应用日益增多。本文探讨了AI辅助技术在自动化测试中的应用情况,包括智能化测试用例生成、测试执行监控、缺陷预测及测试结果分析等方面。同时,文章还分析了在融合AI技术时所面临的挑战,如数据质量要求、模型的透明度与解释性问题以及技术整合成本等,并提出了相应的解决策略。
|
11天前
|
前端开发 IDE 数据可视化
深入理解与应用自动化测试框架Selenium的最佳实践
【4月更文挑战第30天】 本文将深入剖析自动化测试框架Selenium的核心原理,并结合最佳实践案例,探讨如何有效提升测试覆盖率和效率。文中不仅涉及Selenium的架构解析,还将提供针对性的策略来优化测试脚本,确保测试流程的稳定性与可靠性。通过实例演示,读者可以掌握如何在不同测试场景中灵活运用Selenium,以及如何处理常见的技术挑战。
|
11天前
|
敏捷开发 监控 前端开发
深入理解与应用自动化测试框架:以Selenium为例
【4月更文挑战第30天】 在软件开发的快速迭代周期中,质量保证(QA)团队面临持续的压力,需确保产品在每次发布时都达到预期的质量标准。为了应对这一挑战,自动化测试成为了关键工具,它不仅提高了测试效率,还确保了测试的一致性和可重复性。本文将探讨自动化测试框架Selenium的核心组件、工作原理及其在实际测试中的应用。通过分析Selenium的优势和面临的常见问题,我们将讨论如何有效地集成Selenium到现有的测试流程中,以及如何克服常见的技术障碍。我们的目标是为读者提供一个清晰的指南,帮助他们理解和利用自动化测试框架来优化他们的软件测试实践。
|
12天前
|
机器学习/深度学习 人工智能 算法
人工智能在电气自动化控制系统中的应用及实现
人工智能在电气自动化控制系统中的应用及实现
17 0
|
12天前
|
IDE 测试技术 持续交付
探索自动化测试工具Selenium的高效应用
【4月更文挑战第29天】 在快速迭代的软件开发过程中,高效的测试策略是确保产品质量的关键。本文将深入探讨如何利用自动化测试工具Selenium来提高软件测试的效率和准确性。通过介绍Selenium的核心功能、脚本编写技巧以及与持续集成环境的集成方法,我们旨在为读者提供一个全面的Selenium应用指南。此外,我们还将讨论常见的问题解决策略,并通过案例分析展示如何有效地运用Selenium进行复杂的Web应用测试。
|
12天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
12天前
|
监控 前端开发 jenkins
Jenkins在前端项目持续部署中的应用,介绍了Jenkins作为自动化部署工具的基本概念和流程
【4月更文挑战第29天】本文探讨了Jenkins在前端项目持续部署中的应用,介绍了Jenkins作为自动化部署工具的基本概念和流程。前端持续部署涉及代码提交、构建、测试和部署四个步骤。实现过程中需配置代码仓库、构建、测试和部署任务,安装相关插件并确保环境一致性。注意事项包括代码质量控制、环境一致性、监控预警和安全管理。通过Jenkins,可提升前端开发效率和质量,但需不断学习以应对技术发展。

热门文章

最新文章