暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

自动化测试:为项目迭代保驾护航

中航鲸技术 2018-10-31
649




软件自动化测试可谓是近些年来比较火热的行业,大批的软件从业者投入到自动化测试的大军中来,那么,如此有吸引力的自动化测试究竟是什么呢?是工具,是框架,还是解决方案?今天的这篇分享,想和大家聊聊自己对自动化测试的理解以及鲸技术是如何将自动化测试应用到Android APP测试过程中的。



什么是自动化测试

自动化测试,顾名思义,自动化式的测试,故其本质还是测试,只不过是通过自动化的方式来做测试。广义上来讲,一切利用工具或以执行程序的方式来代替或辅助手工测试的行为都可以看作自动化测试,比如使用Jmeter做性能测试,或者自己写段代码,用于生成1到10000个测试数据;狭义上来讲,自动化测试是指通过工具录制或编写脚本的方式记录手工测试的步骤,而后通过回放或运行脚本来模拟手工测试的过程,从而代替人工对产品功能的验证。自动化测试看上去很美好,感觉好像是第一次工业革命,开创了以机器代替手工劳动的时代,实则不然,因为每一个自动化测试的用例都是从手工测试做起的,如果没有手工测试作为基础,是没法有效进行自动化测试的。


分层自动化测试

接下来给大家介绍一下当下比较流行的自动化测试分层概念,先来看如下图中的自动化测试金字塔。

此图的含义是说将自动化测试大致分为三类,底层是单元测试,也是粒度最小的测试,中间一层是集成和接口测试,最上面一层是界面功能测试。这三类测试执行起来所消耗的时间从下往上依次增多,针对这三类测试所发现bug的修复成本也是从下往上依次增多,所以说这三类测试的投入产出比从下往上是依次降低的,因此针对这三类测试需要设计的测试用例数目从下往上依次递减是合乎常理的。那么如果根据这三类测试来实施自动化测试的话,就要讲究方式方法了,不能把所有的资源一股脑的投入到所有类型测试中,要结合项目的实际情况和对以上三种测试类型的分析,合理分配项目资源来实现分层的自动化测试。我们以谷歌公司为例,谷歌对其产品的自动化测试资源分配策略是--70%投入到单元测试,20%投入到集成和接口测试,10%投入到UI测试。


为什么要做自动化测试

在聊完了什么是自动化测试以及自动化测试分层后,我们来看看为什么要做自动化测试。


首先,自动化测试的引入在很大程度上为项目节约了成本,很多需要频繁重复执行的测试用例都可以通过自动化的方式来实现,这样一来就解放了一大批手工测试人员,他们可以用更多的时间在更复杂的测试场景中进行测试。


其次,自动化测试的引入提高了团队的生产效率,为项目的快速迭代提供了质量保障,每当有新代码签入后,可以立即触发相关的自动化测试用例执行,验证此次代码签入是否安全,这样一来自动化测试在一定程度上减少了团队在快速迭代过程中的顾虑,进而让团队可以更加从容地进行功能迭代的开发。


最后,自动化测试可以模拟很多手工测试无法完成的测试场景,最常见的就是压力测试、负载测试等,这些测试都是需要模拟成千上万的用户按照一定的策略进行某一项操作,对于这类的测试如果用手工测试来实现简直是难于上青天。


什么项目适合做自动化测试

自动化测试虽然能给我们带来诸多好处,但是它并不是放之四海皆为准的,我们在实施自动化测试之前,需要非常认真仔细的考虑我们的产品适不适合做自动化测试,一般情况下我们会从三个方面进行权衡:


软件需求变动不能太频繁--自动化测试脚本的稳定性决定了自动化测试的维护成本,如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果维护所花费成本不能低于利用其节省的测试成本,那么自动化测试便是失败的。


项目周期较长--由于自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试也就成为了奢望。


项目资源要足够--自动化测试本身就可以看作一个项目中的子项目,需要分配各种资源到自动化测试上面,比如人员招聘、设备购买、人员培训等,如果主项目本身的资源就捉襟见肘的话,对于自动化测试的开展也只能是力不从心了。


如何选择自动化测试工具

有句古语说得好,“工欲善其事必先利其器”,要想把自动化测试顺利进行下去,势必要选择一款合适的工具。在选择工具之前,我们先来了解一下自动化测试工具的分类:


