基于Selenium和Fitnesse的自动化测试框架
这一阵做一个自动化测试工具,基于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,写到同一个方法中,也可以分成五个方法。具体怎样组织,要考虑到代码的重用程度。
补充:综合编程 , 其他综合 ,