See You Again

自动化测试框架初探-Robot Framework

在软件测试领域,自动化可谓是一个炙手可热的话题,那么如何理解自动化,自动化测试框架又是个什么鬼?本文结合工程中的一些实践谈谈对这些概念的理解。

自动化

自动化从字面上就很容易理解,他是相对人工的。人是懒惰的,不喜欢做重复的事情,他希望这类‘苦活脏活’可以自动完成,而人可以做更有创造力的事情。举个例子:以前农民收割麦子要挥镰刀一点一点割,效率低也很辛苦,后来有了联合收割机,几乎瞬间就完成了整个过程,而且直接过滤出了麦粒。

那么自动化为什么对软件重要呢,这主要由软件的特点决定的:

你会发现代码在不断地被修改,可能今天是一个丑小鸭的模样,明天就变成了白天鹅。这时候测试人员的问题来了:

额,要是也有一台‘联合收割机’就好了,它帮我去完成全功能的回归测试。遗憾的是,这种‘现成的机器’是很难找到的,原因是被测对象的业务形态太多了,比如手机APP、Web页面、服务器接口、客户端软件等等,每种类型下根据业务不同测试方案也会不同。而对于小麦来说,它的物理形态只有一种,因此可以较容易地针对它做出一个自动化机器。那是不是就没有办法了呢?

先别急,让我们再重新审视一下‘测试’这两个字,在测试过程中,我们实际在测什么?首先我们心里有一个预期,然后根据程序的输出结果,两者做比对,如果相符就认为通过;又或者我们没有预期,只是根据输出分析其合理性,如果合理就认为通过(其实是另外一种形式的预期)。反复思考这一过程,可以抽象出三个关键字:输入输出预期,理解这点很重要,可以说它是自动化测试的指导思想。

输入的形式可以是:

输出的形式可以是:

OK,到这里基本可以引入下面的主题了。

什么是自动化测试框架

自动化测试框架尝试从各类纷繁复杂的业务中抽象出一些共性的东西,它的依据主要是从测试行为中抽象出的三个关键点:输入、输出、预期。一个好的框架能够围绕这三个点提供一系列基础工具,帮助测试人员快速适配具体业务。

尽可能的减少重复劳动,是框架的共同使命。

先抛开框架,看一个例子。现在要测试一个计算器程序,已知它上面有这些按钮 C+-*/=0123456789.
这是个比较有代表性的问题,它的输入可以抽象成一个字符串,输出是由输入经过运算后得到的另一个字符串,针对一个输入我们很容易得到一个预期的值。实际的测试过程即通过不断的输入各种组合,进而对比输出和预期,从而确定该计算器是否工作正常。
这时候你很可能会做一张用例表帮助完成测试:

Input Expected Comment
12+2+2 16 加法
12-2-2 8 减法
12*2*2 48 乘法
12/2/2 3 除法
1/0 Invalid 除法分母是0
12/5 2.4 除法结果是小数

有了这张用例表,你又会想,如果有一个程序可以自动读取这张表里的 Input 然后输入到计算器程序里,并比对 Output 和 Expected ,最后生成一份报告给我,岂不是很爽?那样我就可以多想一些案例了,执行什么的交给电脑去做就好了。是的,我们希望有一个工具像管家一样打点好下面的一切,人只进行知识性、创造性的劳动。

这时候你应该想到,要考虑下自动化测试框架了。当然你也可以自己去实现,但是没必要重复造轮子。下面看一个流行的自动化测试框架的实际表现。

Robot Framework初探

RF是用 pyhton 实现的一个可扩展的关键字驱动的自动化测试框架,从官网上可以看到它的特性及设计思路:

结合实际使用,我们看看RF作为一个测试框架都做了哪些工作:

  1. 有一套自己的语法
    RF用了一套表格形式的语法,降低了对编程能力的要求。可以理解为专门针对测试的语法。常用的基本语法:创建变量、关键字,判断,循环,赋值,执行语句
  2. 多种输入输出支持
    借助内置及扩展库,RF可以很方便对各种类型的输入输出进行控制,常用的库:SSH、XML、DB、HTTP library、Screenshot、AppiumLibrary、Android Library、SeleniumLibrary
  3. 内置一系列针对测试的工具函数集
    比如在判断输出是否符合预期这方面,RF就提供了很多关键字:Should Be EmptyShould Be EqualShould Be TrueShould Contain X TimesShould MatchShould Not Be Equal As StringsShould Start With
    其他比如类型转换、循环控制、执行 python 语句、日志等若干围绕案例执行的工具函数集
  4. 其他
    生成报告、跨平台、易扩展、易集成、支持多种形式的测试用例(关键字驱动、测试驱动、行为驱动)

根据这些特性,就很容易做上文中‘计算器程序’的自动化了:先用RF的语法写一个模板Calculate(接受两个参数),后面的测试案例在此模板上做数据驱动即可。

模板(其中Push buttonsResult should be是对测试对象的抽象):

  1. Calculate
  2. [Arguments] | ${expression} | ${expected}
  3. Push buttons | C${expression}=
  4. Result should be | ${expected}

数据案例(两个参数):

  1. 12+2+2 | 16
  2. 12-2-2 | 8
  3. 12*2*2 | 48
  4. 12/5 | 2.4

小结

自动化是需要成本投入的,要根据项目特点进行评估。自动化测试框架提供了一种通用的方案,但往往也需要针对具体业务进行开发扩展,也有一定的学习成本。

测试案例的积累也是重要的财富,通过自动化的实施可以快速地进行回归测试,减少发布风险。

本文介绍了自动化实践过程的一些理解,其中有一些名词后面有机会再展开。最后引用一句话: To be or not to be, that is a question.

参考资料:

(完)

2015-10-30 喜欢

Copyright © 2015-2018 转载请注明出处

回到顶部 ↑