利用SWTBot实现高效的SWT和基于Eclipse的应用程序的自动化测试开发
SWTBot是一个开源基于Java的自动化运行时测试工具,其测试速度快效率高,可以GUI测试SWT和基于Eclipse的应用程序,可以运行在SWT能运行的所有平台上,可以使得开发和测试人员更紧密而高效的合作开发自动化测试。SWTBot提供了许多访问SWT和Eclipse组件的API来隐藏SWT和Eclipse的复杂性,利用这些API即可方便地操控SWT控件来实现自动化测试。本文将介绍SWTBot如何测试SWT应用程序和它的一些基本工作机制。
SWTBot如何测试SWT应用程序:
本例采用jdk1.5,swtbot2.0,junit3.8来测试SWT应用程序中文本控件存在,重设文本内容并校验,代码如下:
package example.swtbot.test;
//import swt package
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
//import swtbot package
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
//import junit package
import junit.framework.TestCase;
//import log4j package
import org.apache.log4j.PropertyConfigurator
public class HelloWorld extends TestCase{
SWTBot bot;
public void setUp() {
PropertyConfigurator.configure("config\\log4j.properties");
}
public void testHelloWorld() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Hello World");
shell.setSize(200, 80);
Text text = new Text(shell,SWT.MULTI | SWT.BORDER);
text.setBounds(0, 0, 200, 80);
text.setText("Hello World SWT");
shell.open();
bot = new SWTBot();
if(!display.isDisposed()){
SWTBotText t = bot.text("Hello World SWT", 0);
assertNotNull(t);
bot.sleep(600);
t.setText("new test string");
assertEquals("new test string", t.getText());
}
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
编译前先拷贝本项目example.swtbot.test\lib\ext下的四个jar文件(如图1)到你的jre/lib/ext目录下,然后javac -cp lib\junit.jar -d bin src\example\swtbot\test\HelloWorld.java。
图1
运行可有多种方式,这里仅提供命令行方式:java -cp lib\junit.jar;bin junit.textui.TestRunner example.swtbot.test.HelloWorld,运行结果和本项目结构(如图2):
图2
SWT应用程序启动界面(如图3)
SWT应用程序测试界面(如图4),其文本控件重设文本内容成功。
图4
为保存测试结果运行前请拷贝本项目example.swtbot.test\config下的log4j.properties到你的项目config目录,其内容如下:
log4j.rootCategory=DEBUG, R, O
# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender
# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n