前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高效APP自动化实践进取之路

高效APP自动化实践进取之路

原创
作者头像
世平
修改2020-09-21 14:56:55
9100
修改2020-09-21 14:56:55
举报
文章被收录于专栏:世平

工作这么久,已近不惑之年,将这些年的一些经验教训沉淀下,给后来的小伙伴们分享下,希望能对大家有用。这篇文章作为开山之作吧,感谢云加社区的平台提供一席之地。

目标 - 要干啥

手机作为一个工具已经成为大家日常生活和工作的重要组成部分,APP的使用也越来越普及,在生活和工作中扮演着越来越重要的部分,其产品的研发也越发火热。有研发就有测试,有测试就想要自动化,APP的自动化工具现在也是百花齐放,不管大小公司大小产品,没做自动化感觉差点啥。本文简单介绍下从无到有做自动化,我经历的一些产品实践中的想法和经验。

自动化能用来干啥?

(1)直接测试新功能?有钱有人有时间未必不可行啊!测试驱动开发,需求分析后,自动化测试和开发同步进行,或者说先于开发进行,这是敏捷开发的一种重要实践。这个实践很好很好哈,将缺陷消灭在编程阶段,但是,好的东西它贵啊,真贵啊,要有人有能力,有时间有资源去实现。

(2)自动化不只可以用来做自动化测试,还可以做自动化环境部署,自动化数据准备,等等。根据项目的需求,还有项目的技术能力,有多少人,干多少事。

(3)回归测试自动化,这个也是大家说的最多的自动化,多用于产品的回归测试中。当产品生命周期比较长,功能点众多,后期产品逐步增加新功能,或者是修改老功能,已有功能的回归测试会越来越多,产品稳定的情况下,用自动化实现产品已有功能和重点缺陷的回归测试,是个不错的买卖,性价比比较高。

(4)稳定的输出结果,替代人工测试。测试人员写自动化就是为了让自己以后失业??呵呵,开玩笑,只要产品有新功能,就需要不断维护自动化,产品变了自动化也相应的需要去变化,我们就有了新工作要去做呀。但是不可否认的是,有了自动化后,后期回归测试需要的人力资源会愈来愈少,而且,自动化测试执行稳定,同样的用例和数据跑出来的结果也是一样的,不会出现测试同样的功能张三没发现缺陷李四发现了缺陷。

说了这么多,都没说到APP自动化。自动化的思路和原则都是一样的,区别是不同的产品和平台,使用的技术和注意的侧重点稍有不同。本文从APP自动化的角度,介绍下自动化的一些实践和方案。

方案 - 啥方法

我们要实现的APP自动化方案,简单来说,包括了自动化打包,自动化部署,和自动化测试这几个部分。如果有条件,还可以加上精准测试的覆盖率分析等实践。这些步骤可以通过持续集成工具,如Jenkins,集合中一起,根据项目需求和情况部署多种方式使用。实现这个方案可能用到的工具有:Appium,Jenkins,Android Studio,python,shell,git,svn,等。

自动化打包是指结合开发的源代码库,通过脚本或者工具拉取最新或者特定分支的源代码,将其编辑打包,生成部署包。这里注意测试包和生产包的区别,一般使用不同的脚本,或者配置不同的变量来控制。此处建议使用各自独立的脚本,避免手工设置或输入一些参数造成的失误。如果项目是基于maven的,依赖第三方的库要去下载,这个打包可能会是一件比较耗时的事情。

自动化部署是指将部署包安装到指定的环境里,启动服务以供使用。这里一般会涉及到文件的解压,拷贝,编辑,环境变量的设置,服务的启动,对多个服务器的访问,等等。一般使用脚本或者部署工具实现。有些项目也会将自动化打包和自动化部署集成到一起实现。

自动化测试指的就是测试用例的自动化。拿到产品后一般的过程是,先做测试用例设计,挑出适合自动化的用例来,做个用例评审,然后再去做自动化。这样保证好钢用在刀刃上,性价比最高。啥样的用例适合自动化呢,一个是业务决定的,一个是技术决定的?核心的业务,容易实现的业务,现有的技术水平能实现的。

