Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "SWTBot/Automate test execution"
(→On Jenkins) |
|||
Line 18: | Line 18: | ||
== On Jenkins == | == On Jenkins == | ||
− | Use [https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin Xvnc] or [https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin Xvfb plugin | + | Use [https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin Xvnc] or [https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin Xvfb] Jenkins plugin in you job to start on X session on a new DISPLAY. Then invoke a "Shell build step" to start a window manager (metacity or twm are working fine, others should be fine too) |
= With Maven and Tycho = | = With Maven and Tycho = |
Revision as of 04:07, 21 August 2012
SWTBot |
Website |
Update Sites |
Community |
Mailing List |
Forums/Newsgroups |
IRC |
Contribute |
Open Bugzilla tickets |
Open Gerrit reviews |
Browse Source |
Continuous Integration |
Environment requirements
On Mac and Windows, you can only run SWTBot tests in the main UI session, and you have to wait for tests to finish before you can keep on working. On Linux, you need to have a X session started with a Window Manager. GTK must be installed.
Locally on Linux: use another DISPLAY to save time
SWTBot requires tested application to have focus in order to work well. If it happens on the DISPLAY you're working on, then you have to wait for tests to end before you can go on working. It's a waste of time. On Linux, you can run your test on another DISPLAY, so you can keep on working while tests are running. You can use Xephyr for that, since it allows you to see what is happening in another window. You'll also need to have a Window Manager started on this Xephyr. we recommand to run Metacity, but any other WM should run (twm is successfully used too).
$ Xephyr -screen 1024x768 :51 & $ export DISPLAY=:51 $ metacity --sm-disable --replace & $ ...command that runs SWTBot tests...
On Jenkins
Use Xvnc or Xvfb Jenkins plugin in you job to start on X session on a new DISPLAY. Then invoke a "Shell build step" to start a window manager (metacity or twm are working fine, others should be fine too)
With Maven and Tycho
Tycho tests can be run in SWTBot as normal surefire test. The only difference is SWTBot requires <useUIHarness>true</useUIHarness> and <useUIThread>false</useUIThread>
<build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-surefire-plugin</artifactId> <version>${tycho.version}</version> <configuration> <useUIHarness>true</useUIHarness> <useUIThread>false</useUIThread> <product>org.eclipse.sdk.ide</product> <application>org.eclipse.ui.ide.workbench</application> </configuration> </plugin> </plugins> </build>
Examples:
- Eclipse EGit is running swtbot tests using Maven 3.0 and Tycho :
With Ant or Command-Line
SWTBot allows for tests to be executed from ant or command-line. Here are some steps that you need to perform in order to run tests in a 'headless' way.
A Screencast
Videos speak louder than pictures and words put together:
- A 5 minute quick quick tutorial on how to get started with swtbot
- Running SWTBot tests from the command line
Installing headless Testing Framework
With p2 (recommanded)
From your favourite RCP application using p2, run, by replacing SWTBot site by the SWTBot update site of the version you want to use
SWTBOT_SITE=... java -jar plugins/org.eclipse.equinox.laucher_*.jar -application org.eclipse.p2.director -consolelog -repository $SWTBOT_SITE -installIU org.eclipse.swtbot.eclipse.test.junit.feature.group -installIU org.hamcrest
See Director app wiki page for details.
or Manually
- Download the Headless Testing Framework for running tests from within ant. This file is called named something like org.eclipse.swtbot.eclipse.test-2.0.0.187-dev.zip
- You'll need the following plugins from swtbot (you don't need all the swtbot packages)
- org.eclipse.swtbot.swt.finder
- org.eclipse.swtbot.eclipse.finder
- org.hamcrest
- org.junit4(recommended) you may also use org.junit
- org.apache.log4j
Setup
Your folder structure should look like the following:
ECLIPSE_HOME + plugins | - com.yourplugins | - ... | - ... | - org.eclipse.swtbot.swt.finder | - org.eclipse.swtbot.eclipse.finder | - org.hamcrest (and other dependencies) | - ... | - ... | - org.eclipse.swtbot.ant.optional.junit4 (or junit3, but not both) (from the Headless Testing Framework) | - org.eclipse.swtbot.eclipse.junit4.headless (or junit3.headless, but not both) (from the Headless Testing Framework) | - org.junit4 (or org.junit, but not both) + features
Executing
The key is to run the org.eclipse.swtbot.eclipse.junit4.headless.swtbottestapplication
Command-line
Here's a command line argument that's used to execute the tests:
$ ECLIPSE_HOME=/path/to/your/application $ TEST_CLASS=com.yourcompany.product.test.AllTessts # see http://github.com/ketan/swtbot/blob/master/org.eclipse.swtbot.eclipse.finder.test/src/org/eclipse/swtbot/eclipse/finder/AllTests.java for an example $ TEST_APPLICATION_ID=com.yourcompany.example.application # the id of the application that needs to be tested $ WORKSPACE=/path/to/your/workspace $ TEST_PRODUCT_ID=com.yourcompany.product # optional, if you're not using a product, please do not add the -product argument in the command below $ TEST_PLUGIN_ID=com.yourcompany.product.test # the id of the plugin containing SWTBot tests $ OS=[macosx | win32 | linux] $ WS=[[cocoa|carbon] | gtk | win32] # for macosx, linux, and windows respectively. $ ARCH=[x86|x86_64] # for 32 bit and 64 bit swt binaries. $ $JAVA_HOME/bin/java \ -Xms256M -Xmx768M -XX:MaxPermSize=512M \ -classpath $ECLIPSE_HOME/plugins/org.eclipse.equinox.launcher_1.0.200.v20090128-1500.jar \ org.eclipse.core.launcher.Main \ -application org.eclipse.swtbot.eclipse.junit4.headless.swtbottestapplication \ -testApplication $TEST_APPLICATION_ID -product $TEST_PRODUCT_ID \ # optional, only if you're working with a product -data $WORKSPACE \ formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,$ECLIPSE_HOME/$TEST_CLASS.xml \ formatter=org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter \ -testPluginName $TEST_PLUGIN_ID \ -className $TEST_CLASS \ -os $OS -ws $WS -arch $ARCH \ -consoleLog -debug
This will run the test specified by TEST_CLASS and generate the test output in ECLIPSE_HOME/TEST_CLASS.xml. This output can be parsed using junitreport ant task.
Ant
<echo>SWTBot test</echo> <java dir="${eclipse.home}" fork="true" output="${eclipse.test.home}/output.txt" logError="true" classname="org.eclipse.core.launcher.Main" failonerror="false"> <classpath> <fileset dir="${eclipse.home}/plugins"> <include name="org.eclipse.equinox.launcher_*.jar"/> </fileset> </classpath> <jvmarg line="-Xms256M -Xmx768M -XX:MaxPermSize=512M"/> <arg line="-application org.eclipse.swtbot.eclipse.junit4.headless.swtbottestapplication"/> <arg line="ARGUMENTS"/> <arg line="FROM"/> <arg line="COMMAND LINE"/> <arg line="EXAMPLE ABOVE"/> </java>
Pre-prepared ant tasks
The script at http://github.com/ketan/swtbot/blob/master/org.eclipse.swtbot.releng/test-sandbox/org.eclipse.swtbot.eclipse.finder.test.xml shows an example of how you can use the standard ant task available with SWTBot:
<ant target="swtbot-test" antfile="${library-file}" dir="${eclipse-home}"> <property name="data-dir" value="${temp-workspace}" /> <property name="plugin-name" value="${plugin-name}" /> <property name="classname" value="org.eclipse.swtbot.eclipse.finder.AllTests" /> <property name="vmargs" value=" -Xms128M -Xmx368M -XX:MaxPermSize=256M ${jvmOption}" /> </ant>
The ${library-file} is part of the Headless Test Framework and can be viewed at http://github.com/ketan/swtbot/blob/master/org.eclipse.swtbot.eclipse.junit4.headless/library.xml. This ant script performs the actual launch for the tests using the command line above.