My test setup is for a little wicket 1.5.x based web application with ui tests running during integration-test phase of maven 3.x. The problem here is that my ubuntu 12.01 server has only a console and no gnome or kde running like a desktop linux. Inside eclipse is a test, which starts a browser like firefox to run automated clicks, no problem. I decided to use the webdriver based selenium tests which can use several driver for the different browser. Each driver supports a different browser like chrome, internet explorer or firefox. My tests starts a firefox with explicit locale setting. The wicket application is i18n localized for english an german speaking customer. On the server is a jenkins ci installed with subversion polling to run automated tests during maven build. You can run the scenario with no problems as well under hudson as ci. The solution use xvfb a virtual xwindow system for firefox as desktop. It will automatically started and stopped by jenkins during a job build.
Software Installation on the server
Installation of xvfb
apt-get install xvfb gtk2-engines-pixbuf
Installation of fonts
apt-get install xfonts-base xfonts-75dpi xfonts-100dpi
apt-get install xfonts-scalable xfonts-cyrillic
Installation of tools for testing xvfb
apt-get install x11-apps imagemagick
Testing server installation
1. Console run server
Xvfb -ac :99 -screen 0 1280x1024x16
2. console start firefox
export DISPLAY=:99
firefox http://ralf.schaeftlein.com
3. console make a screenshot
xwd -root -display :99 | convert xwd:- capture.png
And see a result like this when you retrieve the file capture.png via ssh
Jenkins Configuration
Init.d Script for xvfb
Save content as file under /etc/inid.d/xvfb
XVFB=/usr/bin/Xvfb
XVFBARGS="$DISPLAY -ac -screen 0 1280x1024x16"
PIDFILE=/var/hudson/xvfb_${DISPLAY:1}.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0
Set rights for jenkins running user on the script
chown jenkins:root /etc/init.d/xvfb
chmod ug+rwx /etc/init.d/xvfb
Add display environment variable to jenkins init.d script
export DISPLAY=:99
Create a new jenkins job
Create a new jenkins job for your web project stored in subversion
Add to pre and post build step a shell script to start and stop xvfb
Configure maven pom of the web project
Define special tests in surefire to run as integration tests and jetty as integration application server
org.apache.maven.plugins
maven-surefire-plugin
2.4.3
true
surefire-test
test
test
false
**/itest/**
surefire-itest
integration-test
test
false
**/itest/**
org.mortbay.jetty
maven-jetty-plugin
6.1.26
10
foo
9998
/${project.artifactId}
true
${basedir}/src/test/webapp/WEB-INF/web.xml
9999
60000
start-jetty
pre-integration-test
run
0
true
stop-jetty
post-integration-test
stop
Add dependency to selenium maven artifacts
org.seleniumhq.selenium.client-drivers
selenium-java-client-driver
1.0.2
test
org.seleniumhq.selenium
selenium-java
2.21.0
test
Record ui steps and write a selenium junit test
Install the selenium ide as firefox plugin
Start firefox and install the xpi file as new plugin. Restart firefox afterwards.
Record ui steps
- Open the menu, choose web developer and their selenium ide.
- Start inside eclipse the tomcat with your web application
- Open in firefox the web application
- Click inside selenium ide on the red record button for start recording
- Click through your web application
- Click again on the red record button for stop recording
- Choose from menu “Export as testcase” and their “Junit4 (Webdriver backed)”
- Save file as test.java
Create an new selenium junit test file
- Copy the test.java into your eclipse project into the src/test/java folder
- Adopt the class definition and setup method like this
public class SeleniumTest {
private Log log = LogFactory.getLog(getClass());
protected Selenium selenium;
@Before
public void setUp() throws Exception {
FirefoxProfile profile = new FirefoxProfile();
// enable german language locale
profile.setPreference("intl.accept_languages", "de-de,de");
profile.setEnableNativeEvents(true);
profile.layoutOnDisk();
WebDriver driver = new FirefoxDriver(profile);
String baseUrl = "http://localhost:9999/"; // port jetty surefire integration test
selenium = new WebDriverBackedSelenium(driver, baseUrl);
}
– insert java code –
- Check into subversion and control jenkins job console.