Another guest post from Ragazzo containing some practical tips on configuring CI server. If you ever wanted to ask how you could use Codeception with Jenkins, you are in a right place.
It is very good to automate maximum of the things you can. Once we automated testing process, build should be automated too. I use Jenkins as my primary continuous integration server. It can be installed and executed on all popular operating systems with Java enabled.
As for PHPUnit I use JUnit format for error reports and some Jenkins plugins to make it work with Code Coverage. For Behat and Codeception I also use JUnit output log format and Jenkins PHPUnit Plugin.
Thus, my application have 4 jobs in Jenkins they named in that way:
MyProject_Testing_Unit
# via phpunitMyProject_Testing_Func
# via behatMyProject_Testing_Func_Web
# codeception functionalMyProject_Testing_Accep_Web
# codeception acceptance
And of course one job for bulding packages for demo and for developer:
- MyProject_Build_Dist
I scheduled jobs to run one by one so the first goes Unit
, then it triggers Func
, then Func
triggers Func_Web
and so on. Build
is not triggered automatically, I start it by myself.
Configuring Builds
Lets pay attention on two of them that include Codeception. I'm using Ant build tool to execute them.
Bascially for JUnit output you need nothing more then running codeception with --xml
option. Like this:
codecept.phar --xml run functional
This will produce the report.xml
file in tests/_log
directory, which will be analyzed by Jenkins. In my Ant task I'm also clearing a _log directory before running tests.
<project name="MyProject_Testing_Func_Web" default="build" basedir=".">
<target name="clean">
<delete dir="${basedir}/build/src/protected/tests/codeception/tests/_log" includes="**/*" />
</target>
<target name="codeception">
<exec dir="${basedir}/build/src/protected/tests/codeception" executable="php" failonerror="true">
<arg line="codecept.phar --xml run functional" />
</exec>
</target>
<target name="build" depends="clean, codeception"/>
</project>
Also you may want to add the --html
option for execution. That would produce a readable HTML report, that you can show to your boss. You will need HTML Publisher Plugin to display it in Jenkins web interface.
Using Selenium2 and Xvfb
To run acceptance web tests correctly on server you don't need to install desktop environment like Gnome or XFCE just to launch a browser. Better to use Virtual Framebuffer Xvfb for running Selenium tests without showing them on screen.
You need to install Xfvb and then run Selenium2 with this options:
export DISPLAY=":1" && java -jar selenium-server-standalone.jar
Then start your Codeception acceptance tests as usual. By the way, I suggest you to use this Xvfb init script in Ubuntu.
There is nothing hard in setting up Jenkins. You can use Codeception with it or in any other CI server. If you already did that, please share your experience with community. We really need more personal experiences and blogposts from the community. Documentation can't cover all use cases, that's why your thought are much appreciated. If you don't have a blog we can publish your blogpost here.
P.S. Just to mention, If you are using Bamboo CI server, pls enable the --no-exit
option to run tests correctly.