选好了自动化用例后,后边就是它们的设计和实现,这个时候一般考虑要到以下几个方面。

(1)数据和用例的分离。自动化用例不是一次性的产品,写出来后被长期反复执行,才能实现它的最大价值,这就涉及到后期自动化用例维护的成本。所以我们写自动化用例的时候,就要慎重考虑到这个用例是否易于维护。数据和用例的分离是最基础的,可以提高其执行效率,因为实际测试时大都是同样的场景下要测试不同类型的数据,数据和步骤分离后就可以复用步骤,一旦发生变化时,不用到处修改。

(2)页面和操作的分离。页面的变化频率一般高于操作步骤,也就是说,页面上元素的位置可能经常变化,但是其功能时不变的,而且多个用例需要操作同样的页面元素。实现了页面和操作分离后,只需要维护一处的元素路径信息,操作中都是对它的引用而不用修改,降低其维护成本。

(3)操作和用例的分离。用例包含业务逻辑的验证点,而操作是实现业务逻辑的步骤。一个操作可能会被多个用例调用,比如说,若干个测试用例中都有创建订单操作,将此操作分离出来后,一旦创建订单的步骤发生了修改,只需要此操作的实现,用例中的步骤都是对他的引用而不用修改。

(4)执行的稳定性。自动化测试,尤其是页面自动话,还有涉及到多个产品交互的自动化,其运行稳定性是个大问题。也就是说,同样的自动化用例,这次执行通过了,下次因为网络延迟,或者其他产品响应慢,页面刷不出来,结果没有及时返回,等情况,可能就执行失败了。这个时候就要采取各种手段,来保证自动化用例执行的稳定性。一般会带来额外的开销,如反复调用系统服务,延长等待时间,等等。

(5)执行的效率。为了保证稳定性,有时候就会牺牲自动化执行的效率。比如说本来各种情况完美的情况下1s就能执行完一条用例,但是遇上网络延迟,其他产品返回结果慢等情况,可能90s才能执行成功。为了保证稳定性,加上了90s的等待时间,用例就从1s延长到了90s。此时我们也可以采取一些手段来减少等待时间,比如说轮询机制,没接到返回结果之前,多次调用查询结果方法,直到完成为止,而不是所有情况下都等待90s。

如果产品的依赖环境特别复杂,推荐一个利器,那就是挡板服务。挡板竖起来,后边服务就不用等待了,可以直接模拟各种返回结果,关注于本产品的业务逻辑即可,大大提高测试执行稳定性啊。但是,此处有好几个但是,请注意!

(1)一个是挡板测试只是模拟其他系统的返回,是否能完整模拟到真实情况,这个要打一定折扣。此处风险极高,请特别注意。

(2)一个是挡板服务的开发需要投入一定成本,尤其是复杂系统的数据模拟,各种情况各种数据不亚于开发一个后台系统,性价比需要考虑下。

(3)一个是有些服务很难或者无法使用挡板服务实现,例如没有对外暴露的接口调用,或者授权方案无法模拟,等。

(4)挡板服务也是一个独立的系统,挡板服务本身的问题也会给测试带来一定风险。

覆盖率分析可以用来检查自动化测试,或者是手工测试,的执行效果。它会启动一个独立的服务,监控代码哪些做测试时被执行,最后生成所有测试执行过的代码覆盖率报告,可以从包覆盖,文件覆盖,代码行覆盖,分支覆盖等维度检查测试执行的效果。

实践 - 怎么干

不要提前优化!一步一步来,根据现有的人力和技术实现能自动化的部分。也就是说,基于最基本的原则,先把自动化跑起来,能提高一点效率的同时,也能激发大家的兴趣,满足团队的成就感。罗马不是一天建成的,胖子也不是一口就吃起来的。先把眼前的事情做好,后续根据需要慢慢优化和增加新内容。

假设我们要实现自动化的APP产品所在产品线如下图所示,我们的自动化实现怎么做呢?

APP系统部署图
APP系统部署图

