00:00
好,下面呢,我们来学习一下APP自动化测试的价值和体系。那这节课呢,主要是为了大给大家科普一下啊,为什么要去做UI自动化测试,APP的UI自动化测试,以及它的体系和价值,以及它的学呃技术的选型,最后我们会介绍一下学习线。首先呢,我们来看一下UI自动化测试价值,那对于APP自动化测试来说啊,很重要的一个环节呢,就是APP的UI自动化测试,很多人会认为呢,UI自动化维护的成本很高啊,性价比也低,那做UI自动化测试的价值呢,并不是很大,但其啊啊在真正的工作当中,前端UI自动化测试呢,在咱们整个的测试过程当中是非常非常有必要的一个环节,那现在呢啊,大家越来越重视的是用户体验,那么。用户和咱们产品的交互啊,是否流畅对吧,是否能够满足咱们用户真正的一个需求啊,就成为咱们这个企业非常关注的这个问题,那啊无论是接口测试,单元测试也好,那这些这些呃,代码层面的一个测试呢,也很重要啊。
01:20
它能够直接反映我们程序啊,出现的一些业务逻辑有没有问题啊,然后传输的一些参数有没有问题,但啊这些单纯的接口测试也好,单元测试也好,那不能够真实的反映咱们用户的整体的一个操作流程,操作路径,对吧?那从以往的啊工作经验来看呢,因为咱们。各种啊,各种因素啊,不可不可控的一些因素导致一些,嗯,啊这个。界面层面的一些问题,比如说我们想要发布一个功能,那想要发布这个A功能,那会导致B功能没有办法使用,这是非常常见的一个问题,那由于啊,这个开发人员啊,改修改了A这个代码块,那影响了B的代码块,这都是非常非常常见的。
02:12
所以说啊,尤其是啊,我们因为可能在线上发现了一个bug,那这个bug呢,我们在修改的过程当中啊,导致我们啊影响了产品的一些核心功能的一些场景不可用,那这个就非常严重了,所以说当我们修改了一段代码,那啊尤其是啊修改了非常重要的一段代码的时候,那。我们就需要去回归一下,就是啊,回归的测试一下已有的一些功能是否是可用的,对吧,那尤其是一些关键关键性的一些功能啊,那随着咱们工作啊,业务的项目业务的不断的啊积累。那我们需要回归的一些测试场景呢,也会越来越多,那导致的结果呢,就是我们测试人员的工作量也会越来越大,那人为的去验证一些功能点呢,可能导致一些,呃。
03:08
由于个人的因素而影响到我们测试的一个结果,比如说我们,哎,由于今天啊,可能漏测了一个点,那有可能会上线了之后,导致线上一个很大的一个问题,这都是有可能的,那通过我们自动化的手段呢,就可以大大减少啊这样的一个。现象的发生,比如说啊,我们可以去减少我们的这个啊操作的一个工作量,那也能够啊,提高我们验证的一个准确率,其实这个。啊是非常有用的,其实我们在自动化测试的过程当中呢,也分为很多种啊,比如说从提升我们测试流程的角度来看的话。或者说提升我们测试效率的角度来看的话,可以尝试着去融入一些啊,这个企业迭代流水线啊,比如说跟cicds进行一个结合,完成持续集成啊,持续交付啊,让产品,让咱们的产品快速的迭代,快速的发布啊,这是从我们提升测试效率的角度来看。然后。
04:14
还有呢,比如说哎,我们这个回归测试啊,功能测试啊,也可以完成一个啊加速的这样一个效果,那也可以啊。解放我们功能测试工程师啊,让这部分的人力呢,更专注于去呃,测试一些探索性的业务流程,比如说一些复杂的业务流程,需要人为的去呃。专注的去探索有没有一些呃,线上可能会出现的一些问题。那这块呢,就是提升提高效率的角度来看,那从提升产品质量的角度来看呢,也可以啊。也可以用多种形态啊去对我们的产品进行测试,比如说兼容性测试,那我们不同的手机机型或者不同的平台都可以安装我们的产品应用,对吧,我们可能发布到安卓平台啊,华为小米对吧?OPPO,然后iOS的平台,它的不同的版本,那同一个功能点呢,我们啊需要在不同的机器上进行一个验证,保证在每一台机器上它都是稳定运行的,那这样呢。
05:23
啊就是啊,一个兼容性测试,我们需要保证诶,它能够兼容不同的机型,不同的版本,然后第二个呢,就是专项测试。也叫非功能测试,那这个呢,主要是验证我们应用的一个启动速度,启动流不流畅,启动速度快不快,对吧,页面它是否能够正常的啊,这个快速的加载出来,然后啊,在加载过程当中,过程当中不要出现APP崩溃啊,对吧,或者说流量消耗过大,或者你一啊这个。啊,这个一开机啊,一一开启这个应用,手机就非常卡的这样一个现象,或者说手机耗电量过快,那这些呢,都是我们需要在专项测试里面进行关注的点,然后第三点呢,就是自动化的探索测试啊,也叫做即性测试啊,就是不按照我们测试啊用例,就是我们编写啊自动化测试代码的时候,会按照我们的测试用例来去编写,但是这种探索测试呢,就是不按照啊测试用例来,那我想怎么去操作就怎么去操作,一般来说都是去。
06:29
啊,随意的找一个路径,对吧,从这个路径开始点,然后啊一直啊点到一个很深的径下,发现一些产我们产品啊不容易点到的一些径,然后发现一些这些隐藏的问题,保证我们交付到用户手里的是一个很稳定的产品,因为用户他不会按照你既定啊写好的测试用例去去使用,对吧,他可能会按照各种各样的一个路径去操作它。那这就是我们UI自动化测试的一个价值,好。
07:03
那下面呢,我们来看一下我们APP啊,这个自动化测试的一个时代背景,那其实我们现在每个公司呢,它都有移动端的一个产品,那不同的公司啊,它可能发版迭代的速度也不一样啊,但是大体上来说都是,呃,原来啊几年前啊,都是按照这个按寓布,比如说一两个寓发布一次啊,这个版本更新了一个大的功能啊,但是现在呢,可能一周或者啊这个几天就发布一一次,那有的公司可能甚至是按小时去发布,有一些比如后端的这个。啊,接口它可能是按分钟按秒都有可能。每秒都有可能会有多个业务线进行发布,嗯,那还有呢,就是比如说我们现在的APP,它要发布到安卓端,IOS端对吧,微信小程序,然后H5就是这种web页。那也会导致我们要测试的这个啊,产品线测试的平台也非常的多,对吧,那还有呢,就是我们现在的测试环境也非常的多,比如说我们要在测试环境下运行,还要在联调环境下运行,对吧,还要在我们的预预发布环境下和线上环境下分别都要验证我们,诶这个功能点是不是有什么问题啊,所以这样的话就会导致我们的工作量成倍的增加,还有就是多机型,比如我们刚才说的安卓机型的话,它就一个华为手机,它的机型就非常的多,而且。
08:33
新机型又不断的涌现,对吧。那很多公司呢,都会选择一些主流的机型,进行一个主流的机型,主流的系统版本进行测试。因为机型太多了,没有办法去采购回来,这么多种机型,只能在一些主流的版本上保证它是没有问题的,那有一些特别啊,边边角角的机型,那就啊,基本上是放弃了,对吧,有一些啊啊,比如说一些国外的一些小机型。
09:01
那可能大部分的公司都不会去验证这些问题啊,这个验证这些机型上运行是否有问题啊。然后还有呢,就是多版本共存,那我们上线了一个版本之后,到用户手里之后,那比如说我们又啊啊发那个添加了一些新功能,或者说验啊这个修复了一些老的bug,那这时候我们就希望用户能够更新它,但是用户如果不去手动的更新的话,有可能我们这个啊,它用的版本一直都是一个老的版本,那这个老的版本我们需不需要去验证呢?当然也是需也是需啊,需要去验证一下的,也就是说在我们发布一个2.0版本的时候,那1.0版本我们还也是需要进行测试的,所以这样的话就导致我们的啊。测试用力成啊成倍的增加,测试用测试的工作量成倍成倍成倍的增加,对吧。那这时候呢,我们其实就是特别需要一个自动化的手段来帮我们啊,完成这个APP端移动端,或者说啊UI层面的一个自动化测试,或者接口层面对吧。
10:09
那下面我们来看一下我们UI自动化测试的一个技术选型,嗯。那对于UI自动化测试来说,那我们啊,如何去选择一个,选择一个框架对吧,或者说选择一个技术呢?那这里面给大家提供一个思路啊,比如说我们可以先去看一下我们想要测试的这个平台,它是啊普通的应用,还是这个游戏相关的应用,或者说啊图像相关的应用,对吧。那啊,现在主流的啊IM,它大部分应用都能进行测试,比如说我们这个企业微信啊,这种企业级的应用啊,或者说这种互联网的应用啊,购物软件啊,或者说这个这个这个股票软件啊,雪球那它都是可以进行测试的,那如果说你想进行啊游戏方面的测试,因为这个游戏它是对画面进行了优化,它是我们页面上的组件,它是找不到的,所以这种情况下,我们只能通过图像识别的方式来对这种页面进行一个识别,然后找到我们想要的这个画面,然后对它进行各种啊点击啊,滑动啊,实现各种操作,那这时候呢,市面上有一个air test,它可以啊,是专门为游戏开发的一个测试框架啊。
11:28
那如果你需要进行一个图像识别的话,我们可以通过air test,但是现在对于IP来说,它也支持了图像识别功能,但是它更专注于啊这个比如普通的啊,原生的应用,然后外部应用或者小程序应用。如果你想做测试就呃想做游戏端的测试,就是用l test,然后还有呢,比如说呃卡bus啊,这个玛卡卡atx。还有很多其他的这个测试框架,那其他的测试框架呢?啊,他们也有各自的优缺点啊,啊比如说这个开了式,那它就是啊,也是既支持安卓啊测试平台,又支持iOS测试平台的一个测试,那IP呢,它也是啊,同时支持两个测试平台,也支持微信小程序啊,也支持这个H5页。
12:18
那我们为什么不用开呢?开BU呢,它只是支持这个Y语言,但是IP呢,它支持多种语言,等会我们会来说啊,开BU它只支持Ruby这种语言,所以说它的这个局限性非常大,如果说我们想啊只会Java或者只会Python,那我们还需要另外去额外学一下Ruby这个语言。额外增加了一个学习成本,然后还有就是马卡卡,阿里出的一一套测试框架,它是支持这个node JS Java Python这三个主流语言的,那其实它也是啊,非常呃呃,非常适合做自动化测试的,但是相比较IM来说,Ipm更主流一些。然后还有就是atx,然后啊,对于安卓和iOS的话,他们都有各自的测试框架,比如说我们想测试的应用,那它只上线在安卓平台上,那我们就可以只用安卓啊,这个相关的一个测试框架就够了,那如果说我只上线于iOS平台,对吧,我不支,我可以不支持安卓,那我只写安iOS端的测试用例,那你就可以使用这个。
13:26
K f wda或者是s SE UI test,那这几个框架它是适合的,所以啊大家在选择一个测试框架的时候,也要看你的啊,应用是发办发布于这个啊,哪个端,安卓端还是iOS端还是都发布,对吧?那I呢,它就是既支持安卓又支持I iOS,它又支持很多种主流的语言,那下面呢,我们来看一下。那个IP它的一个优势,那这里面呢,我们啊,现在因为大部分的公司都会使用IP嘛,IP做这个自动化测试框架,然后呢,啊有一些公司它封装的测试平台底层也是集成了ipm,所以呢,我们诶啊学习的也建议大家学习这种主流的测试框架啊,一个是学习资料会非常的多,然后另一个呢。
14:15
另一个呢,就是诶,你你可以选择你想使用的语言,你也可以对多种平台进行一个测试,就非常的灵活,比如说有一天又有一个新的测试平台,新的这个测试,新的这个这个平台,比如说I安卓iOS,它又新出了一个,呃,这个W平台,那这种平台它只要集成到IP里面就可以完成这个W平台的一个测试,所以它非常方便,我们可以看一下,它支持很多主流的语言,Java Python啊,这个JS,我这个还支持Ruby,就是大部分主流的语言它都是支持的,这里面我只写了这三个。然后还有呢,就是它是跨平台的,它支持安卓iOS,然后同时也支持微信小程序H5,然后对于Windows桌面应用和Mac桌面应用它也是支持的,所以就非常的啊灵活,然后它为什么支持这么多种应用呢?其实它底层啊集成了呃很多的工作引擎,就是呃针对于安卓测试平台的一个测试框架和iOS测试平台的测试啊框架,还有Windows的一个驱动程序,还有Mac的驱动程序,它都集成到自己的框架里面,所以这就会导致它支持啊多种啊引擎的一个切换啊,在这个引擎的切换当中呢,就可以支持多种平台,然后来完成不同平台的一个测试。
15:41
然后现在因为应用的人也很多啊,所以他的社区也非常的强大,做的也很啊也很强,就是你现在遇到的一些问题,在网上去搜,几乎是都能搜到解决方案的。那下面我们来看一下,呃,对于UI自动化测试用例,我们如何去编写。
16:01
我们是我们如何编写我们的啊,自动化测试用例呢,现在很多公司都会选择啊做核心流程的啊回归,比如说我们有一些啊。我们有一些,比如说我们想去现在想去测试百度对吧,那这个百度它的核心流程呢,就是搜索流程对吧,它的核心功能就是搜索那啊现在很多公司呢,比如说一个淘宝,那他可能就会做这个啊搜索呀,这个购物啊,整个流程这样的一些核心流程的us动画测试,因为公司最直接接触的就是我们前端的页面了,我们需要在页面上执行各种各样的操作。来实现我们想要的一些功能,对吧,比如我们刚才说的搜索,然后啊下单购物,然后浏览商品,那这些主流的业务。他他一般不会是轻易的频繁的变动的,对吧,这些主流的业务用户已经使用习惯了,所以这种业务它是呃。
17:01
一般不会轻易的大动,那这种情况下,在这种啊很啊不频繁变动的情况下,我们就可以对它进行一个UI自动化测试啊,那什么样的条件适合啊,我们的自动化测试呢?那这里面呢,我给大家列举了三四个条件,一个是业务流程不频繁变动,一个是UI元素不频繁改动,还有一个就是需要啊。频繁回归的一些业务场景,就是我们每次改动一个啊,比如说改动了一个文本,我们是不是都要回归一次啊,回归一次嗯,就是整体的一个,嗯,冒烟测试的一些测试用例,那这个时候我们要选择一些啊,不频繁变动的一些场景来进行一个回归测试,如果它频繁变动的话,那我们的代码是不是要频繁的变动啊,那这也是一个维护成本啊,还不如我们自己去点一遍来的快,对吧。还有就是核心场景一定要注意啊,就是核心场景做UI自动化测试是最值的一个方向,对吧,我们要把这些核心功能,还有啊,不频繁变动的一些回归场景,还有这个业务和UI不频繁改动的这样的一些场景给它提取出来,给它啊筛筛出来进行一个UI自动化测试,那UI自动化测试呢,最大的痛点其实也就是维护成本了,对吧。
18:23
我们也刚才说了,那如果他频繁变动,那它的维护成本就会非常的高,那为了降低这个维护成本呢,那我们可以啊编写啊,我们可以在编写测试用例的时候呢。去封装,去把我们常用的一些功能给它封装起来,甚至是你可以封装一套测试框架,一套通用的测试框架啊,在你们部门啊,或者在其他部门都可以通用,对吧?然后一般来说,我们会使用一个po,然后啊去完成我们页面的封装,然后封装一些公共的组件,封装一些逻辑来管理我们的测试框架,那通过我们啊,啊去这个测试框架呢,也可以进行一些优化来解决一些,嗯,你们这个啊,业务层面通用的一些问题,比如说我们的页面的UI啊,我们页面的UI组件发生了变化,或者我或者说我们的元素本身就不稳定,对吧。
19:16
或者说页面突然临时有一个弹框,那这种这些情况下,关于我们啊项目本身业务频繁啊,出现一些啊问题导致的一些问啊导致的一些现象,那我们也可以通过UI啊测试框架,我们自己去封装的业务来解决这些问题。那尽可能的呢,就是让我们UI自动化测试用例能够足够稳定,然后便于维护,对吧,然后尽量的能够测出我们程序的一些问题,而不是说我们自己的框架本身就就有一些bug,那这样是是啊,我们是不希望看到的。下面呢,我们来看一下啊学习路线,那对于I啊,啊,我们刚才了解了,就是我们的一个价值体系,还有I它的一个。
20:12
呃,优势对吧,然后下面呢,我们就来看一下啊,我们学习IP,它整个的一个学习路线,那这里呢,我给大家分成啊五个。五个小的部分,一个是啊IP,我们的初级,初级知识,还有中级,高级,资深专家,按照大家掌握的程度,然后来啊分成这样的几个部分,那对于初级来说,就是大家需要掌握一些基础的东西,然后中级呢,就是诶在初级的基础之上再深入的增加一些知识点,然后还有就是高级,那资深呢,就是你需要了解一些原理性的东西,协议啊,然后专家就是你需要啊在掌握。I的基础之上,还需要了解一些其他的。其他的测试框架,其他的知识点,然后关于并发执行啊,我们都需要在这个专家级别需要掌握的,那下面呢,我这里给大家提供了两张图啊,就是我给大家总结的初级,中级,高级,我们分别来简单看一下,初级的话主要就是针对于IP的话,环境安装和配置,还有基本的原啊这个用例的录制和解析,还有capability我们参数的一些配置,APP如何去控制,如何去启动APP,如何去关闭APP吧。
21:30
然后还有就是我们如何定位页面上的啊,简单定位页面上的元素,然后常见的一个操啊这个啊控件的操作,控件的交互方法,比如说我们对页面上的元素进行点击进行输入,然后对输入框进行一个清空,还有获取我们页面上的一些啊元素属性对吧?它的尺寸大小,那这些呢,我们都可以在这里面知道。那最后呢,我们会以一个实战的方式带着大家使用一个真啊。
22:01
真实的一个啊项目啊,雪球APP带着大家去将我们这个初级的知识点整合起来。然后完成一个啊完整的测试用例的一个编写,然后对于中级的话,我们需要掌握的是啊,同样啊也是有这个ipm环境搭建的部分,那对于IM环境搭建它有一点复杂,那对于初级的话,我们只要求大家掌握。I的Di这个这个IDE版本的一个搭建。这个desktop,然后啊,对于终级呢,我们需要啊掌握ipm server server版本的就是我们在命令行里去完成服务的一个安装,然后我们在运行脚本的时候呢,也只需要启动这个服务就可以了,然后还有就是capability的一个进阶的用法,比如说我们啊如何去提升我们测试的执行执行效率。啊,性能方面的一些提升。还有测试策略方面的,还有就是我们啊,如果页面过于复杂,那我们如何去定位到这个页面上复杂的元素,对吧。
23:08
那这个就需要我们用到一些X pass啊,X pass表达式层级关系的一个定位技巧,那在这个过程当中呢,我们需要啊,知道它有哪些元素定位工具,那这些工具都怎么使用,那我怎么通过这些工具来在页面上查看到我们想要的这个元素,怎么编写这个表达式啊,都是这一部分。还有就是比如说我们想要定位一个特殊的空间toast,那怎么去识别它呢?还有就是呃,高级啊,这个高级的等待方式,显示等待的一个使用技巧。还有一些高级的控件交互方法,比如说我们想完成手势解锁功能啊,啊完成双击啊,双击的事件或者滑动事件,还有就是呃,设备的一些交互,比如说我们想模拟手机的打电话功能,短信功能,还有飞行模式这些场景。
24:03
还有就是通过代码的方式来控制模拟器,还有就是自动化啊这个关键数据的一些记录,比如我们在自动化测试过程当中,那出现了问题,那我们怎么去分析它,这时候呢,我们就可以把它的日志截图,还有当前页面的一个布局结构给它获取出来,然后用来分析定位我们啊实代码的问题还是页面的问题,还是由于什么原因导致的,然后最后呢,在终级我们也会有一个啊项目实战带着大家来去啊,将我们学到的一些知识点给它串串起来。然后在高级方面呢,我们就需要掌握啊自动化测试框架的一个优化,比如我们可以通过啊po来去完成自动化测试框架的一个搭建啊,包括异常的处理,日志的收集,报告的生成,还有关键字的一个驱动,参数化与啊这个数据驱动。然后呃,这个是一个实战啊,我们需要在高级啊这个方面,然后带着大家把这个框架优化起来,还有就是在高级啊这个部分呢,我们需要了解啊,对于安卓测试的web view,它的一个工作原理,然后如何去测试web view啊,微信小程序,然后同样我们也会以一个实战的方式带着大家去将这些啊技巧哎。
25:26
啊啊串联起来,掌握起来,然后对于资深这方面呢,我们需要掌握的是ipom它的一个工作原理,然后Jason啊,Wherere prooc协议啊的一个分析,还有IPO它的源码分析,还有IPO它的一个啊。啊,源码的一个改造,然后如果我们想去定制一个我们自己想要的一些功能,对吧,我们添加一个呃,元素定位方式,那我们可以在这个源码里进行一个修改,然后重新打包编译,然后编译成我们想要的一个。一个按一个运行包,然后在专家级别呢,我们就需要掌握兼容性测试,自动化便利测试啊monkey健壮性测试便利测试啊这个啊max。
26:13
还有这种多平台的自动化便利测试APP,还有多设备管理平台TF,还有啊这个。跨平台设备管理的一个方案LA grade,然后基于jacks的一个一个自动化测试调度。那在专家呢,我们就不仅仅去局限于学习I了,我们要掌握的是关于所有APP手机端的一些测试工具,然后啊,包括我们这个测试的啊,嗯,自动化测试的便利啊,性能方面,还有测试平台方面。然后呃,最后呢,我们还会啊,有一个扩展,然后给大家介绍一些经典的面试题。好,那这个呢,就是我们的一个学习路线。
我来说两句