按照测试对象类型来分

Web应用类,代表工具有Selenium、UFT(QTP)、Robot Framework等

手机APP类,代表工具有Appium、Monkey、UI Automator、Calabash等

桌面应用类,代表工具有UFT(QTP)、IBM RFT、Test Complete等

性能接口类,代表工具有LoadRunner、Jmeter、Locust等


按照是否付费来分

开源(免费),代表工具有Selenium、Appium、Jmeter等

商业(付费),代表工具有UFT(QTP)、IBM RFT、LoadRunner等


在了解工具分类之后,就可以结合项目的实际情况来进行工具挑选了,如果项目经费紧张,那么选择开源类的工具是明智之举;如果你的项目是在做手机APP产品,那么你就从Appium、Monkey、UI Automator、Calabash里面选择一款适合项目的工具;另外选择工具还要从工具的易用性、学习成本、流行程度、用户数量等方面综合考虑。


鲸技术Android APP自动化测试实践

在文章的最后,结合鲸技术Android APP自动化测试来向大家展示自动化测试在项目中的实际应用。首先给大家看一下项目自动化测试流程图,然后根据流程图再向大家介绍鲸技术Android APP自动化测试是如何运转的。


自动化测试项目:这个模块是自动化测试的核心,主要负责自动化测试框架和测试用例的实现,在框架的设计上使用Appium + TestNG + Maven组合驱动自动化测试,同时运用Page Object设计模式来提高自动化测试框架的使用效率。


Appium:是一个自动化测试开源工具,支持iOS和android平台上的移动原生应用、移动Web应用和混合应用,同时也是一个跨平台测试工具,它允许测试人员使用同样的接口,基于不同的平台写自动化测试代码,大大增加了测试套件间代码的复用率。


TestNG:是一个开源自动化测试框架,NG表示下一代(Next Generation)。它类似于Junit,但不是JUnit框架的扩展,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。


Maven:是基于项目对象模型(Project Object Model),可以通过一小段描述信息(配置)来管理项目的构建、报告和文档的软件项目管理工具。


Page Object:是一种当下非常流行的运用在自动化测试领域的设计模式,该模式的核心思想就是把页面元素定位和业务操作分开,对页面交互细节进行封装,这样可以使上层的测试案例更关注业务,而非页面细节的处理,提高了测试案例的可读性,同时增强了测试框架及用例的可维护性,提高了自动化测试代码的复用率。


代码托管仓库:这个模块顾名思义,是用来托管自动化测试项目代码的,使用了Git版本管理工具。


Git:是目前世界上最先进且开源的分布式版本控制系统。


通过Jenkins持续集成测试:这个模块是整个自动化测试链路上的枢纽,利用Jenkins持续集成工具将自动化测试项目和平台产品项目连接起来,自动化测试项目可以根据上游的平台产品项目的构建结果来定制不同的自动化测试执行策略。


生成测试报告:这个模块使用了Allure2 Report框架,将自动化测试的结果以更加丰富的数据指标、图形、样式展示在测试报告上面。



Allure2:是一款开源的,轻量的报告生成框架,支持Java、Python、Ruby、JavaScript、Grooy、PHP、.Net、Scala,支持Jenkins、Maven、Gradle等工具,拥有简洁的报告界面,丰富的自定义字段,可以展示无比丰富的内容到你的测试报告上。 


发送测试报告邮件:这个模块是基于Jenkins E-mail Notification插件来实现自动化测试报告邮件自动发送的,通过这个插件可以配置测试报告邮件模板,包括设置邮件标题,收件人,附件信息等,然后该插件会监听自动化测试构建执行的状态,当测试执行结束后会自动发送测试报告邮件。


到此,鲸技术Android APP的自动化测试项目就向大家介绍完毕了,希望可以通过这样一个真实的项目案例来加深大家对自动化测试的理解和认识。关于各个模块的实现细节会在鲸技术后续有关自动化测试的文章中分享,敬请期待!


时代在发展,科技在进步,自动化测试技术也会日新月异,我们要时刻保持学习的热情,这样才不会被时代抛弃!



- END -

喜欢请长按下方二维码关注我们,不关注也可以顺便点个赞,鲸技术的一路成长有你的陪伴会更好!


文章转载自中航鲸技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论