<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Build and Release Management &#187; Automated Test Framework</title>
	<atom:link href="http://allscm.com/archives/category/automated-test-framework/feed" rel="self" type="application/rss+xml" />
	<link>http://allscm.com</link>
	<description>Build. Release. Profit</description>
	<lastBuildDate>Tue, 15 May 2012 22:15:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>CruiseControl&#8217;s Scheduler of Multiple Builders</title>
		<link>http://allscm.com/archives/cruisecontrols-scheduler-of-multiple-builders.html</link>
		<comments>http://allscm.com/archives/cruisecontrols-scheduler-of-multiple-builders.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 00:33:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automated Test Framework]]></category>
		<category><![CDATA[Build Framework]]></category>

		<guid isPermaLink="false">http://allscm.com/?p=120</guid>
		<description><![CDATA[Ever run into the problem where you must set multiple builders running different inside of CruiseControl&#8217;s scheduler block?  I recently had to do that for one of the projects I&#8217;m integrating, but kept on running into inconsistency in CruiseControl 2.8.2. My first attempt was this: &#60;schedule interval=&#34;900&#34;&#62; &#60;ant time=&#34;1200&#34; anthome=&#34;${ANTHOME}&#34; antworkingdir=&#34;${my_build.dir}&#34; buildfile=&#34;${my_build.file}&#34; target=&#34;build.all.then.test&#34; uselogger=&#34;true&#34; usedebug=&#34;false&#34;/&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Ever run into the problem where you must set multiple builders running different inside of CruiseControl&#8217;s scheduler block?  I recently had to do that for one of the projects I&#8217;m integrating, but kept on running into inconsistency in CruiseControl 2.8.2.</p>
<p>My first attempt was this:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;schedule</span> <span style="color: #000066;">interval</span>=<span style="color: #ff0000;">&quot;900&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">time</span>=<span style="color: #ff0000;">&quot;1200&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;${ANTHOME}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">antworkingdir</span>=<span style="color: #ff0000;">&quot;${my_build.dir}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;${my_build.file}&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build.all.then.test&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>		
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">time</span>=<span style="color: #ff0000;">&quot;1800&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;${ANTHOME}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">antworkingdir</span>=<span style="color: #ff0000;">&quot;${my_build.dir}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;${my_build.file}&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build.all&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>	
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">time</span>=<span style="color: #ff0000;">&quot;2400&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;${ANTHOME}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">antworkingdir</span>=<span style="color: #ff0000;">&quot;${my_build.dir}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;${my_build.file}&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build.all&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>			 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/schedule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Which translates to the following build frequency:  6pm and midnight just build using <em>build.all</em> target.  Noon build using <em>build.all.then.test</em> target.  </p>
<p>It would make sense right?  That didn&#8217;t work.  For some strange reasons, all three time frame, it built using <em>build.all</em>.</p>
<p>So then I modified it, according to CruiseControl&#8217;s documentation recommendation, to the following:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;schedule</span> <span style="color: #000066;">interval</span>=<span style="color: #ff0000;">&quot;900&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">time</span>=<span style="color: #ff0000;">&quot;1200&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;${ANTHOME}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">antworkingdir</span>=<span style="color: #ff0000;">&quot;${my_build.dir}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;${my_build.file}&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build.all.then.test&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>		
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">multiple</span>=<span style="color: #ff0000;">&quot;1&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">anthome</span>=<span style="color: #ff0000;">&quot;${ANTHOME}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">antworkingdir</span>=<span style="color: #ff0000;">&quot;${my_build.dir}&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">buildfile</span>=<span style="color: #ff0000;">&quot;${my_build.file}&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;build.all&quot;</span> </span>
<span style="color: #009900;">	 <span style="color: #000066;">uselogger</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span>
<span style="color: #009900;">	 <span style="color: #000066;">usedebug</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>			 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/schedule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Which translates to check for changes and build every 15mins, but for the 12pm build, run the <em>build.all.then.test</em> instead.  That did NOT work.. Did you run into a similar problem?  What was your solution?</p>
]]></content:encoded>
			<wfw:commentRss>http://allscm.com/archives/cruisecontrols-scheduler-of-multiple-builders.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quick Test Profession (QTP) Exit Code</title>
		<link>http://allscm.com/archives/quick-test-profession-qtp-exit-code.html</link>
		<comments>http://allscm.com/archives/quick-test-profession-qtp-exit-code.html#comments</comments>
		<pubDate>Thu, 30 Aug 2007 09:11:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automated Test Framework]]></category>

		<guid isPermaLink="false">http://allscm.com/?p=49</guid>
		<description><![CDATA[Ever run into the problem where you have to use NAnt or CruiseControl.net script to call Quick Test Professional test suites to only discover that QTP doesn&#8217;t really have proper exit codes which drives the error reporting of NAnt/CruiseControl.NET nuts?  Yeah, I have recently.. and here&#8217;s how I skirted the problem. With the suggestion and [...]]]></description>
			<content:encoded><![CDATA[<p>Ever run into the problem where you have to use NAnt or CruiseControl.net script to call Quick Test Professional test suites to only discover that QTP doesn&#8217;t really have proper exit codes which drives the error reporting of NAnt/CruiseControl.NET nuts?  Yeah, I have recently.. and here&#8217;s how I skirted the problem.</p>
<p>With the suggestion and help from a colleague in SQA, a Visual Basic executable wrapper was written on top of the QTP.exe program and viola!, NAnt now detects the proper exit codes and stops flinging build &#8216;poo&#8217; errors onto the reports.  First you must use DOS cmd files to detect the various negative exit codes Quick Test Professional spits out whenever it finishes, then write those codes down based on successful/failed test runs for use with your Visual Basic wrapper.  Why Visual Basic?  Because its simple and straight forward, you can also use PERL or any other wrapper that tickles your fancy.</p>
<p>Now.. the real problem arises when you want to integrate QTP test reports into CruiseControl.NET&#8217;s webdashboard without having to actually open Quick Test Professional program suite itself.  I will elaborate on how I get around that in a future blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://allscm.com/archives/quick-test-profession-qtp-exit-code.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration Management Policy</title>
		<link>http://allscm.com/archives/configuration-management-policy.html</link>
		<comments>http://allscm.com/archives/configuration-management-policy.html#comments</comments>
		<pubDate>Thu, 19 Jul 2007 08:14:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automated Test Framework]]></category>
		<category><![CDATA[Build Framework]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Release Framework]]></category>
		<category><![CDATA[SCM Agile Development]]></category>

		<guid isPermaLink="false">http://allscm.com/?p=23</guid>
		<description><![CDATA[To promote the spirit of Agile Development and Continuous Integration, groups of builds must be classified and treated differently within the development organization. These builds are as follows: Engineering: These builds lives on the individual developer&#8217;s machine. It should never see the light of day beyond this scope. This is merely a convenient build tool [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-199" style="margin: 5px;" title="policy" src="http://allscm.com/wp-content/uploads/2007/07/policy.png" alt="policy" width="58" height="74" />To promote the spirit of Agile Development and Continuous Integration, groups of builds must be classified and treated differently within the development organization.  These builds are as follows:</p>
<ul>
<li>Engineering:  These builds lives on the individual developer&#8217;s machine.  It should never see the light of day beyond this scope.  This is merely a convenient build tool designed to allow developers to easily build and debug their code.  There are exceptions, however; for teams developing in the new .NET paradigm using the all inclusive solution (*.sln) files to build will have no need for this type of build.  This is mainly useful for older softwares where several manual modification/moving/copying of file operations are need.  These builds are then classified as on-demand.</li>
<li>Continuous Integration (Development):  These types of builds can also be referred to as the Continuous Integration (CI) builds.  These builds lives on a stand-alone machine and the artifacts should only be made available to the immediate development team of the respective project.  These builds should then be considered continuous since it is constantly polling for new check-ins.</li>
<li>Software Configuration Management (Product Testing):  These builds are on-demand and should only be initiated by team leads or managers of the particular development group.  These builds should be built based on a label within the source control tool.  There should not be any errors as these builds are derived from successful CI builds.  The consumer for these builds will be the QA group.</li>
<li>Software Configuration Management (Product Release):  Similar to that of the product test SCM builds, these only differ in nature and title as they are meant for real world consumption.</li>
</ul>
<p>To create quick build turn-arounds, plentiful CPU cycles, clean and reproducible build environments; each one of these build classifications should live on its own machine/server.   The two flavors of SCM builds can actually be on the same server, but Engineering, CI, and SCM must all exist separately.</p>
<hr />UPDATE (from Paul Keeble):</p>
<p>There is another way of looking at this, especially when considering the agile process, and especially when in an enterprise software environment.</p>
<p>You still have the needs for a Engineer build and a CI build but instead of the SCM builds you instead &#8220;promote&#8221; the CI build.  What this effectively means is that someone chooses a CI build to push towards QA, and then this is pushed ultimately to production, etc.</p>
<p>As a process it has the advantage of being simplier and centralises all efforts around the automated build.   It is physically impossible for the wrong code to get built for production because someone changed a tag, instead the built artifact is the same (and can be checked against an MD5 to test it).</p>
<p>Although not as frequent in the .NET world its a common practice in the Java world.</p>
]]></content:encoded>
			<wfw:commentRss>http://allscm.com/archives/configuration-management-policy.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

