测试兵器谱の浅谈框架

上篇文章给大家罗列了测试兵器谱,简单给“十八般兵器”做了分类,今天跟大家聊一下测试框架的那些事儿。

业内流行一句话叫“Don’t Reinvent The Wheel, Unless You Plan on Learning More About Wheels”,不要重复造轮子,相信大家已经耳熟能详,并且“熟视无睹”吧?广义上的轮子往往都是一些各式各样的“框架”。暂且不讨论造轮子的对与错,先理解一下框架该如何定义。

需求的起源

框架源于人们对“复用”的诉求。它的发展路线一般都是这样的:

单从字面意思上理解,框架可以理解为针对某个领域的特定“骨架”,其内部封装了该领域内需要用到的控制流程和处理逻辑,以及基本的操作单元,而框架则支撑着这些操作单元按照一定的流程来实现逻辑行为。之所以带入领域的概念,是因为市面上有大量的行业领域,而每一种领域都需要有针对性的框架来解决特定的问题,譬如单元测试框架JUnit、BDD测试框架Cucumber、前端框架VUE、分布式服务框架Dubbo等等。

然而没有一种万能框架能解决所有领域的问题,哪怕是测试领域,也区分了单元测试框架、接口测试框架、UI自动化框架等等诸多方向。

选型之痛

虽然我们反复强调不要重复造轮子,但是在实践过程中会发现很难践行这一准则。困扰我们的有几个方面:

1.个人知识面有限,无法找到“一劳永逸的轮子”。正如我们在造轮子一样,世界上很多工程师也一样在造轮子,在已有的”轮子森林“如何检索到我们心仪的框架,并评估其价值收益,除了对个人知识面有很大的要求外,还需要有丰富的项目实践经验。

2.“爱你不是两三天”,一个框架的好坏,需要有多方面来考量:

文档是否齐全

社区是否活跃

团队的上手成本

是否存在缺陷短板

3.上手是否简单,很多人在安装配置阶段已经放弃,折腾了一整天,决定还是得自己搞来的方便,程序员都有这种体会:“读别人代码总不如自己写来得快”。

好框架的特质

个人总结有以下几点应该优先考虑:

社区活跃,保持更新,发展处于上升期(成熟期)

最好开源,文档清晰,代码规范,有优秀的使用案例

遵循高内聚、低耦合的设计原则,容易扩展,接口友好

开发语言和团队匹配,上手容易

另外,在选择框架的时候,是倾向于大而全还是小而精,要结合我们现有项目的实际情况来分析,并充分考虑到后期的功能扩展、平台扩展、产品形态变更等风险。建议让项目经验丰富的人,比如架构师来敲定框架的选型,再结合业务测试经验丰富的成员共同讨论方案,合适你的才是最好的。

介绍一些轮子

按照测试框架的特性,我把现有的一些测试框架可以分为通用框架和应用框架两种。

1.通用框架

通用框架所解决的是“普适性”问题,它可以与不同的应用框架结合起来使用,只做一些通用的流程控制。比如我们常见的通用框架有:

JUnit

TestNG

UnitTest

MiniTest

PyUnit

CPPUnit

JBehave

Rspec

Cucumber

Lettuce

2.应用框架

与通用框架相比,应用框架更关注于特定领域的特定问题。由于不同领域的特殊性,应用框架需要有很多针对性的API来解决特定的行为事务,它们通常需要和通用框架结合起来使用,才能更好的、更高效的为业务服务。

举个例子,我们常见的移动端UI自动化测试框架就是特定领域的应用框架,这里简单介绍一些:

Instrumentation:Android自带的一个测试框架. 在同进程中加载被测组件. Android4.3之后Instrumentation引入了getUiAutomation接口的实例进行跨应用测试

Robotium:基于Instrumentation框架的基础, 开发的一个更高效的框架. 对常用的操作进行了易用性的封装. 是目前使用最广的框架之一

Uiautomator:Google在Android4.3以后推出的新框架。因为Instrumentation被设计为不能跨进程测试. 所以Uiautomator就是用于弥补这个不足的.Uiautomator支持跨进程和UI级别的基础测试.

Appium:支持Android和iOS的测试框架. 兼容Webdriver协议. 可以使用Selenium的方式做Android的自动化.底层基于Selendroid和Uiautomator.

Selendroid:基于Instrumentation的一个框架. 完全兼容Webdriver协议.

Cafe:百度出品的一个框架. 基于Robotium, 并提供了跨进程的测试解决方案

Athrun:淘宝出品, 支持Android和iOS, 提供了简化的控件封装. 目前基本不维护

MonkeyTalk:一款可以在iOS及Android设备上真实的、功能交互的自动化测试的框架,支持录制回放功能,支持原生及混合的应用测试,有专业收费版

Calabash:一款同时支持Android和iOS的开源测试框架,基于cucumber框架,目前支持ruby开发语言

Robolectric:一个Android单元测试框架,可以在JVM中运行android项目,从而脱离Android环境的依赖

Monkeyrunner:Android SDK自带的测试工具,提供API模拟各种手机操作,相对于Monkey,其具备的优势是可以加入操作逻辑

Espresso:Google开源的Android UI测试框架,基于Instrumentation,相对于UIAutomator更快,API更强大,但是它不能操作系统设置,可以与UIAutomator配合使用

总结

上面内容中我们把框架理解为”骨架“,就像素描一样,先观察、再构图、然后塑造、最后调整。前面的内容帮助我们完成了”观察“和”构图“两个阶段,剩下来就需要塑造和调整。

塑造阶段建议注意三点:

数据分离

元素分离

逻辑分离

也许起初我们可能不理解做到这几点的好处,在后续UI自动化迭代的过程中,相信你会深刻体会到这三点的必要性。

剩下来的比如日志记录、测试报告、邮件通知,以及脚本的容错性、健壮性、retry、失败截图等扩展,都是根据项目实际需要进行增加。每个人有每个人的实现方式,本文不做过多的赘述。

Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181119B1L46W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券