首 页 行业热点 新车 试驾评测 养车用车 车型库
当前位置:首页谈谈fitnesse(整理版)

谈谈fitnesse(整理版)

来源:好土汽车网
导读 谈谈fitnesse(整理版)
谈谈fitnesse(整理版)

1。使用命令行来添加用户和用户密码:

D:\\fitnesse>java -cp -f -c Sophia

(' D:\\ fitnesse >”是fitnesse的安装目录)

2。当用户加入一个成功,将会产生FitNesse文件下的根目录。 3。开始使用普通模式:FitNesse

D:\\FitNesse>run –p 8080

4。改变页,你想使用的用户控制

在意想页面上,点击属性按钮在左侧面板。在属性对话框之前,togglethe - - - - - - - - - - - - - - - - - - - - - secure-write secure-read /,/ secure-test,点击保存 5。开始FitNesse认证模式。使用

D:\\fitNesse>run –p 8080 –a

重新启动服务器后,你会看见一个弹出对话框,提醒你输入您的用户名和密码后,你点击控制页。

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

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

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

上次在第二季中介绍了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; 先要在!Path中声明我们的Fixture的类路径,不要包括包在内 2.先声明是Action Fixture 表示要启动那个Fixture

是要invoke一个void,且不带参数的函数 是要invoke一个带有参数的,void的函数 就是对于一个有返回值的函数进行期望值的比较

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

Fitnesse之框架介绍(一)

上一篇 / 下一篇 2011-09-02 09:55:11 查看( 29 ) / 评论( 0 ) / 评分( 0 / 0 )

Fitnesse是一款开源的验收测试框架,完全有java语言编写完成,支持多语言软件产品的测试,包括(java,c,c++,python,php)等等,本人使用这款框架已长达两年之久,目前在公司测试及开发团队中推广使用fitnesse进行接口测试。

关于接口测试的重要性及定义可以参考本人写的前面的博文《关于接口测试》,再此系列中将着重介绍fitnesse框架以及fitnesse在接口测试以及持续集成中的使用,系列第一篇将介绍fitnesse整体架构。

在fitnesse框架中,总共包括三个部分,wiki,test system,fixtures.其中wiki部分将展现具体的test case以及test suite,test system包括两部分slim,fit,也就是fitnesse的执行引擎,fixtures也就是真正的测试代码。具体见下图所示:

从上图大家可以看到,在wiki pages上描述的将是关于业务或者其他逻辑的测试用例,fitnesse将会根据你所选择的test runners(slim或者fit)来解析wiki pages所传送过来的test cases, 假如我们选择了slim作为我们的test runner,那么解下去,slim 将会把网络传输过来的wiki 脚本解析为一系列的指令,然后slim 执行器将会根据这些指令来调用我们所编写的测试代码也就是fixtures,fixtures可以是java 测试代码,c测试代码或者其他语言编写的测试代码,这些测试代码将会根据你所调用的被测对象来执行你的测试用例。同理当你选择fit作为你的Test runner的话过程也是一样,只是fit在解析wiki脚本的时候与slim不一样,fit会将wiki page作为html页面,然后通过解析html页面来调用后台的测试代码来执行测试用例,相对于slim性能上较差,fit是比较老的测试引擎,再此我推荐大家使用slim,因为slim会更加的轻量和高效,在过去的两年时间里面我们团队一直使用slim作为test runner,并且在slim的基础做了很多二次开发和改进,在后续的文章我会继续分享这些成果。

大家可能会问,fitnesse教其他框架有什么优势,本人把fitnesse和junit,testng做了一些简单的比较,fitnesse最大的优点是完全将业务逻辑(测试用例)和测试代码进行分离,功能测试人员负责在wiki上编写测试用例,测试开发工程师负责编写测试代码,这不但利用测试用例和测试代码的维护和管理,也促进了测试人员和开发人之间的沟通,使整个软件开发和测试变得更加敏捷(后面的文章将介绍fitnesse在敏捷测试中的使用),先对于junit每写一个test case都要增加一定量的测试代码,fitnesse大大降低了冗余的测试代码,因为fitnesse可以进行参数化,相对于testng的xml参数化,fitnesse的参数更加的人性且便于操作(后续文章将推出fitnesse wiki语法)。这一系列优点使fitnesse可以适用与各个级别的测试,可以在单元测试,集成测试,验收测试中使用,也可以用于白盒测试和灰盒测试。

此外fitnesse是一款开源的软件,有很多东西可以根据我们自身的应用进行定制,如增加参数类型,分布式测试等等,后续文章都将进行分享,敬请期待。

Fitnesse之框架介绍(二)

上一篇 / 下一篇 2011-09-05 21:03:04 查看( 11 ) / 评论( 0 ) / 评分( 0 / 0 )

本篇将重点介绍Fitnesse测试引擎slim, slim是(simple list Invocation method)的缩写,使用来代替的fit的测试引擎,不同于fit的是,slim将html的解析,比较以及颜色的改变都放在了fitnesse上面去完成,而不是像fit一样放在被测系统这一端去完成,slim是一个自定义的协议,是一个准RPC协议,通过此协议fitnesse可以驱动被测系统的方法。 下图是slim源码的结构

其中核心的包是此包为slim协议的核心,此包为slim中变量参数转换器以及此包为slim中表格类型。 如果我们要使用slim作为测试引擎,那么必须在wiki页面上定义测试类型 !define TEST_SYSTEM {slim}

slim本身总共包括10种表格类型,首先介绍decision table: 我们经常使用decision table作为一个真假表

该测试用例对应的测试代码如下所示:

public class ShouldIBuyMilk { private int dollars; private int pints;

private boolean creditCard;

public void setCashInWallet(int dollars) { = dollars; }

public void setPintsOfMilkRemaining(int pints) { = pints; }

public void setCreditCard(String valid) { creditCard = \"yes\".equals(valid); }

public String goToStore() {

(pints == 0 && (dollars > 2 || creditCard)) \"yes\" : \"no\"; }

首先看表格的第一行should I buy milk对应测试代码ShouldIBuyMilk测试类,再看表格第二行第一列cash in wallet对应测试代码setCashInWallet方法,第二列credit card对应测试代码setCreditCard,以此类推后面几列,我们看到最后一列有点比前面几列多了一个号,这个问号表示最后一列是一个方法,也就是我们需要得到的结果,前面几列表示参数,所以他们需要在测试代码中加上set。从表格的第三行开始就是我们的测试用例参数,总共8个测试用例在一张decision表格中就全部描述完成,当我们点击Test按钮就可以得到以下结果:

我们可以看到从第三行开始绿色的表示通过的case,红色的表示失败的case并且会有实际值显示

出来,这样我们在一次执行中就完成了8个case的执行。下一节中我会重点剖析decision表格的源码结构。

浅谈Fitnesse框架(四)

上一篇 / 下一篇 2009-10-27 22:01:07 / 个人分类:API测试框架 查看( 408 ) / 评论( 1 ) / 评分( 0 / 0 )

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还是有很多的感想和大家分享

从Fitnesse中学习Java单元测试

发布时间: 2011-7-26 11:05 作者: 邵育亮 来源: 51Testing软件测试网原创 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 推荐标签: 软件测试 单元测试

从第一次知道Fitnesse这个集成测试工具到现在也已经差不多有2年多的时间了。在这个期间把Fitnesse的源码也算是反反复复阅读了很多遍,算是对其实现的原理和方法有所了解。在最近一次对Fitnesse最新版本代码的研究中我发现,Fitnesse除了是一个很好的开源集成测试框架之外,它的源代码还是一个非常好的实施Java单元测试的例好例子。

首先我们可以看到在Fitnesse的每个类,都有一个对应的Test的类来构建针对这个功能类的单元测试。

一个好的单元测试的命名是非常重要的,它可以让我们很清楚的指导我们的单元测试类是针对哪个功能类编写的。Fitnesse的开发团队采用的命名规范是在功能类的名字后面增加Test的后缀,这样可以在一个包里面很好的区分功能类和测试类。

单元测试类和源码之间的放置关系也是我们经常遇到的问题。在这里Fitnesse的开发团队把所有的单元测试类(*.Test)和源码是放在同一个项目里面,并且也放在同一个包内,这样在功能上非常容易区分和归类。我们可以很容易的找到单元类的测试类在哪里。其次这样的单元测试类在编写上更加方便,不太收到java的access控制的影响。例如protected的变量在包内是可见的,这样的话同一包内的单元测试类就可以对很轻松的针对它进行单元测试。第三在Fitnesse的发布的中,也很好的继承了单元测试,这样在发布的过程中对于质量有了很好的控制,做到了单元测试自动化。参考下面的文件

我们到底应该对哪些方法做单元测试呢这个问题也一直是我们在做单元测试的时候一直困扰的问题。

我们之前习惯上算是针对没一个方法构建单元测试,这样的单元测试在覆盖率上很高,但是工作的时间成本就会直线上身。测试工作需要在时间和质量上寻找一个平衡。从Fitnesse的源代码中可以看到,Fitnesse的开发团队并没有采用上面的那种单元测试的方法。他们采用的是针对主要的功能方法进行单元测试。我们来看下面这个例子 ……………………

查看全文请点击下载: 这样就完成了针对所有可能的Http Response Code的测试的覆盖。这里只是一个简单的Fitnesse中的例子,在很多其他的单元测试类中我们都能看到。

针对主要功能函数的构建单元测试对于独立进行单元测试的测试团队来说是一个很大的考验。正式因为Fitnesse源码的单元测试是其开发团队自己编写的,他们可以很清楚的指导哪个函数是关键函数,哪个是不重要的。但是如果是独立的测试团队,他们就很难去判断被测试函数的重要性来决定是否需要构建单元测试。

单元测试中最最重要的一个概念就是驱动模块和桩模块。从百度百科上我查到的定义如下: 驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。

空间管理您的位置: 51Testing软件测试网 » 孙明星的测试技术空间 » 日志 平平庸庸

(原)fitnesse基础教程一 环境配置

上一篇 / 下一篇 2011-01-20 15:46:42 / 个人分类:测试工具 查看( 196 ) / 评论( 0 ) / 评分( 0 / 0 )

java安装

一、下载 jdk并完成安装

二、 配置环境变量(本例中的java装在E:\\Program Files\\Java) 我的电脑-属性-高级-环境变量 JAVA_HOME=E:\\Program Files\\Java\\ PATH=%JAVA_HOME%\\bin;原有内容 CLASSPATH=.;%JAVA_HOME%\\lib\\ 三、 测试java环境安装 三、一: 在 d 盘下建立文件

内容如下:

public class Hello{

public static void main(String args[]){ \"hello world\"); } }

三、二: 打开cmd 切换到d 盘下输入命令 javac 进行编译。这是d盘中多出一个文件

继续输入命令java Hello 进行解释执行。cmd中打印出hello world。到此java安装和配置完成

fitnesse安装

一、下载fitnesse 启动 java -jar

三、 测试功能

准备 在d盘下 java文件

内容为:

public class HelloFitnesse{ public String sayHello(){ return \"Hello\"; } }

在d盘下完成这个文件的编译

javac

创建页面。

编辑页面,输入以下内容

!define TEST_SYSTEM {slim} !path d:\\ !|script.|

|start|HelloFitnesse| |check|sayHello|Hello|

点击页面左侧的properites 将页面类型(page type)设置为test

点击页面左侧的 “test”按钮。测试成功。

ps fitnesse对firefox的适配比较好,不会有页面显示的问题。

二、FitNesse的安装

FitNesse需要以上Java环境支持。你可以到SUN的官方网站去下载. 设置系统环境变量: JAVA_HOME 到 java安装目录如:D:\\Program Files\\Java\\ 设置系统环境变量:classpath 到D:\\Program Files\\Java\\ Files\\Java\\ 下载FitNesse:

到下载\"Full Distribution\",并解压缩。 启动

如果http 的80端口没有被占用的话直接在dos状态下运行就可以了,我们做开发的一般80端口被iis占用了,这样我们在启动fitnesse的时候就要指定一个别的端口,如 -p 8008 ,这样就可以启动了。 使用:

启动浏览器,输入,你应该已经能看到FitNesse的主界面了 .

!path F:\\workspace\est\\bin

!|Action Fixture| |start|| |press|init|

|enter|add student|1| |check|bool|true|

|shoudibuymilk|

|caskinwallet|creditcard|pintsofmilkremaining|gotostore|

|0 |no |0 |no|

因篇幅问题不能全部显示,请点此查看更多更全内容