图中其他的模块都是标准的工具和库。可以看出FitNesse可以有两种途径进行测试;第一种是通过Fit集成测试系统测试,首先解析HTML形式的用例页面,在解析完HTML页面后,调用并执行对应的关键字驱动脚本Custom Fixture。这种方式需要在AUT中嵌入大量的测试驱动脚本。第二种是通过Slim测试系统测试,这种方式下,所有基于表格的测试数据都通过嵌入在FitNesse内部的Slim runners来执行,只有Slim Executor和fixtures测试代码被嵌入到AUT中,Slim Executor是一个轻量级便于执行的工具。在测试中,以wiki形式承载的测试用例被Slim Runner解析成简单的可执行的描述性命令(Slim instruction),再将这些命令传给Slim Executor,Slim Executor再通过Fixtures类来调用AUT的底层功能模块来实现测试。在Slim测试系统下,各个模块的耦合度低,即使Slim Runners添加任何新的功能也不会影响Slim Executor模块,这就意着通过Slim Runner执行的测试用例页面可以在任何Slim平台上执行。
2.2.3 Fixture
要执行FitNesse表形式的测试用例,就需要对表形式的测试用例与底层的测试代码进行映射,即提供底层的驱动脚本。FitNesse提供一系列类函数来编写相应的驱动脚本,这些类函数,被称为Fixture [41]。与Selenium一样,Fixture也支持多种编程语言例如java、.net、python,测试人员可根据需要选择熟悉的编程语言来编写相应的测试驱动脚本。由于FitNesse的两个测试系统Fit和Slim(详见2.2.4节)分别提供了不同的测试用例表形式,因此,FitNesse也为两个测试系统分别设计了对应的Fixture类函数来驱动表格用例。
除此之外,作为FitNesse的FitLibrary jar包,FitLibrary 现在被叫做fitlibrary.jar。FitLibrary包含了一些在Fit上构建的好用的fixtures ,FitLibrary对每一个核心Fit的fixtures都有代替。
FitLibrary虽然是作为Fixture的第三部分出现,但是因为它非常实用而被认为Fixture的一部分了,所以在FitNesse中存在两类Fixture,第一类是标准的Fit Fixture,第二类是FitLibrary Fixture。
在实际的测试中,Fixture的具体工作流程如下图2.14所示:
图2.14 Fixture工作流程
1、点击FitNesse wiki页面上的Test按钮启动测试后,FitNesse将具体的测试表格提交给底层的Fit/Slim测试系统。
2、Fit/Slim测试系统向下查找测试表格中指定的Fixture类型并运行相应的Fixture驱动代码,这些驱动代码调用底层AUT的业务层代码来进行实际的测试工作,同时将执行的操作结果返回给Fixture。
3、Fixture将测试执行结果返回给Fit/Slim系统,同时,Fit/Slim系统又将得到的测试结果返回给FitNesse,FitNesse得到实际的测试结果后,与预期结果进行对比,在页面上生成测试结果报告。至此,Fixture测试过程结束。
要使用Fixture来驱动FitNesse表格测试用例,需要在表格用例中,使用ClassPath关键字来指定相应的驱动脚本位置。在实际的测试过程,测试人员点击FitNesse页面的Test按钮后,便触发这些Fixture驱动脚本对FitNesse测试表格进行处理,在表格的每一行中,Fixture通过特定的方法来实现参数的输入,同时调用相应的output方法返回测试用例执行的结果,FitNesse将这些函数返回的值与测试表格中预期的返回值进行比较,并改变测试表格输出元素单元的颜色来显示测试是否正确执行。
在这里举个例子说明下Fixture,我们使用Fit测试系统中的FitLibrary里面的DoFixture,DoFixture是FitLibrary里面几种Fixture类型中的一种。DoFixture几乎能用日常英语来描述story-like tests(故事样测试)。用它代替ActionFixture效果非常明显。DoFixture且具有重要特征,如flow-mode coordination(流模式协调),wrapping domain objects(包装领域对象)。 基于FitNium的Web关键字驱动的测试(9):http://www.751com.cn/jisuanji/lunwen_8907.html