Fitnesse系列一

一、简介

按标准说法Fitnesse是一个验收测试框架,先不用理会这些貌似“高大上”的名词。看看它是如何介绍自己的。在手册文档的首页,定义了四种说明:1.是一个软件开发合作工具;2.是一个软件测试工具;3.是一个wiki;4.是一个webserver。

先从最有操作性的特征开始理解:一个webserver,也就是说肯定是以web方式访问的,就当是个网站好了;一个wiki,这就更具体些了。Wiki是一种百科全书式的站点,通常旨在介绍各种知识。那么fitnesse也类似,可以浏览它以获取我们需要的信息。这些信息当然不是凭空出来的,是我们自己录进去的,而且往往不是一个人录进去的。也就是说大家可以各自往里录入内容,那么当作一个论坛站点也未尝不可。只是fitnesse安全权限和日志方面比较弱,只能看到最后修改完的内容,哪些部分被修改过、谁修改的、修改了几次等等,就查不到了,不过这不是它的重点。能够让大家共同发信息、共同浏览信息,也就达到开发合作的目的了,所以尽管说的抽象,其实很简单。

到现在为止,定义中的1、3、4都明白了,那么这样看来和普通的站点并没有任何不同,而关键和有趣的就在于定义2——是一个测试工具。一个站点是如何成为一个测试工具的呢?实际上在fitnesse中有两种类型的页面(操作上不止两种,逻辑上可看作两种),一种叫做静态页面,这就完全是普通的html文字了。另一种叫做执行页面,特征是上面有个能够执行的按钮(有的页面是test按钮,有的页面是suite按钮,后面会深入介绍),我们可以通过修改一个页面的属性,来标明此页面是普通页面还是可执行页面。

二、实现原理

可执行页面是如何执行的呢?事实上,当我们点击这个按钮时,fitnesse自动去启动一个java命令,java –cp xxxx.jar;xxxx.jar {TEST_SYSTEM} {类名} {方法名}。其中的xxxx.jar是需要我们指定的;{TEST_SYSTEM}需要我们自己定义(默认是两种,fit和slim,理论上可以自定义扩展,我还没试,因为现在够用);{类名} {方法名}从哪来呢?答案是页面中的表格,所以表格是fitnesse的一个关键因素,下一篇专门讲表格。

三、优点

能够想到把说明性文字和执行操作结合起来,这是我最佩服这个工具初始创意者的地方。根据经验,项目失败的很大可能性原因是信息传导不畅通。在传统的瀑布开发模式中,需求从用户传导到开发人员时,往往会走了样,这就导致产品接近开发完成时又局部返工甚至全盘返工,项目不失败才怪了。在敏捷模式中,强调的就是沟通与协作。需求变更要快速、准确的传达给开发人员。无疑,打电话是最快的,会议讨论其次,邮件通知再其次,文档变更是最慢效果最差的,恰恰又是用的最多的。为什么呢?因为前几种方式不好留证据、不好归档、不好给别人“吹嘘”(比如我们的管理多么多么规范,通过了XXX认证,通过了XXX验收......)。当然前几种也不是没有缺点,确实是各有利弊的事,在这不讨论这个,单说文档变更。文档变更后,即便通知(我这里说的通知不仅指手工发送的邮件,也包括版本管理工具的提醒等)到每个人,恐怕这个效果也是存疑的。因为通知没有任何约束力,谁看了,看了多少,懂了多少都无法保证。我们也都有这种体会,对于那些枯燥的模板式的文档,尤其是长篇的,真的很难认真去读。有时候宁愿打个电话问问怎么回事,也懒得去读这个。即便读了,大家的理解是否一致也难说。Fitnesse这种把文档和操作相结合的方式,就为我们提供了一种可能——在文档里不光写明要完成什么,还写明完成的效果是什么样的,而且可以执行测试以验证这个效果。这就是验收测试(Acceptence Testing)。大家的理解是否正确、一致,由测试的红绿条决定。绿了就合格,红的就是有问题(也许需求不合适,也许测试用例不合适,也许代码有bug,总之看到红条就提醒大家一起找原因)。在我看来这正是fitnesse的价值所在,而不要把它仅当作自动化测试工具来看待。自动化测试工具或框架有很多,而兼具沟通工具和测试工具的就颇为可贵了。

时间: 2024-10-12 23:58:28

Fitnesse系列一的相关文章

Fitnesse系列八

结束篇: Fitnesse是一个有着非常好的创意的软件.它试图拉近开发者与用户的距离.通过前面的介绍,大家可能也看出来了,其实最终还是要落实到编码(fixture)上.这些编码一般来说要由测试人员来写.那么就引发了我的一些思考: 一.有没有必要对每个需求都制定验收"表格".如果这样做,就意味着要写非常非常多的fixture.写这些代码需要花费相当的时间,而时间是昂贵的成本.在能取得大体相同的效果时,有没有成本更少的办法? 二.这些代码本身是否存在bug,调试这些代码以及日后维护这些代码

