Channels ▼
RSS

Design

Continuous Integration and Performance Testing

Source Code Accompanies This Article. Download It Now.


Setting up Continuous Integration

So let's look at a real working continuous integration environment that has been extended to performance testing, the one I use daily in my work.

There are various continuous integration servers available, but for this exercise I chose CruiseControl (cruisecontrol.sourceforge.net). After downloading and installing the Windows version, the first step is to check out a copy of the application's source code to the project's directory on the continuous integration server. The following checks out the "trunk" branch of my "tddci" Subversion repository, which I've set up for this exercise with a single project named "ant-junit":


svn checkout file:///c:/lib/svn-win32-1.4.3/repositories/tddci/trunk

CruiseControl's central config.xml configuration file specifies the details of the projects it is responsible for building. Listing One is the initial CruiseControl project definition for continuous integration of our ant-junit project.


<project name="ant-junit">
  <listeners>
  <currentbuildstatuslistener
      file="logs/${project.name}/status.txt"/>
  </listeners>

  <bootstrappers>
    <svnbootstrapper localWorkingCopy="projects/${project.name}" />
  </bootstrappers>

  <modificationset quietperiod="30">
    <svn localWorkingCopy="projects/${project.name}"/>
  </modificationset>

  <schedule interval="60">
    <ant anthome="apache-ant-1.6.5"
         buildfile="projects/${project.name}/build.xml"
         target="dist-clean" />
  </schedule>
  <log>
    <merge dir="projects/${project.name}/test-results"/>
  </log>
  <publishers>
    <onsuccess>
      <artifactspublisher dest="artifacts/${project.name}"
         file="projects/${project.name}/dist/lib/AntJUnitExample.jar"/>
    </onsuccess>
    <htmlemail mailhost="mail.mymailserver.com"
               mailport="25"
               username="steve@javasrc.com"
               password="secret"
               returnaddress="steve@mymailserver.com"
               defaultsuffix="@mymailserver.com"
               logdir="logs/${project.name}"
               css="c:\lib\cruisecontrol-bin-2.6\
                   webapps\cruisecontrol\css\cruisecontrol.css"
               xsldir="c:\lib\cruisecontrol-bin-2.6\
                   webapps\cruisecontrol\xsl"
               buildresultsurl="http://localhost:8080/cruisecontrol/
                   buildresults/${project.name}">
      <map alias="steve" address="steve@mymailserver.com" />
      <always address="steve" />
    </htmlemail>
  </publishers>
</project>
Listing One

There are several important CruiseControl components in Listing One. The svnbootstrapper bootstrapper plug-in checks for (and checks out if it exists) new code in the Subversion repository. The schedule section controls how often the source repository is checked for new code, and the Ant task to run (30 minutes is actually a more realistic interval for large projects). The publishers section controls what happens after the CruiseControl project has completed its run—in this case copying the newly built JAR file to an artifacts directory if successful, and sending notifications in any case.

With this project defined, you can start CruiseControl by running its cruisecontrol.bat (or cruisecontrol.sh) file. Figure 1 shows its built-in servlet-based web interface, accessed at http://servername:8080.

[Click image to view at full size]

Figure 1: Test results page in CruiseControl web console.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video