有一位博友问了一些关于fitnesse的问题,我觉得都是不错的问题。发在自己的blog里,感兴趣的同行,可以一起讨论。

 

1.    如何不让fitnesse自动把驼峰命名形式的字符串识别为一个新页面(有没有转义符之类的)

试试单引号。因为fitnesse是基于wiki page的,你可以google一下wiki的语法。

 

2.    如何把某个路径或某个jar包定义为“全局”应用。这样就不用在每个测试页面重复定义一遍了。

在fitnesse里面,有testsuite的概念,比如我们这个工具的frontpage是这样写的:红色的是code.

# BasicTestSetup就是一个test suite.

'''Testsuites'''

|>BasicTestSetup|''Basic Test Setup''|

 

# 定义class path

----

'''Classpath'''

!path fitnesse*.jar

!path ./lib/*.jar

 

# 定义全局变量

----

'''Definitions'''

!define TEST_SYSTEM {slim}

 

!define BROWSER_TO_TEST {Internet Explorer}

!define START_URL {localhost:8080}

 

另外,每个testsuite里面有setup page和teardown page.你可以把一些初始化这个test suite的东西放到setup page里面去。对于clean up的东西,比如关闭浏览器这个的操作放到tear down page。Set up page和teardown page是会被这个suite里面的每个test case自动调用的。详细内容参见fitnesse的user guide.

 

3.    如何在fitnesse测试里使用测试数据文件(比如作为动态参数之类的)?放在哪里,如何加载,这个有经验吗?

这个涉及到框架问题了。我的经验是将测试数据放到一个page下,在test case里面include,做到测试数据和测试脚本分离。比如 test data的页面是这样的:

# InsertData这个页面里面有很多页面,每个页面里都有测试数据,比如truck one 里面定义了一些变量。

http://localhost:82/FrontPage.BasicTestSetup.InsertData

|>TruckOne|''Truck One''|

|>TruckTwo|''Truck Two''|

 

http://localhost:82/FrontPage.BasicTestSetup.InsertData.TruckOne

!define vehicleDisplayName {rt_70_t1h_4m}

!define vehicleVin {55200004611114770}

 

我再介绍一下如何使用这个页面:include测试数据的页面

http://localhost:82/FrontPage.BasicTestSetup.SetupOtherData.SetupVehicles

!include -c .FrontPage.BasicTestSetup.InsertData.TruckOne

 

Table里面这样调用变量

!|script|pages.CreateVehiclePage|

|type display name|${vehicleDisplayName}|

|type vin|${vehicleVin}|

 

这样的设计可以很好的分离测试数据和测试代码。

 

4.你的那个示例代码我运行不成功啊,我已经引入了selenium-java-2.31.0.jar ,且import 如下类:

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebDriverBackedSelenium;

import org.openqa.selenium.firefox.internal.ProfilesIni;

import org.openqa.selenium.firefox.*;

import org.openqa.selenium.ie.InternetExplorerDriver;

import com.thoughtworks.selenium.*;

编译通过,但执行异常。是不是还需要哪些文件?

 

呵呵,我那个示例代码很有可能不成功,只是一个示例。因为我们在selenium的基础上,定义了一些自己的类。其中最主要的就是Browser这个类了。这部分是由其他开发做的,我也只是使用而已。代码是不能公布的,因为公司有security policy。我只能提供思路,我们把webdriver,和selenium这两个类都包含到Browser这个类中,作为成员。然后定义了一些方法,比如打开浏览器等等。