APP的UI自动化测试框架及平台化探索,看完这篇就够了

337 篇文章 9 订阅
247 篇文章 14 订阅


一、UI能解决什么问题?

  1. 重复性的功能测试及验证
  2. 避免疲惫操作时的人为测试遗漏
  3. 通过UI自动化操作获取其他测试数据的能力

二、UI的优缺点是什么?

在实际应用中,UI自动化可以帮助我们节省人工测试成本,提高功能测试的测试效率。

缺点也是比较明显,随着敏捷迭代的速度越来越快,UI控件的频繁变更导致控件定位不稳定,提高了用例脚本的维护成本,同时定位的不稳定导致用例的可信度降低。

  • UI的应用场景

主要应用于冒烟测试、回归测试、Dailybuild等阶段。

  • UI存在的意义

存在即合理,我们可以先看下软件测试的金字塔模型。

这个模型描述了从单元测试、集成测试,到UI测试的渐进式测试过程。越是底层,用例的执行速度越快,维护成本越低。到了最上层的UI时,执行速度处于比单元测试、接口测试慢,比手工测试快的这种阶段。维护成本上比单元测试,接口测试要高。

三、那么为什么需要做UI呢?

实施起来较容易:很多同学都有过这种经历,刚开始接触测试开发时,都是先接触UI的自动化。UI的框架比较成熟,容易上手,相关学习文档比较全面。实施起来一般都不依赖于源码,是比较容易落地的一种自动化测试手段。
覆盖范围广:此项是重点。UI上的一次操作的函数触发数量可能会非常多,点击一个按钮,可能触发了内部的几十个或者更多的函数调用。从函数调用数量来看,和单元测试的一个单测用例检查一个函数的逻辑是不同的。UI操作检查的各个模块集成后模块之间的联动逻辑。是集成测试的有效手段,而单元测试是模块内部逻辑的检查。

框架优点:

四、框架如何避免或降低UI的问题呢?

首先看下架构图

1.用例编写简单,降低上手门槛

由于测试人员的代码编写能力参差不齐,让业务同学可以快速上手编写是基本诉求。在operation层,使用了业界通用的Page-Object模式,即针对页面或模块封装操作方式,这也符合我们的正常认知,在哪个模块应该有什么样的功能操作。所以我们在case层调用operation提供的接口时是非常方便的。下图是一条比较复杂的购物车测试用例。page是模块集合,main是首页接口,switchView为封装的切换操作。

2.降低用例维护成本

当UI控件发生改动时,我们需要对对应的控件定位方式进行修改。一般地,一个控件会被多条甚至几十条用例引用到,那么维护成本与引用数量成正比,引用的地方越多,维护成本越大。如何降低控件修改成本是非常关键的。

首先,需要做的是当封装的逻辑发生改变时,不会影响我们用例层的逻辑组织。

解决办法: 抽取各个模块的功能接口,在用例层调用统一接口进行操作,与具体的实现无关。具体是执行android的操作逻辑,还是iOS的操作逻辑需要在运行时判断来选择对应的实现类。既能保持调用的一致性,也可以屏蔽不同端的逻辑差异性。当android和iOS操作逻辑一致时可以卸载Adaptor里,当两端操作逻辑不一致时,需要分别在各自端的Operation中实现。

然后,当控件定位发生改变时,不会影响我们在操作层的方法封装代码,把一处控件改动对应多处引用修改的一对多关系变为一对一关系,即无论引用了多少处此控件,只需要修改一处代码。

解决办法: 为了使操作层在获取控件时与控件的定位方式解耦,在操作层通过获取自定义ID的方式来得到控件对象。此ID需要在控件的配置文件中定义好,再通过操作层之下的代理层来统一处理。

操作层的操作封装示例如下:

如上图所示,自定义ID为SearchBar,通过调用代理层的getTextBox方法来得到一个文本输入框类型的对象,并调用该接口的清除文本方法。

然后,在对应模块的XML配置文件中添加ID名及控件的定位方式。

其中dependMethod为控件查找方式,内嵌元素为查找的值。由于在编写操作方法时引用的是自定义ID,且ID不会改变。所以在Operation层封装的所有操作是不会因为控件改变而修改代码的。一对一的关系即:控件修改 —> xml配置修改。

通过以上这些设计,可大大降低我们在用例编写完成之后的维护成本。

3.底层识别框架(Appium)的可替换性,屏蔽不同框架的差异性API

