啄木鸟之家大吕java
敏捷测试已成为如今式,尽早和持续的反馈成为各研发团队的必选项。测试同窗也须要跟上这个趋势。除了“找bug”、“分析需求”、“功能测试”,还需考虑“交付质量、一次作对、在没有用户界面状况下尽早接口测试”。web
测试要拥抱变化,改变过去到最后才安排测试活动以及只能作黑盒测试的被动局面,从项目一开始就开始测试活动。数组
今天给你们介绍的FitNesse,就是一个彻底集成单独可运行wiki的验收测试框架。它是开源的wiki web服务,容许建立本身的web页用于包含测试表格,这些测试表格实际就是测试数据。FitNesse主要用于支持敏捷方式的黑盒验收和回归测试,它也是一个协做工具,可支撑开发和测试、研发和业务同窗一块儿准备测试用例集(test suite)。浏览器
从自动化测试金字塔结构来讲,FitNesse定位业务接口测试层面,介于UI和单元测试之间。该定位确保咱们的测试可在UI没出来前就能够开展测试,并且基于wiki页面的方式,也确保业务、开发和测试之间良好的沟通,由于业务方也能很容易读懂测试内容。框架
为何要用Fitnesseeclipse
敏捷测试团队能够用FitNesse来准备业务验收测试用例集,用它们来测试系统对外的方法,有点相似Junit和TestNG等,它们之间主要区别是 FitNesse用wiki页面上表格形式来表示测试用例,项目上各角色均可以很方便共享这些用例。ide
好处:函数
一、经过执行自动化的验收测试用例实现尽早反馈工具
二、经过相似Junit的红色(测试失败)和绿色(测试经过)显示,能很清晰展示测试执行结果单元测试
三、能根据质量要求设计不一样覆盖程度的测试数据
四、测试用例经过wiki语言编写并经过表格形式展现,各方都能理解
五、经过测试表格定义测试用例的输入和预期结果,很直观
备注:关于FitNesse特性介绍可直接参考官网
用FitNesse能作什么
经过FitNesse,咱们能建立测试用例和测试用例集(简称测试集),这跟平时咱们作测试要作的测试活动相似。测试用例是单个测试脚本,测试集是一组测试用例集合。当咱们执行测试集时,测试集中全部测试用例都会被执行,所以咱们须要合理安排每一个测试集中应该包括的测试用例。
FitNesse框架原理简介
FitNesse框架包含Wiki、Test system、Fixtures,其中
一、Wiki:展示具体的Test Case、Test suite、甚至是Test Requirement;
二、Test system:Fitnesse的执行引擎,包括两个部分:Slim、Fit
三、Fixtures:真正的测试代码
具体如图所示。
SUT:System Under Test,也就是被测试的系统。
Custom Fixture:也就是针对具体被测试系统设计的测试代码。
SLIM:Simple List Invocation Method的缩写,它包括SLIM Runner和SLIM Executor两部分。
以SLIM执行引擎为例来讲,当咱们点击Test按钮开始测试执行时,Fitnesse读取页面表格数据,而后调用SLIM Runner将该表格解释为SLIM指令发送给SLIM Executer,以后Executer调用Fixture测试代码,最后Fixture测试代码执行具体的测试函数。通常咱们就是经过该测试代码中测试函数跟被测系统交互完成测试验证的。
Fit相似原理,Fit执行引擎对测试代码要求更严格,建议采用SLIM,下文将以它为例展开,若要进一步了解FIT测试框架,请自行百度或阅读官网说明。
下载和配置FitNesse
一、进入FitNesse官网下载页面:http://www.fitnesse.org/FitNesseDownload,下载最新的fitnesse-standalone.jar。
二、打开command命令行窗口,到fitnesse jar包所在目录,而后执行该文件。(注:为方便,你们为下面命令行建立批处理文件。下面端口号可本身随意设置)
java -jar fitnesse-standalone.jar -p 2222
文件成功执行成功后,FitNesse启动状况以下。
三、打开FitNesse,只须要在浏览器输入http://localhost:<portnumber>,本例子是http://localhost:2222
在该页面,你们可看到Edit和Add菜单,点击Add,可看到Suite page(测试集页)和Test page(测试用例页)。当咱们建立某个测试集页,全部在该页面上的测试脚本在执行时都会被执行。为讲解方便,下面以建立某个测试用例页为例。
FitNesse例子
咱们将以一个简单的计算器程序为例,代码包括4个方法:
一、addition() 加
二、minus() 减
三、multiply() 乘
四、divide() 除
(注意:FitNesse能支持大部分开发语言,用Java为例而已)
FitNesse中代码被称做Fixture(你们可称为夹具,本文直接以英文称呼),它是测试代码,也是FitNesse和待测系统之间链接点。所以,当你要测试某个方法,就须要编写一个fixture,测试执行时该fixture被触发,而后测试该方法。
计算器例子对应的Fixture代码以下:
public class Calculator {
private int first, second;
public void setFirst(int first) {
this.first = first;
}
public void setSecond(int second) {
this.second = second;
}
public int addition() {
return (first + second);
}
public int minus() {
return (first - second);
}
public int multiply() {
return (first * second);
}
public float divide() {
return (first / second);
}
}
eclipse中的代码以下:
后面须要该计算器代码的class文件,请确保编译成功。
开始FitNesse编写测试
STEP #1,让咱们进入fitnesse frontpage页面。在该页面Add菜单,选择Test page,而后输入测试的名字,而后点击save按钮。根据这个case,咱们输入Calculator
STEP #2,在浏览器中使用.操做符。相似:
STEP #3,点击edit按钮,而后输入下面的代码行
让咱们一行一行看一下这些内容的含义:
a)第一行表示FitNesse使用SLIM测试系统 (关于SLIM调用关系还不清楚,参考上面框架原理介绍章节)
b)第二行定义了测试代码Class文件所在路径,本例Java class文件保存在“C:AndrewalipayautomationbirdieAutobin”
c)第三行引入class文件所在包
d)第四行说明了具体的class文件,本例为“Calculator”
e)第五行开始具体测试内容部分:
前面2列 |first|second| 表示测试方法的输入参数,以后每一个带“?”列都是要测试的函数预期的返回值|addition?|minus?|multiply?|divide?|,测试执行时会将
前面测试参数传入,而后调用函数计算结果,并跟相应列中测试数据,也就是预期值进行比较,若符合就经过,若不符合则算失败。
f)接下来就几行都是测试数据。每一行就是表明一个测试点。咱们以第一个测试点为例说明一下:
|first|second|addition?|minus?|multiply?|divide?|
|4 |2 |6 |2 |8 |2.0 |
这表示将4做为第一个参数,2做为第二个参数输入传给addition函数,而后将返回值跟该列对应预期值6进行比较。其它列minus、multiply和divide相似处理。
备注:若测试代码行之间有空行,可能会报以下错误:
STEP #4,编辑完成后,点击保存按钮,你的页面以下
STEP #5,点击页面上test按钮,将获得下图所示结果
执行结果第一行很清楚告诉有几个测试(1个)、几个断言(12个),以及相应执行结果,还给出测试执行时间。
在表格上会标准执行了那个包、那个测试代码类,每一个预期结果比对状况。
若经过则显示绿色,若失败则显示红色。相似Junit展示方式。
STEP #6:为了演示须要,让咱们修改几个错误预期值,好比:第一行测试数据加法预期从6改到7,第二行减法预期从5改到4,第三行除法从1.0改到2.0。
STEP #7:再次点击Test按钮,你们可看到它们变成红色了,表示不符合预期测试失败了。
Fixture/Table类型:
在FitNesse中,Fixture的表格类型支持多种类型,主要有:
一、列(Column)格式的Fixture,也就是上面例子样子,使用最普遍。列直接对应待测函数的输入参数和返回预期值,适合各种组合的输入参数,而后跟预期结果比对。
二、行(Row)格式的Fixture,返回结果是列表的测试验证,好比可用于根据某个条件查询获得不少行返回结果的测试状况。
三、Action Fixture,支持工做流方式的一系列测试函数组合,可用于多个测试函数组合的业务测试类型。
!|ActionFixture||start|ActionFixtureTest||enter|firstPart|Hello||enter|secondPart|World||press|join||check|together|Hello, World|
建议:
本文介绍FitNesse框架原理、安装以及经过简单case一步步说明如何入门。该工具自己带有user guide和不少用例演示,你们可进一步深刻了解。
从上文演示例子,你们可看到,该工具须要测试同窗掌握一些编码技能,一旦咱们具有基本的编码技能,那么FitNesse就很是适合基于API或对外暴露接口的业务验收测试,毕竟基于Wiki的页面让项目各方都很容易理解测试点和测试数据。
你还在等什么,赶快试用起来吧!
结论:
敏捷测试中通常采用4个层次的测试:
一、自动化单元测试,通常基于Junit等Xunit系列
二、自动化验收测试,可基于FitNesse
三、自动化UI回归测试,可基于Selenium或QTP等
四、手工测试
基于测试分层的金字塔原理,咱们应尽可能多采用自动化单元和验收测试,而等底层足够稳定,再开展UI自动化测试,这样不只实现测试提早和尽早反馈的目的,并且让UI自动化回归测试效率更高。
若是Junit通常由开发负责,那么测试同窗就尽快把FitNesse用起来吧,提高一下测试工做的技术含量吧~