这么复杂的产品线,依赖于这么多的产品,妥妥的稳定性很不好做啊。咋办勒?凉拌啊~~哈哈哈,一步一步来。如前文所说,先做自动化打包,再做自动化部署,然后再做自动化测试,最后有条件再上挡板测试,覆盖率分析,等等。整体的测试方案实现内容如下图所示:

APP自动化测试方案
APP自动化测试方案

以上每个步骤的实践可以分批逐步实现,从上到下逐步优化。每个部分的实现如果展开来讲,内容都太多了,本篇文章难以展开讨论,此处就给出各个部分推荐使用的一些工具。

自动化打包

(1)首推Jenkins,本身就提供了界面化的连接访问各种版本控制工具的连接方式,如git,svn等等,可以比较方便的配置连接代码库,下载地址代码,然后配合Jenkins的部署命令和各依赖关系设置,环境设置等功能,可以方便的实现自动化打包。当然,前期需要使用Android Studio配置相应的环境,下载依赖包啥的。

(2)手写shell和bash脚本,甚至Java等程序。如果不想专门搭建一个Jenkins服务器实现打包的功能,可以自己手写shell和bash脚本实现打包,甚至可以使用Java,python等语言编码实现,看各位更熟悉那种技术了。

(3)其他持续集成工具。其他业界也有很多打包工具可以使用,如Ant,等。

自动化部署

(1)依然首推Jenkins。可以通过页面操作,方便集成各种工具。

(2)写程序或者脚本实现。黑猫白猫抓到耗子就是好猫,大家用最方便的就行。

(3)其他部署工具。

自动化测试

(1)Appium:脚本语言编写,成熟稳定的自动化框架,容易上手。

(2)夜神模拟器:模拟手机操作,还可以查看页面元素路径,方便实现抓取页面元素。

(3)各种脚本语言:辅助实现自动化步骤中的各种操作。

(4)其他自动化框架。

挡板测试

(1)Flask:轻便,容易上手,试错成本低,使用python实现。

(2)其他开源挡板程序,如moco,Mockito,EasyMock,jMock,JMockit,等等。

覆盖率分析

(1)NYC:分析JS代码的覆盖率,istanbul的升级版。

(2)其他覆盖率分析工具。

使用 - 咋用呢

自动化用例编写完成后,如何能最大程度发挥它的价值呢?建议是尽可能的提高其有效执行次数。很多团队自动化用例写出来后,因为维护成本高、执行时间长等各种原因,很少执行自动化,或者有些用例就不再执行。从某些角度上来说,不再执行的用例就时死的用例,不再有价值了。这就造成了很大浪费。为了减少这些浪费,建议中初期写用例的时候,不要求多。稳中求进,写出来的用例后期要维护和使用起来,才能发挥其最大的价值。

如果原有自动化用例维护成本高,建议在合适的时机,对自动化进行重构,梳理出一份可以维护和使用的用例。可以一步步做,但是请不让代码死掉,失去他们存在的意义。

如果自动化用例全部执行时间长,建议单独搭建一个跑自动化的服务器,每个版本主要功能稳定后尽早启动全量回归测试,或者是利用周末和晚上的时间,大量执行全量的自动化。

自动化执行可以根据需要分批执行不同的代码,比如版本提交后,可以执行少量的版本验收用例,十分钟内能跑完的。大功能体测后,可以跑一边主流程用例,看看其对主要流程的影响。特定场景下,比如说单独需要某个模块的测试情况,可以只执行单独模块的用例。这些都需要做自动化测试设计时,对用例进行规划,编写自动化用例的时候,将其添加到相应的测试集合中。

结束语

写到一半的时候,我就发现这个题目太大啦!不是一篇文章能讲清楚的事情。各处的细节说的不清楚的地方,后续我再补充详细说吧。以上就是这次要分享的内容了,希望对大家有一二参考,提供一些帮助。

感谢刚参加的技术创组101训练营提供的指导,让我迈出了第一步。后续继续努力!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标 - 要干啥
  • 方案 - 啥方法
  • 实践 - 怎么干
  • 使用 - 咋用呢
  • 结束语
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档