Fitnesse系列二

决策表 Fitnesse中提供了好几种表格样式,前面说了,表格是执行测试的关键.从字面看,表格描述的是测试用例:从执行角度看,表格为后端的代码(fitnesse里称作fixture)提供了包名.类名.方法名和参数(仅以java为例). 先说测试系统,fitnesse提供了两种测试系统:fit和slim.采用不同的测试系统,表格样式不同,代码也不同.所以首先就要确定用哪种.Fit是默认的,是从Framework for Integrated Test工具延续过来的.如果不考虑旧代码延用的问题,建议

Fitnesse系列六

Table 表 基本上这一节就是文档翻译,不打算写示例了,原因结尾会说. Table表的意思是你可以写出任意样式的表格来.那么任意样式的表格是如何被fitnesse识别并执行的?以及如何展示执行结果的?一起来看一下. 前面几种表格的基本思路是--要么由表头来确定方法名(决策表):要么固定方法名(动态决策表.查询表):要么结合某些标识符确定方法名(脚本表).总之给人有迹可循的印象,而Table表要换个思路--没有表头,也不用纠结于那个数传给了哪个变量.唯一必须有的方法名称是List doTable

Fitnesse系列三

动态决策表 动态决策表是新出的,去年初的版本里还没有这个.看了一下文档和示例,大意是作为普通决策表的一个辅助手段.是为不容易匹配方法名称而推出的.但如果只有一两个参数,再怎么着也不至于找不到名称.所以我认为动态表主要是为了给那些有大量输入参数的情况设计的.像UserGuide示例中的表格,有6个输入,如果按普通决策表的话至少要写6个setXxx方法.如果更多,代码也就更繁琐了. 动态决策表把所有输入都放到一个set方法里(同普通决策表一样,凡不是以?结尾的都认为是输入):所有输出(以?结尾的)放

Fitnesse系列七

剩下几种都比较简单,放在一起说了. Import Table--导入表: 引入包路径,和java语言中的import作用是一致的 Comment Table--注释表: 加上注释标记comment,表示此表不需要执行 Library Table--库表: 表示在当前的fixture中找不到方法时,去Library Table所指定的类中查找并执行 Define Table Type--定义表类型: 用处很单一,加了Define Table Type表之后,就可以在表格中省掉表类型的前缀字符串.所

Fitnesse系列四

查询表.子查询表.有序查询表 表头还是要加上标记,这个没什么说的.构造参数列通常是为了提供查询条件(可省略).fixture代码里面需要注意的是一定要有个无参数的query方法,返回值是List.这个List有点复杂,是三层List的一个集合,分别对应于表.行.字段.口头表述不很清楚,还是看下面的代码好了.返回的结果和页面上的数据进行比较.查询表适合对关系数据库的查询结果进行验证. Query:qt.zjc.com.QueryTable 123456 name age job salary zj

Fitnesse系列五

脚本表 如果说前面介绍的几种表格都是单步骤.单方法.Script table就是一系列的多步骤操作了,正如名称所代表的含义. 表头的第一个格加script:前缀,也可以只是一个script,后面紧跟的单元格作为类名.后面跟构造参数.下面的行每行代表一个操作.允许的操作类型有:执行方法.检查结果.显示输出. 执行方法包括方法名称和参数.相当奇葩的设计是方法名称可以和参数交错放入表格中.如我下面的示例中this is a method in code是分别从1.3.5列中组合起来的,而2.4.6列是

Fitnesse测试系列--如何设置SetUp文件

又被抽去做了一段时间的Fitnesse用例的编写,现在case写了几个星期,有点收获,最近会一起整理出来. SetUp 这个页面主要被我用来做环境变量的设置了. 环境变量的设置: !note 这一部分用来在写测试步骤里包含,来定义用户场景.!note 比如!note 1,用户一($USERNAME_A)注册帐户,密码为(${PASSWORD_A}) !以下是代码!define topic_name {kindle}!define USERNAME_A {tester001}!define PAS

Fitnesse使用系列二

决策表 Fitnesse中提供了好几种表格样式,前面说了.表格是运行測试的关键.从字面看.表格描写叙述的是測试用例.从运行角度看,表格为后端的代码(fitnesse里称作fixture)提供了包名.类名.方法名和參数(仅以java为例). 先说測试系统.fitnesse提供了两种測试系统:fit和slim.採用不同的測试系统,表格样式不同,代码也不同.所以首先就要确定用哪种.Fit是默认的.是从Framework for Integrated Test工具延续过来的. 假设不考虑旧代码延用的问题