这一阵做一个自动化测试工具,基于Selenium和Fitnesse。框架比较简单,算作抛砖引玉吧。

1. Selenium简介

Selenium是一个用于Web应用程序测试的工具,现在使用比较广泛的,是免费的。可以支持多个浏览器,对firefox的支持最好。虽然有时还是需要花时间研究一些控件的定位,但整体来讲,比较好用。开发的过程中,需要用到Selenium IDE,就像QTP一样可以录制在Web Page的操作,主要是看控件的操作顺序,然后编写java代码。还要用到Firebug(Firefox)或者Explorer Developer(IE),这两个插件的功能是一样的,可以看到Web Page的html,当用xpath定位控件时,需要仔细研究html。

2. Fitnesse简介

Fitnesse也是免费的,在国内似乎用的不多。这个工具基于wiki page,最大的好处是可以调用java code,我们的测试工具正是应用的这个功能。

3. 自动化测试工具框架

首先用Selenium编写一些方法,比如打开浏览器,输入URL,然后登录。然后在Fitnesse中,去调用这个方法,完成操作。下面是一些示例代码:

===========Java Code==================

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.ie.InternetExplorerDriver;
import com.thoughtworks.selenium.Selenium;

public class Browser {
    private static WebDriver driver;
    private static Selenium selenium;
    private static String baseUrl;
    private static String chosenBrowser;

          
    public static WebDriver getDriver() {
        return driver;
    }

    public static Selenium getSelenium() {
        try {
            Thread.sleep(delay);
        }
        catch (InterruptedException e) {}
        return selenium;
    }
    
       public boolean setBrowserToTestTo(String browser) throws Exception {
        if (browser.compareToIgnoreCase("FireFox") == 0) {
            ProfilesIni allProfiles = new ProfilesIni();
            FirefoxProfile profile = allProfiles.getProfile("default");
            profile.setEnableNativeEvents(true);
            Browser.driver = new FirefoxDriver(profile);
            chosenBrowser = "Firefox";
            try
            {
                alerter = driver.switchTo().alert();
               
            }
            catch (Exception ex)
            {
                //boop boop nothing
            }           
            return true;
        }
        else if (browser.compareToIgnoreCase("Internet Explorer") == 0) {
         Browser.driver = new InternetExplorerDriver();
            chosenBrowser = "Internet Explorer";
            try
            {
                alerter = driver.switchTo().alert();
               
            }
            catch (Exception ex)
            {
                //boop boop nothing
            }
            return true;
        }
             return false;
    }

    public boolean setStartUrlTo(String url) {
        baseUrl = "http://" + url;
        //Browser.selenium = new WebDriverBackedSelenium(Browser.driver, baseUrl);
        Browser.driver=new InternetExplorerDriver();
        driver.get(baseUrl);
        return true;
    }

    public boolean setReplayDelay(long delay) {
        Browser.delay = delay;
        return true;
    }   
 }

===========Fitnesse==================

#调用Browser类的setBrowserToTestTo()和setStartUrlTo()

!define BROWSER_TO_TEST {Internet Explorer}

!define START_URL {www.baidu.com}

|script|util.Browser|
|set browser to test to |${BROWSER_TO_TEST}|
|set start url to|${START_URL}|

===========说明==================

1. 用Selenium编写代码,模拟测试步骤,用Fitnesse调用。

2. 注意测试数据和测试步骤的分离。可以在Fitnees中创建test data的wiki page,然后import。

3. 注意java code中包的划分,比如哪些page或者button的代码放在一个包中。

4. 注意在Fitnesse中page的结构,比如test data的page放到同一个suite。

5. 使用Selenium编写方法是,代码的颗粒度。比如说,如果login page, 可以把打开浏览器,输入URL,输入用户名,密码,点击login,写到同一个方法中,也可以分成五个方法。具体怎样组织,要考虑到代码的重用程度。