有的时候,我们需要不止一套控件的识别驱动来帮助我们定位控件或执行操作。比如:如果不用appium,那么使用其他框架势必会带来一些底层的改动,比如由于API的不同而需要重写大部分的查找和操作方法。造成较大的替换成本。那么设计一套自定义的控件接口,与控件识别驱动解耦是一个好的选择,上层统一调用自定义接口进行操作,而控件的实现类可以根据你需要的驱动类进行选择或封装。

4.失败重试机制,提高用例稳定性

由于用例执行的稳定性直接决定用例在业务落地时的可信度,所以提高用例稳定性是必要的,框架提供了失败重试的机制来间接保证稳定性。即当监听到用例执行失败异常时,重新执行当前用例逻辑,如果执行成功,覆盖当前用例的执行结果;如果失败,重新执行,直到超过重试次数。

5.协助快速定位问题的能力

框架提供了日志和失败时截图进行分析和定位问题的能力。

6.数据统计的能力

用例的执行信息等数据都是由TestNG提供,再做自定义处理。

五、UI测试的落地指标

1.用例执行通过率(稳定性)

通过率的定义:(成功数 / 成功+失败+跳过数 )* 100%

一般地,执行通过率达到95%以上时,对功能测试同学的帮助才是有意义的。通过率达不到的时候会大大增加执行用例同学的运维成本。把大量时间放在了排查不稳定用例的问题上。

2.核心用例覆盖率

覆盖率定义:已实现自动化用例数 / 功能测试核心用例总数 * 100%

一般地,总有一小部分手工用例是无法通过UI来实现的,或者就算实现了也非常不稳定。也就是说达到100%的覆盖率是基本不可能的。此项指标的意义在于可以客观的反应通过自动化手段代替手工劳动的覆盖比例。一味的提高覆盖率是不可取的,保持用例的通过率,提高用例的稳定性是重点。
3.资源投入度
这个指标其实是一个通用指标,但它与我们具体的落地密切相关。更多的时候,前2个指标都会依赖于此项指标。自动化测试需要的是持续资源投入,只有自上而下的推动才能取得更好的效果,体现它该有的作用。

六、UI测试对接CI平台

由于appUI框架是线下本机环境执行和操作手机,可以搭建一个线上的公共平台来选择和触发UI的执行。作为一种常规的,自动化得测试类型嵌入到敏捷测试流程中。

以下是对接CI平台的执行简图:


最后:软件测试资料分享一波!

技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!下面有我近几年的收集和整理,整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。

愿你我相遇,皆有所获! 如果对软件测试、接口测试、自动化测试、面试经验交流。关注微信公众号:【伤心的辣条】 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!交流学习裙:313782132

推荐好文:

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

自动化测试到底要学什么?

为何跳槽不考虑腾讯?聊聊我和鹅厂的一点往事

自动化测试和手动测试哪个更高级?

新手必看:怎么写一个合格的测试用例?

python登录接口测试问题记录与解决 ( 干 货 )

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
app自动化测试框架是一种用于测试移动应用程序的工具或框架,它可以帮助开发人员自动执行各种测试任务,提高测试效率和准确性。 一个常用的app自动化测试框架Appium,它基于Selenium,可以用于测试iOS和Android应用程序。与webUI自动类似,Appium也使用一些基础知识,如元素定位和驱动设置,但是它还需要一些特定于移动应用程序的知识,如appium的使用和移动端元素定位。 在编写app自动化测试脚本时,常见的一些功能包括业务功能封装、测试用例封装、测试包管理、截图处理、断言处理、日志获取、测试报告生成和测试驱动等。这些功能可以帮助开发人员更方便地编写和执行测试任务,并提供了更好的测试结果和分析。 在具体的测试执行过程中,通常会有一个执行入口(如run)来收集和执行测试用例。测试用例可以根据需要进行封装,可以继承一些基础类(如StartEnd)来进行初始和配置,包括设置驱动、登录、关闭等操作。执行过程中会根据测试用例的顺序执行各个测试步骤,并生成测试报告。此外,还可以在测试过程中使用baseView来获取元素和执行一些基本操作。 需要注意的是,测试过程中的setup和teardown操作可能会导致在每个测试方法前后都初始一次driver,这可能会导致每次测试前后都需要关闭和启动应用程序,从而增加了测试的时间消耗。因此,在编写测试用例时需要注意这个问题,可以根据实际需求进行优。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值