浅谈FitNesse

2013-11-07  李龙龙 

浅谈Fitnesse测试框架 (一)

最近在工作中开始接触到一个新的开源测试框架Fitnesse,其主要用于Acceptence Testing。由于相关的中文资料真是少之又少,小弟就斗胆在此班门弄斧一下,供大家拍砖。
  要谈Fitnesse,我们首先要先来了解一下FIT(Framework for Integrated Test),从字面翻译过来也就是集成测试框架。在软件开发过程中,沟通是一个非常重要的环节。往往由于一个需求的误解导致整体项目进度的滞后,而FIT的出现恰恰是很好解决了沟通这个问题。
  FIT允许客户和测试人员通过表格的方式(如MicroSoft Excel),来告诉Programmer需求所希望的结果是什么。FIT通过相应的Fixture代码来自动确认需求是否被正确实现。
  也就是说,我们把复杂的需求转化成为了一个又一个简单易懂的Table。
 
 Fitnesse就是基于FIT的工作原理,但是Fitnesse它本身是一个Wiki,也就是说我们可以通过Wiki来管理我们的测试用例(也就是相应的Table),同时我们也可以在Wiki上来展现我们的测试结果,这样更加有助于我们进行测试用例的管理和Report的展现。

附件是Fitnesse的安装包
1.下载Fitnesse.zip安装包,
2.把Fitnesse.zip解压到本地
3.启动Run.bat文件,默认启动端口为80。若80端口已经被占用,可以通过记事本打开Run.bat文件,在后面加入“-p 端口号”,再保存运行即可。
3.打开浏览器,输入http://localhost:80,看到Fitensse首页面,就表示Fitnesse已经正确启动。

浅谈Fitnesse测试框架 (二)

Fitnesee测试框架中有两个不同的测试方法,Slim和Fit。在工作中发现两者有不同的使用用途和方法。只有分析清楚了两者的区别和共同之处,才能选择出正确的测试方法来提高工作效率。
  Fitnesse的默认测试方法是Fit,要使用Slim进行测试的话,需要在测试Page中指定
  !define TEST_SYSTEM {slim} 我们可以把TEST_SYSTEM理解为系统变量。当然我们也可以用Define来定义一些用户自己的变量,这个就以后再写了。
  Fit方法会从Fitnesse得到传来的Html文件,解析后和Fixture关联来执行Case,而Slim直接从Fitnesse中得到Html中的内容,因此Slim更加的轻便,有更好的独立性。
  每一个测试类型都有自己对应的TestTable类型

  Slim的TestTable如下
 

Decision TableSupplies the inputs and outputs for decisions. This is similar to the Fit Column Fixture
Query TableSupplies the expected results of a query. This is similar to the Fit Row Fixture
Ordered query TableSupplies the expected results of a query. The rows are expected to be in order. This is similar to the Fit Row Fixture
Script. TableA series of actions and checks. Similar to Do Fixture.
Table TableWhatever you want it to be!
ImportAdd a path to the fixture search path.
CommentA table that does nothing.
Scenario TableA table that can be called from other tables.

  Fit的TestTable如下
ColumnFixtureThis is the style. you may end up using most: rows of data represent inputs and expected outputs.
RowFixtureThis is good for testing queries that should return an exact set of values (order-independently).
ActionFixtureThis style. allows you write a script. that emulates a series of events (such as controls manipulated on a user interface).
Comment TablesSometimes you want a tablular comment that is not executed as a test.
   两者有相似的几个TestTabel 如Decission Table对应ColumnFixture等等。

   Fit接受输入Null代表空指针,Blank代表空的字符串,而Slim不接受,因此对于Slim的输入,我们需要写一个Converter来进行转换。类似于

