You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
Functional tests are written in Java using Selenium testing framework. They take the advantage of Maven build. Despite the fact they are not using Arquillian, we tried to provide you similar ease of execution.
Simply execute maven with additional execution profile. These profile are responsible for:
Currently supported profiles and containers are stated below. Container must be running before test execution.
Please note that activating profile in Maven from a command line disables profile which is activated by default. If you still would like to use default profile, you must enable it together with the functional test profile. This is the case of Numberguess example, where profile jboss5 must be added.
Functional tests are bound into Maven's integration-test phase. Preferred way to execute them is to launch post-integration-test or verify target, such as:
$ mvn -Pftest-jboss-remote-60 verify
This will run functional tests and create results in target/test-report directory. You can find HTML source code and screenshots of failed tests in target/test-output directory.
Running functional test on examples in cluster is a little more complicated. Currently clustering tests are available only for numberguess example. Anyway there are other examples planned. Clustering test should be executed separately from other tests, not as part of test bundle.
Steps for running functional tests in cluster:
ad 1) You can download JBoss application server from www.jboss.org
ad 2) Weld core can be downloaded from annonsvn. After downloading of Weld core set JBOSS_HOME environment property to point to the first JBoss instance's directory and run the following command at core/jboss-as dir.
$ mvn -Pupdate-jboss-as install
Do the same with the second JBoss instance.
ad 3) Run first and second instance of JBoss AS
$ JBOSS1_HOME/bin/run.sh -c all -g DocsPartition -u 239.255.101.101 -b localhost -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default
$ JBOSS2_HOME/bin/run.sh -c all -g DocsPartition -u 239.255.101.101 -b localhost -Djboss.messaging.ServerPeerID=2 -Djboss.service.binding.set=ports-01
NOTE: Do it exactly as stated above. The test assume certain URL adresses which are ensured by these commands.
ad 4) Run the following command at jsf/numberguess directory in weld distribution
$ mvn -P ftest-jboss-cluster-60,jboss6cluster -Djboss.master.configuration=$PATH_TO_MASTER_ALL_CONFIGURATION verify
NOTE: jboss.master.configuration parameter points for example to /home/applications/JBoss-6.0.0.M1.master/server/all. Profile jboss6cluster causes the application to be packaged according to cluster environment's restrictions. Profile ftest-jboss-cluster-60 executes the functional testsuite.
All the properties passed to Selenium are defined as Maven properties, you can override them by -Dproperty=value flags in Maven command line.
Supported properties are:
Additionally, if you would like to test against SNAPSHOT version of functional test, set ftest.version.discriminator to -SNAPSHOT value. You can even force different version by setting ftest.version to desired version. This becomes handy when doing CI testing.
Last, but not least, you can change which methods are run, verbosity and the other parameters by modifying TestNG suite file located in src/test/selenium directory. Just select the file with respect to container you would like to use for testing.
Currently covered examples in Weld are:
Simple tests:
Clustering tests:
If you are not able to download functional test from any repository, you can find them at Ftest SVN or Anonymous Ftest SVN, where you can either download trunk and all modules, or just common and required module. There's a checkout.sh script, which will fetch all the functional test modules at once.
You can build and install them into your local Maven repository with:
$ mvn install
Since all the execution is defined in weld-example-parent in pluginManagement section of profiles, in your example you will just add the same profile with definition of functional test dependency and plugins to be executed. This suppose that weld-example-parent is parent of your example and ftest artifact is written ;). Profile used for JBoss AS 6 M1 and Weld login example is stated below:
<profile> <id>ftest-jboss-remote-60</id> <activation> <activeByDefault>false</activeByDefault> </activation> <properties> <ftest.artifact>ftest-login</ftest.artifact> <ftest.version>0.1${ftest.version.discriminator}</ftest.version> </properties> <dependencies> <dependency> <groupId>org.jboss.weld.examples.ftest</groupId> <artifactId>${ftest.artifact}</artifactId> <version>${ftest.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>selenium-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>failsafe-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> </plugin> </plugins> </build> </profile>
Pleas note that existence of property ${ftest.artifact} is necessary, because it allows parent to store functional test source at appropriate place while Maven processes example source.