Set up continuous build server to include acceptance tests using Watir
Acceptance tests integrated into the continuous build server provides team members constant feedback, its benefits is quite obvious. Here I show you how to include web acceptance tests (using Watir) in CruiseControl server for a typical Java/J2EE project.
Prerequisite:
- CruiseControl installed and configured properly.
- Ruby and Watir/rWebUnit installed, easiest way is to install PRoR.
1. Create a Rakefile in your acceptance test folder (in our example, test/acceptance)
require 'rubygems' gem 'ci_reporter' gem 'rspec' require "rexml/document" require "spec/rake/spectask" require 'ci/reporter/rake/rspec' # use this if you're using RSpec task :default => ["test:acceptance"] Spec::Rake::SpecTask.new("quick") do |t| t.spec_files = FileList[ "login_spec.rb", "payment_spec.rb", ] t.warning = false end task "test:acceptance" => "ci:setup:rspec" do Rake::Task["quick"].invoke end
2. Test it out by running tests from command line
C:\wenji>rake test:acceptance
(in C:/wenji)
rm -rf spec/reports
.
.
.
Finished in 98.547 seconds
3. Add the acceptance test target in your Ant build.xml
<property name="test.acceptance.dir" value="test/acceptance"/> <!-- Run acceptance tests from Ant script --> <target name="test.acceptance"> <exec executable="cmd" dir="${test.acceptance.dir}" resultproperty="test.acceptance.result"> <arg value="/c"/> <arg value="rake"/> <arg value="test:acceptance"/> </exec> <echo message="acceptance result: ${test.acceptance.result}"/> <antcall target="test.acceptance.report"/> <fail message="rWebUnit tests failed" unless="test.acceptance.result"/> </target> <!-- The html report are under test/acceptance/spec/reports_html --> <target name="test.acceptance.report"> <delete dir="${test.acceptance.dir}/spec/reports_html"/> <mkdir dir="${test.acceptance.dir}/spec/reports_html"/> <mkdir dir="${test.acceptance.dir}/spec/reports"/> <junitreport todir="${test.acceptance.dir}/spec/reports_html"> <fileset dir="${test.acceptance.dir}/spec/reports"> <include name="SPEC-*.xml"/> </fileset> <report format="frames" todir="${test.acceptance.dir}/spec/reports_html"/> </junitreport> </target>
Test it out
ant -f build.xml test.acceptance
4. Add this new acceptance target to main build target triggered by CC
<target name="go" depends="compile, coverage.instrument, test.unit, deploy, test.acceptance" description="Quick build as triggered by CruiseControl Server - build, deploy, and test" > </target>
5. You will see acceptance tests running for next CruiseControl build, to view acceptance test report (called Artifact in CC), edit CC project file under publishers
<artifactspublisher subdirectory="acceptance_test_report" dir="${trunk}/test/acceptance/spec/reports_html" dest="artifacts/${project.name}"> </artifactspublisher>