public String converter(String input)
   if(input.equals("null")
       return null;
   else if (input.equals("blank"))
       return "";

这样也就解决了转换的问题。

很晚了,睡觉去了,明天继续研究Fitnesse

 

浅谈Fitnesse测试框架 (三)

上次在第二季中介绍了Fitnesse中不同Table的类型。最近在工作中一直有遇到使用Action Fixture。在这里分享一下使用后的感受。今天先介绍一些Fit中的Action Fixture。
  有一个需求大概就是说,addStudent(int i)这个函数会每次增加学生的数量,count()这个函数则是统计学生的数量。那么在测试过程中,我们需要先增加学生,再看看学生数量是不是已经正确增加。这个时候我们发现用ColumnFixture是很难完成的,这个时候我们就想到了选择Action Fixture。它可以让我们按照Case的流程来设计我们的自动化脚本。先来看看我写的ActionFixtureCode

Package QUERY;

public class StudentFixture extends Fixture{
    private int student;
   
    //initlize the student num to zero
    public void init(){
        student =0;
    }
   
    //add the student num by i
    public void addStudent(int i){
        student=student+i;
    }
   
    //return the student num
    public int count(){
        return student;
    }
}
       

别忘记要引入fitnesse.jar,编译好生成的StudentFixture.class在D:\Eclipse_WorkSpace\Fitnesse\bin目录下面,接下去我们要去编写我们的Fitnesse的表格了。
   启动Fitnese.bat,新建一个测试Page叫StudentTest

!path D:\Eclipse_WorkSpace\Fitnesse\bin

!|Action Fixture|
|start|QUERY.StudentFixture|
|press|init|
|enter|add student|1|
|check|count|1|

点击保存以后,在Wiki里面点击Test按钮,我们可以看到执行结果如下
 FitNesse验收测试管理工具

简单介绍一下table的设计要点

1.首先要在!Path中声明我们的Fixture的类路径,不要包括包在内
2.先声明是Action Fixture
3.start表示要启动那个Fixture
4.Press是要invoke一个void,且不带参数的函数
5.enter是要invoke一个带有参数的,void的函数
6.check就是对于一个有返回值的函数进行期望值的比较

这样在这个case中,我们先初始化环境,然后给学生人数加1,然后再统计人数看看是不是返回了1.这样一个简单的Action的case就写好了

浅谈Fitnesse框架(四)

 Fitnesse已经使用了一段时间了,对Fitnesse也有了一定的了解。正好最近项目开始空了,所以在这里做一个总结。


  也许处于项目的开发模式的原因,我们对于Fitnesse的使用似乎并没有体现出Fitnesse的加强沟通的左右。对于我们这种传统的瀑布模型的开发方式来说,Fitnesse似乎只是变成了一个自动化测试框架。根据Fitnesse官方的说法,Fitnesse是更多的适用于TDD(测试驱动开发)的发展模式。在我看来Fitnesse也更加适合Agile敏捷开发的模式。因为对于敏捷开发而言,我们需要更多的是沟通,Fitnesse的Wiki可以成为一个非常好的沟通的媒介。
  但是我们也需要思考一个问题,我们如何在敏捷开发中真正的去实施Fitnesse呢?首先的一个问题就是分工,对于Fitnesse而言是由两部分组成,一部分是Wiki,一部分是Fixture。两者看似不同的却有着非常紧密的联系。那么这两个部分是应该都有测试工程师来负责,还是说可以让BA,也就是产品人员更多的加入呢。我个人觉得其实应该让产品人员更多的参与到Wiki的编写中去。因为相对于Fixture而言,Wiki的语法相对比较简单,而且Fixture也是基于Wiki来构建的,所以可以说先确定了Wiki,再去写Fixture。相信这个也是Fitnesse本身的初衷吧。
  Fitnesse的Wiki脚本在使用中也存在很多弊端,比如说它的语法结构相对来说比较麻烦,起码没有一个自动纠错机制,而且对于错误的处理也很不清楚。一个最简单的例子。我们在工作中发现Fixture中我们引用了很多第三方的包,但是在运行Wiki脚本的时候,我们发现总是提示我们没有找到Fixture,但是我们对于Fixture的配置一直是正确的。最后我们发现,是因为在Wiki脚本里面没有引用正确的第三方的包。
  Fitnesse本身对于测试的管理没有任何作用。对于一个理想的测试框架,我们希望他可以和管理工作相结合。但是目前我们的fitnesse只是提供了一个脚本的管理和一个执行的工作。相对于测试项目的管理没有一个机制。在我看来,其实Fitnesse如果可以加上一个对于测试版本的管理的模块,应该是锦上添花的啊。
  先说这点,对fitnesse还是有很多的感想和大家分享

306°/3062 人阅读/0 条评论 发表评论

登录 后发表评论