<?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>Xceptance Blog</title>
	<atom:link href="http://blog.xceptance.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xceptance.com</link>
	<description>Passionate Testing</description>
	<lastBuildDate>Fri, 20 Apr 2012 17:56:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Xceptance, Inc. is hiring</title>
		<link>http://blog.xceptance.com/2012/04/20/xceptance-inc-is-hiring/</link>
		<comments>http://blog.xceptance.com/2012/04/20/xceptance-inc-is-hiring/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 17:55:55 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=748</guid>
		<description><![CDATA[Xceptance, Inc. is hiring a Quality Assurance Test Lead in the Greater Boston Area. Take a look at our job posting.]]></description>
			<content:encoded><![CDATA[<p>Xceptance, Inc. is hiring a <a href="http://www.xceptance.com/jobs-and-career/items/quality-assurance-test-lead.html">Quality Assurance Test Lead</a> in the Greater Boston Area. Take a look at <a href="http://www.xceptance.com/jobs-and-career/items/quality-assurance-test-lead.html">our job posting</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/04/20/xceptance-inc-is-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT skills are in demand</title>
		<link>http://blog.xceptance.com/2012/03/15/xlt-skills-are-in-demand/</link>
		<comments>http://blog.xceptance.com/2012/03/15/xlt-skills-are-in-demand/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 22:41:51 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Quotations]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[ct]]></category>
		<category><![CDATA[skills]]></category>
		<category><![CDATA[study]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=737</guid>
		<description><![CDATA[The German computer magazine c’t recently published the results of their recurring income study among IT personnel. The hourly rates for knowledge and skills list XLT – Xceptance LoadTest – in second place, right after DB2 and before Windows Embedded. Yes, we were a little surprised to see XLT skills in such high demand. It [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="/wp-content/uploads/2012/03/ct2012-06-page94-xlt-skills.jpg"><img class="alignright size-thumbnail wp-image-738" title="c't 06/2012, Page94" src="http://blog.xceptance.com/wp-content/uploads/2012/03/ct2012-06-page94-xlt-skills-200x200.jpg" alt="XLT skills in demand" width="200" height="200" /></a>The German computer magazine c’t recently published the results of their recurring income study among IT personnel.</p>
<p>The hourly rates for knowledge and skills list <a href="http://www.xceptance-loadtest.com/">XLT – Xceptance LoadTest</a> – in second place, right after DB2 and before Windows Embedded.</p>
<p>Yes, we were a little surprised to see XLT skills in such high demand. It encourages and motivates us, because we know that we are on the right track with XLT to deliver an flexible but simple and efficient tool for load and performance testing, as well as regression testing.</p>
<p>What does this mean for you as developer, tester, or IT decider? Get yourself a copy of <a href="http://www.xceptance-loadtest.com/">XLT</a>, take a closer look at it, train your developers, or learn it yourself, because others already have and they are enjoying a competitive advantage.</p>
<p>Source: <a href="http://www.heise.de/artikel-archiv/ct/2012/6/88_kiosk">Zahltag &#8211; c&#8217;t 06/2012, page 94</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/03/15/xlt-skills-are-in-demand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handle authentication during WebDriver testing</title>
		<link>http://blog.xceptance.com/2012/02/25/handle-authentication-during-webdriver-testing/</link>
		<comments>http://blog.xceptance.com/2012/02/25/handle-authentication-during-webdriver-testing/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 19:03:38 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[automaton]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[webdriver]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=728</guid>
		<description><![CDATA[Sometimes authentication is necessary before a test case can be executed. While HtmlUnit based tests can easily enter and confirm authentication requests, most browser based tests, cannot workaround the dialog. This is a browser security measure to prevent automated data capture and/or data entering. WebDriver for Firefox delivers a solution for that problem, but IE [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes authentication is necessary before a test case can be executed. While HtmlUnit based tests can easily enter and confirm authentication requests, most browser based tests, cannot workaround the dialog. This is a browser security measure to prevent automated data capture and/or data entering. WebDriver for Firefox delivers a solution for that problem, but IE and Chrome rely on a manual interaction with the browser before the test automation can run.</p>
<p>The following steps describe a solution for the authentication problem and how to run a script test case as WebDriver based test. The key to this solution is the usage of <a href="http://sikuli.org/">Sikuli</a>, an image based testing tool that directly interacts with the screen to find the right elements by using the screen. </p>
<p>Or in other words, the test automation controls the browser, not the operating system, while <a href="http://sikuli.org/">Sikuli</a> controls the display of the operating system and uses the keyboard and mouse to control any program.</p>
<ul>
<li>Download Sikuli tool for your platform (http://sikuli.org)</li>
<li>Extract the zip file</li>
<li>Add the path to Sikuli lib directory to your environment settings</li>
<li>Add sikuli-script.jar to your project</li>
<li>Implement a Java class as shown below</li>
<li>Take the necessary screenshots of the elements to use</li>
</ul>
<pre class="brush: java; title: ; notranslate">
import org.junit.Test;
import org.openqa.selenium.ie.InternetExplorerDriver;
import com.xceptance.xlt.api.engine.scripting.AbstractWebDriverScriptTestCase;
import com.xceptance.xlt.engine.scripting.XlteniumScriptInterpreter;
import org.sikuli.script.*;

public class TfoobarIE extends AbstractWebDriverScriptTestCase
{
    /**
     * Constructor starts internet explorer
     */
    public TfoobarIE()
    {
        super(new InternetExplorerDriver(), &quot;http://xlt.xceptance.com&quot;);
    }

    /**
     * Main test method solves authentication problem and executes xlt script developer script
     */
    @Test
    public void test() throws Throwable
    {
    	// create Sikuli screen object
    	Screen s = new Screen();

    	// open page with xlt
    	open(&quot;/demo/&quot;);

    	// wait 5 seconds for the image with the username input field
    	s.wait(&quot;./img/username_input_field.jpg&quot;,5);

    	// type username &quot;demo&quot; into the input field
    	s.type(&quot;demo&quot;);    

    	// type password into the password field
    	s.type(&quot;./img/password_input_field.jpg&quot;,&quot;demoomed!&quot;);

    	// click ok button
    	s.click(&quot;./img/ok_button.jpg&quot;);

    	// execute xlt script developer script
    	XlteniumScriptInterpreter interpreter = new XlteniumScriptInterpreter(getWebDriver());
    	interpreter.executeScript(&quot;Tfoobar&quot;);
    }
}
</pre>
<p>Do not forget to make the appropriate screenshots of the buttons and input fields (see code) and of course, adjust the path and login data. Have fun and watch the magic happening. For more information how Sikuli works, please visit <a href="http://sikuli.org/">sikuli.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/02/25/handle-authentication-during-webdriver-testing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Discontinued support of JRuby</title>
		<link>http://blog.xceptance.com/2012/02/23/discontinued-support-of-jruby/</link>
		<comments>http://blog.xceptance.com/2012/02/23/discontinued-support-of-jruby/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 08:56:50 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=724</guid>
		<description><![CDATA[The upcoming Xceptance LoadTest 4.2 will discontinue the direct support of JRuby as a programming language for writing test cases. This will not change the way Java and JRuby interact and therefore you can still use all Java components and integrate them into your JRuby-based test suite. You can also still write test cases in [...]]]></description>
			<content:encoded><![CDATA[<p>The upcoming Xceptance LoadTest 4.2 will discontinue the direct support  of JRuby as a programming language for writing test cases. This will  not change the way Java and JRuby interact and therefore you can still  use all Java components and integrate them into your JRuby-based test  suite. You can also still write test cases in Ruby and use XLT-APIs.</p>
<p>You can read about this feature, in case you are not sure whether or not you will be affected by this change: <a href="https://lab.xceptance.de/releases/xlt/3.3.0/releasenotes.html#Rubyasthescriptinglanguagefortestcases441">XLT 3.3.0 JRuby support release note</a>.</p>
<p>Version 4.2 of Xceptance LoadTest will not continue the JRuby package  anymore (jruby.jar). The test execution scripts for JRuby-based tests  and all demo test cases will be removed as well.</p>
<p>If you have any questions regarding this change, please do not hesitate to contact our support team directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/02/23/discontinued-support-of-jruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.1.8 Update Release</title>
		<link>http://blog.xceptance.com/2012/02/18/xlt-4-1-8-update-release/</link>
		<comments>http://blog.xceptance.com/2012/02/18/xlt-4-1-8-update-release/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 23:15:32 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=722</guid>
		<description><![CDATA[XLT 4.1.8 has been released. It contains a couple of improvements and bug fixes. You can get the latest version here: https://lab.xceptance.de/releases/xlt/4.1.8/. These are the two most important changes. Optimized scanning CSS rules XLT simulates the download behavior of a browser as close as possible. With com.xceptance.xlt.css.download.images set to onDemand, XLT carefully considers the download [...]]]></description>
			<content:encoded><![CDATA[<p>XLT 4.1.8 has been released. It contains a couple of improvements and bug fixes. You can get the latest version here: <a href="https://lab.xceptance.de/releases/xlt/4.1.8/">https://lab.xceptance.de/releases/xlt/4.1.8/</a>.</p>
<p>These are the two most important changes.</p>
<h3 id="OptimizedscanningCSSruleswhendownloadingimageresources1458">Optimized scanning CSS rules</h3>
<p>XLT simulates the download behavior of a browser as close as possible. With <code>com.xceptance.xlt.css.download.images</code> set to <code>onDemand</code>,  XLT carefully considers the download of image resources referred to in  CSS files. It checks all CSS rules if they apply to all elements in the  DOM tree and, if so, extracts the resource information for later  download. This process was previously very expensive and ran for up to  several seconds when a page was complex and a lot of CSS rules had to be  matched. This has been optimized heavily.</p>
<h3>Configurable retry behavior for keep-alive connections</h3>
<p>If persistent connections (keep-alive) are enabled, test cases might failed sporadically with an exception such as:<br />
<code>java.lang.RuntimeException: org.apache.http.NoHttpResponseException: The target server failed to respond</code></p>
<p>This  exception occurs only when the request was sent while the connection  was about to be closed on the server side at the same time.</p>
<p>The underlying <em>HttpClient</em> retries requests if the connection was closed by the server. However,  by default it retries only idempotent operations such as GET and HEAD,  but not POST and PUT. In order to avoid these connection errors, the  user can now configure whether non-idempotent operations are to be  retried as well. Common browsers seem to use the same behavior and most  certainly assume that the server did not start to process the request  when it closes the connection immediately without responding with a  proper HTTP status code.</p>
<p>A new boolean property <code>com.xceptance.xlt.http.retry.nonIdempotentRequests</code> in <code>config/default.properties</code> controls whether or not operations such as PUT and POST are retried in  case of certain networking problems. Note that idempotent operations are  always retried.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/02/18/xlt-4-1-8-update-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Availability of XLT 4.1.7</title>
		<link>http://blog.xceptance.com/2012/01/21/availability-of-xlt-4-1-7/</link>
		<comments>http://blog.xceptance.com/2012/01/21/availability-of-xlt-4-1-7/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 11:29:54 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=718</guid>
		<description><![CDATA[Xceptance is announcing the availability of Xceptance LoadTest (XLT) version 4.1.7. This is an update release and includes smaller improvements and defect fixes. The update is recommended for everyone. Improvements Script Developer: Breakpoints can be set at a module call now. They have been moved to the first command of the module before. Runtime Engine: [...]]]></description>
			<content:encoded><![CDATA[<p>Xceptance is announcing the availability of Xceptance LoadTest (XLT)  version 4.1.7. This is an update release and includes smaller  improvements and defect fixes. The update is recommended for everyone.</p>
<h3>Improvements</h3>
<ul>
<li> Script Developer: Breakpoints can be set at a module call now. They have been moved to the first command of the module before.</li>
<li> Runtime Engine: WebDriver has been updated to version 2.16.1.</li>
<li> Script Developer: Now it supports new HTML 5 input elements, such as email and date, during record and playback.</li>
</ul>
<h3>Fixes</h3>
<ul>
<li> Runtime Engine: When running multiple test cases at once from <em>Eclipse</em> or with <em>Ant</em>,  the values measured for each test case were always stored in the  timers.csv file of the first test case. This was a development mode  issue only.</li>
<li> Master controller: Agent controller urls are now checked to ensure that they are unique.</li>
<li> Script Developer: The base url text box was not correctly updated when the url was changed via the Edit Dialog before.</li>
<li> Script Developer: WaitFor commands included a small pause before  checking the condition even though the condition was already fulfilled.  This pause has been removed.</li>
<li> Script Developer: Using a mouse wheel for scrolling now works in Firefox 9.</li>
<li> Runtime Engine: When getting the value of an option element, the <em>HtmlUnitDriver</em> does not fall back to the option’s text content in case the option does  not specify a value attribute. This behavior is mandatory according to  the HTML specification. Fixed in the <em>XltDriver</em> until a fix is provided by the underlying project.</li>
<li> Runtime Engine: For input elements of type <em>hidden</em>, HtmlUnit’s API method <em>isDisplayed()</em> returned <em>true</em> although hidden inputs are never visible to the user.</li>
</ul>
<p>All details and the full download can be found here: <a href="https://lab.xceptance.de/releases/xlt/4.1.7/">https://lab.xceptance.de/releases/xlt/4.1.7/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2012/01/21/availability-of-xlt-4-1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.1.6 is available</title>
		<link>http://blog.xceptance.com/2011/12/10/xlt-4-1-6-is-available/</link>
		<comments>http://blog.xceptance.com/2011/12/10/xlt-4-1-6-is-available/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 18:00:30 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[XLT]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=715</guid>
		<description><![CDATA[We just released Xceptance LoadTest version 4.1.6. This upgrade release delivers small bugfixes and support for Firefox 9. Additionally you can specify an individual temporary download and upload directory for master and agents now. For the first time, you  also get an XLT-AMI for the new US-West Oregon data center of Amazon. All details and [...]]]></description>
			<content:encoded><![CDATA[<p>We just released Xceptance LoadTest version 4.1.6. This upgrade release delivers small bugfixes and support for Firefox 9. Additionally you can specify an individual temporary download and upload directory for master and agents now. For the first time, you  also get an XLT-AMI for the new US-West Oregon data center of Amazon.</p>
<p>All details and the full download can be found here: <a href="https://lab.xceptance.de/releases/xlt/4.1.6/">https://lab.xceptance.de/releases/xlt/4.1.6/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/12/10/xlt-4-1-6-is-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Read that: Web Application Security Guidelines</title>
		<link>http://blog.xceptance.com/2011/12/07/read-that-web-application-security-guidelines/</link>
		<comments>http://blog.xceptance.com/2011/12/07/read-that-web-application-security-guidelines/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 11:44:53 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[owasp]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=712</guid>
		<description><![CDATA[This is a nice summary of web application security related technologies, processes, and development patterns: Design Guidelines for Secure Web Applications. A little .NET heavy, but most stuff is generally applicable. If you read and like the above information, you should not miss the OWASP web security guidelines. This is a must read for every [...]]]></description>
			<content:encoded><![CDATA[<p>This is a nice summary of web application security related technologies, processes, and development patterns: <a href="http://msdn.microsoft.com/en-us/library/ff648647.aspx">Design Guidelines for Secure Web Applications</a>. A little .NET heavy, but most stuff is generally applicable.</p>
<p>If you read and like the above information, you should not miss the OWASP web security guidelines. This is a must read for every tester and developer. <a href="https://www.owasp.org/index.php/Category:OWASP_Guide_Project">OWASP Guide Project</a>:</p>
<blockquote><p>Web application security is an essential component of any successful project, whether open source PHP applications, web services such as straight through processing, or proprietary business web sites. Hosters (rightly) shun insecure code, and users shun insecure services that lead to fraud. The aim of this Development Guide is to allow businesses, developers, designers and solution architects to produce secure web applications. If done from the earliest stages, secure applications cost about the same to develop as insecure applications, but are far more cost effective in the long run.</p>
<p>Unlike other forms of security (such as firewalls and secure lockdowns), web applications have the ability to make a skilled attacker rich, or make the life of a victim a complete misery. At this highest level of the OSI software map, traditional firewalls and other controls simply do not help. The application itself must be self-defending. The Development Guide can help you get there. The Development Guide has been written to cover all forms of web application security issues, from old hoary chestnuts such as SQL Injection, through modern concerns such as AJAX, phishing, credit card handling, session fixation, cross-site request forgeries, compliance, and privacy issues&#8230;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/12/07/read-that-web-application-security-guidelines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Arabic Web Pages with XLT</title>
		<link>http://blog.xceptance.com/2011/09/28/testing-arabic-web-pages-with-xlt/</link>
		<comments>http://blog.xceptance.com/2011/09/28/testing-arabic-web-pages-with-xlt/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 08:53:19 +0000</pubDate>
		<dc:creator>Ola</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[arabic]]></category>
		<category><![CDATA[non-latin]]></category>
		<category><![CDATA[right-left]]></category>
		<category><![CDATA[right-to-left]]></category>
		<category><![CDATA[RTL]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=660</guid>
		<description><![CDATA[As you may know, there aren’t only Western character encoded websites on the web. There are also websites in Chinese, Japanese, Arabic, etc., and we wanted to know how XLT would perform if we use it for testing a non-Latin website. Non-Latin does not necessarily mean non-UTF-8, but in this case it especially means non-Western [...]]]></description>
			<content:encoded><![CDATA[<p>As you may know, there aren’t only Western character encoded websites on the web. There are also websites in Chinese, Japanese, Arabic, etc., and we wanted to know how XLT would perform if we use it for testing a non-Latin website. Non-Latin does not necessarily mean non-UTF-8, but in this case it especially means non-Western characters and right-to-left (RTL). Or in other words, things a normal European or American programmer is not used to.</p>
<p>So, for the first time we tested a non-Latin website, precisely an Arabic one. We created a test case with the Script Developer to test an Arabic news website. The test entered Arabic words in a search field and validated the response to check the correctness of the website’s content. Afterwards, we ran the script as a JUnit Test in Eclipse. It was successful. The test was short, but provisionally it proved that XLT  also works for non-Latin websites.</p>
<p>Furthermore, we ran the same test in a real browser and it worked as well. We used the FirefoxDriver to simulate user-like actions in Firefox to see if the WebDriver also works with non-Latin input.</p>
<p>When we continued testing, we observed some facts that may interest people who don’t often use Arabic as an input language. As you might know, Arabic is written from right to left. We noticed that there’s a difference between what appears and what actually happens technically. The following example illustrates that.</p>
<h3>Placement of the Asterisk</h3>
<p>We inserted a text assertion command in the test case. It was an ends-with validation, i.e. the asterisk should be at the first position if the input language is Latin. So, theoretically, if the input language is Arabic, then the asterisk should be at the first position of the Arabic text (the far right), but that wasn&#8217;t the case. The asterisk was at the first position from the Latin point of view (the far left).</p>
<p>Then, we tried inserting the asterisk at the first position of the Arabic text (the far right), but as you can see in the figure below the evaluation failed because the asterisk&#8217;s encoding is Latin-1, and accordingly the first position is then the far left according to the computer. So, we tried to insert the asterisk in Arabic (as input language), but the evaluation failed, as well.</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2011/09/invalidAssertion1.png"><img class="size-medium wp-image-671 aligncenter" src="/wp-content/uploads/2011/09/invalidAssertion1-300x166.png" alt="Failed validation due to incorrect placement of asterisk" width="300" height="166" /></a></p>
<p>The next picture shows how it should be.</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2011/09/validAssertion.png"><img class="size-medium wp-image-672 aligncenter" src="/wp-content/uploads/2011/09/validAssertion-300x165.png" alt="Correct placement of the asterisk" width="300" height="165" /></a></p>
<p>It was really hard trying to switch our way of thinking to the &#8220;right way&#8221;.  We spent so much time trying to figure out how to insert the asterisks in the test cases and trying to understand the Arabic point of view.</p>
<h3>Not all Asterisks are the same</h3>
<p>So, in this case the asterisk must be inserted in Latin. Firstly, the asterisk will be inserted at the last position of  the Arabic text and secondly, it has another code. As it turns  out, the Arabic asterisk does not have the same code as the Latin  asterisk. The Latin asterisk&#8217;s code in Unicode code points is U+002A and  the Arabic one&#8217;s is U+066D, and it even has another name. It is called &#8220;Arabic Five Pointed Star&#8221; and it actually looks differently. You might be wondering why that is. We asked ourselves the same thing, and we couldn’t find any plausible answer.  Of course, there are different characters in Arabic such as the comma (Arabic comma: &#8220;،&#8221;), but the asterisk is pretty much an asterisk everywhere and we wondered why it is a different character code.</p>
<p>In the following example we wrote a very simple website as an example  to check if the position of the asterisks is always on the wrong side  (seen from the Arabic point of view).</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2011/09/CodeHTML.png"><img class="aligncenter" src="/wp-content/uploads/2011/09/CodeHTML-300x96.png" alt="Code Example in HTML" width="300" height="96" /></a></p>
<p>At  the beginning it is important to set the &#8220;charset&#8221; to Unicode or you’ll  just get question marks as output. As you can see, we set in the head  tag the direction of the text alignment to &#8220;rtl&#8221;- this means &#8220;from right  to left&#8221;- so that the output on the website would appear from right to  left. This also applies to the input field in line 13. As you may  notice, there’s an exclamation mark added in Latin that’s why it’s shown  at the beginning of the Arabic word because it’s technically the last  position in Latin. The following picture shows how it appears in the  browser.</p>
<p style="text-align: center;"><img class="aligncenter" src="/wp-content/uploads/2011/09/PagePreview.png" alt="Page Preview" width="180" height="84" /></p>
<p>We  decided to write the text in different HTML elements (here: div and  span elements) to see if it makes a difference or not if the tested text  is over multiple elements. As it turned out, it has no affect if the  text is over multiple elements or not and it will be output in the right  order, but the problem that the position of the asterisk is wrong to  the eyes of an Arab still remains, which may cause great confusion.</p>
<h3>Parameters in Western encoding preferred</h3>
<p>There’s also a small disadvantage for Arabic developers. Parameter names cannot be put in Arabic. Because our tool only accepts characters &#8220;A&#8221;-&#8221;Z&#8221;, &#8220;a&#8221;-&#8221;z&#8221;, &#8220;0&#8243;-&#8221;9&#8243; and &#8220;_&#8221; for parameter names. That goes for test case names, as well. If you export your test cases with the Script Developer and you change the parameter names to Arabic in Eclipse, your test will fail unless you change the parameters in the data files as well, and then it will work just fine. The Script Developer will also show the modified Arabic parameter names and it will replay without any trouble. But if you check the parameter names in the Script Developer, you’ll notice that the name field is empty.</p>
<h3><strong>Programming in Arabic</strong></h3>
<p>Unfortunately, Arabic isn’t really supported in Eclipse on Windows, even if you run Eclipse in an Arabic version because it’s just a translated version of the platform and the operating system’s encoding is set to ISO Latin-1, i.e. any output in the console that is non-Latin will only be displayed as question marks. But in Linux it works because it supports UTF-8.</p>
<p>We were surprised that the Arabic version could align the Arabic text to the (far) right where it actually should begin, which is not supported by the Latin version of Eclipse. So, if you’re planning on developing a non-Latin website in Eclipse and you stumble upon a version of Eclipse in your language and decide to give it a try don’t get your hopes up because these versions are just translated, and might even be incomplete.</p>
<p>To sum up, we expanded our horizon by proving that our tool could also do test automation problem-free on non-Latin websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/09/28/testing-arabic-web-pages-with-xlt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review Of Cross-Browser Testing Tools</title>
		<link>http://blog.xceptance.com/2011/08/07/review-of-cross-browser-testing-tools/</link>
		<comments>http://blog.xceptance.com/2011/08/07/review-of-cross-browser-testing-tools/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 15:37:54 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>

		<guid isPermaLink="false">http://blog.xceptance.com/?p=651</guid>
		<description><![CDATA[Smashing Magazine lists a couple of free and commercial tools to cover cross-browser testing: Good news: very powerful free testing tools are available for Web designers today. Some are more user-friendly than others, and some have significantly better user interfaces. Don’t expect much (if any) support with these tools. But if you’d rather not spend [...]]]></description>
			<content:encoded><![CDATA[<p>Smashing Magazine lists a couple of free and commercial tools to cover cross-browser testing:</p>
<blockquote><p>Good news: very powerful free testing tools are available for Web  designers today. Some are more user-friendly than others, and some have  significantly better user interfaces. Don’t expect much (if any) support  with these tools. But if you’d rather not spend extra money on testing,  some great options are here as well.</p></blockquote>
<p><a href="http://www.smashingmagazine.com/2011/08/07/a-dozen-cross-browser-testing-tools/">Read the full article&#8230;</a></p>
<p>By the way, our own tool Xceptance LoadTest (XLT) offers a way to run cross-browser functional tests. XLT leverages WebDriver, a multi-browser API for automation. WebDriver does not support all browser and does not equally support all browser well, but we tried to iron out as much as possible. On top of it, you can use the XLT Script Developer to easily create automation scripts and run them either using our own scripting language or export them to Java to directly run them on the WebDriver-API.</p>
<p>You can download Xceptance LoadTest for free with no strings attached from our web site: <a href="http://www.xceptance-loadtest.com/">www.xceptance-loadtest.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/08/07/review-of-cross-browser-testing-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 5.0 support</title>
		<link>http://blog.xceptance.com/2011/07/07/firefox-5-0-support/</link>
		<comments>http://blog.xceptance.com/2011/07/07/firefox-5-0-support/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 16:58:37 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[XLT]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=643</guid>
		<description><![CDATA[If you are looking for Firefox 5.0 support when using XLT script developer, you will get it with version 4.1 of XLT. This version is available here.]]></description>
			<content:encoded><![CDATA[<p>If you are looking for Firefox 5.0 support when using XLT script developer, you will get it with version 4.1 of XLT. This version is available <a href="https://lab.xceptance.de/releases/xlt/4.1.0/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/07/07/firefox-5-0-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get the right load mix out of a few numbers</title>
		<link>http://blog.xceptance.com/2011/06/07/get-the-right-load-mix-out-of-a-few-numbers/</link>
		<comments>http://blog.xceptance.com/2011/06/07/get-the-right-load-mix-out-of-a-few-numbers/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 11:49:33 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[concurrent users]]></category>
		<category><![CDATA[load test]]></category>
		<category><![CDATA[performance test]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[user mix]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=639</guid>
		<description><![CDATA[When testing ecommerce applications on SaaS environments, you often do not get enough numbers from clients because they simply do not know these numbers or only a few. One reason for that is, that the client simply have not had any only presence before. Often the client also does not have detailed numbers, because the [...]]]></description>
			<content:encoded><![CDATA[<p>When testing ecommerce applications on SaaS environments, you often do not get enough numbers from clients because they simply do not know these numbers or only a few. One reason for that is, that the client simply have not had any only presence before. Often the client also does not have detailed numbers, because the previous hoster or the IT department just holds them back or simply cannot get to these numbers.</p>
<p>So what to do, when you do not know every detail about the current or future load pattern? We are describing one approach below that was very successful so far and always yielded satisfying results.</p>
<h3><strong>What we need</strong></h3>
<ul>
<li>Visits per peak hour (example 10k)</li>
<li>Page views per peak hour (example 100k)</li>
<li>Orders per peak hour (example 200 orders)</li>
<li>Optionally we can use the conversion rate to get from visits to orders or vice versa.</li>
<li>Optionally we can take searches, &#8220;add to cart&#8221; operations, user registrations, and so on into account.</li>
</ul>
<p>The mentioned scenarios are typical ecommerce scenarios and look like that. We will not talk about smaller scenarios such as address editing for a registered user.</p>
<ul>
<li>TSingleClickVisit: Enters the store only, does not move beyond the start page</li>
<li>TBrowsing: TVisitor plus category and product browsing</li>
<li>TSearch: TVisitor plus keyword search plus browsing of the result</li>
<li>TAdd2Cart: TBrowsing plus add to cart operations</li>
<li>TGuestCheckout: TAdd2Cart plus checkout without an order placement (anonymous user)</li>
<li>TGuestOrder: TAdd2Cart plus full checkout (anonymous user)</li>
<li>TRegisteredCheckout: TAdd2Cart plus checkout without an order placement (registered customer)</li>
<li>TRegisteredOrder: TAdd2Cart plus full checkout (registered customer)</li>
<li>TRegistration: Account creation</li>
</ul>
<h3>What we assume</h3>
<p>Ecommerce sites follow similar patterns and with a few       exceptions, such as special promotions, certain behavioral       patterns are nearly identical. So for instance, about 50% of all       checkouts are stopped before the order is placed. About 20 to 50%       of all created carts aren&#8217;t checked out at all.</p>
<h3>What we calculate</h3>
<p>Based on these assumptions, we put together a fairly simple but       sufficiently accurate load mix. Of course, we can also analyze the       current log files and try to come up with something more precise,       but that will be a snapshot only. Traffic is very volatile and so       we should be very generous when setting up this mix.</p>
<p>Since we do not take any daily averages as base but the peaks,       we will have a pretty comfortable buffer for our daily ecommerce       life anyway.</p>
<h4><strong>Bottom-Up</strong></h4>
<p>Let&#8217;s say, 200 orders are set as goal. Splitting them 50/50  between registered and anonymous users, we get 100 visits of each       type. All numbers are per hour of course.</p>
<ul>
<li> <em>TGuestOrder = 100</em></li>
<li><em> TRegisteredOrder = 100</em></li>
</ul>
<p>As a next step, we take our 50% checkout abandonment rate into       account. We have 200 checkouts per hour that are stopped and       200 that run through and turn up as orders (as counted       previously). So we need to add 200 visits. And because these       visitors can either run with their preset account or without, we       split them up in 100 guest and 100 registered checkout       attempts.</p>
<ul>
<li><em>TGuestCheckout = 100</em></li>
<li><em>TRegisteredCheckout = 100<br />
</em></li>
<li><em> </em>TGuestOrder = 100</li>
<li> TRegisteredOrder = 100</li>
</ul>
<p>This gives us 400 visits per hour that go into the checkout. We       now assume a low cart to checkout conversion rate, about 20% for       instance, and so we take 400 checkout visits * 5 and get 2,000       visits that involve cart usage. Since we already have 20%       converted into checkouts, we have 2,000 minus 400 visits that use the cart.</p>
<ul>
<li><em>TAdd2Cart = 1,600</em></li>
<li>TGuestCheckout = 100</li>
<li>TRegisteredCheckout = 100</li>
<li> TGuestOrder = 100</li>
<li> TRegisteredOrder = 100</li>
</ul>
<p>We also know that many users do not continue after hitting the       home page or any landing page. Let&#8217;s add some of these users now.</p>
<ul>
<li><em>TSingleClickVisitor = 1,000</em></li>
<li>TAdd2Cart = 1,600</li>
<li>TGuestCheckout = 100</li>
<li>TRegisteredCheckout = 100</li>
<li> TGuestOrder = 100</li>
<li> TRegisteredOrder = 100</li>
</ul>
<p>But wait, what are we missing? Well, we have not registered any new     accounts yet. Didn&#8217;t we? We did, because the registered checkout     creates accounts if required and reuses them several times. But to     get a more substantial customer growth, we simply add 200 visits     that run registrations:</p>
<ul>
<li><em>TRegistration = 200</em></li>
<li>TSingleClickVisitor = 1,000</li>
<li>TAdd2Cart = 1,600</li>
<li>TGuestCheckout = 100</li>
<li>TRegisteredCheckout = 100</li>
<li> TGuestOrder = 100</li>
<li> TRegisteredOrder = 100</li>
</ul>
<p>What is left to do? Well, we do not have any &#8220;I am just looking       around&#8221;-visitors yet. We know that our total visit count is 10,000       and we already assigned 3,200 of these to cart, checkout, and       registration, so we have 6,800 visits left we can now use for       something else. Depending on the shop type (large store, small       store etc), people tend to use search more or less. To put enough       stress on search and refinements, we simply assume 50% of all       people like to search. Thus the missing 6,800 visits will be 3,400       catalog browser visits and 3,400 visits with usage of search       before browsing the search result.</p>
<p>The total mix is:</p>
<ul>
<li>TBrowsing = 3,400</li>
<li>TSearch = 3,400</li>
<li>TRegistration = 200</li>
<li>TSingleClickVisitor = 1000</li>
<li>TAdd2Cart = 1,600</li>
<li>TGuestCheckout = 100</li>
<li>TRegisteredCheckout = 100</li>
<li> TGuestOrder = 100</li>
<li> TRegisteredOrder = 100</li>
</ul>
<p>Wait&#8230; where are my concurrent users? This is simple: &#8220;concurrent       users&#8221; is an inaccurate way of describing traffic, so we have not       used that number yet. Why is that?</p>
<p>To get to the bottom of that, we simply check how long a visit       takes. Depending on the shop, an average visit might take 2 to 4       minutes. Successfully shopping might take 15 minutes. If we expect       about 10 page views per visit and a page view takes 1 second to       load and 20 seconds to read it (already a really really high       number for an average), a visit would take 10 * 1 second + 9 * 20       seconds = 190 seconds.</p>
<p>Let&#8217;s go with the 190 seconds for a visit on average. If we just       could serve one visitor at a time, we could serve 60 minutes (3600       seconds) / 190 seconds per visits = 19 visitors per hour. But       because we would like to serve 10,000 per hour, we have to deal       with 10,000 / 19 = 526 visitors at the same time. This is the       famous concurrent user number.</p>
<p>If we now double the think time, we have 1,052 concurrent       users/visitors. If we cut it down to 1 second think time, we will       get a visit length of 19 seconds and therefore 10,000 visits /       (3600 seconds / 19) = 53 concurrent visitors.</p>
<p>So we already have three different &#8220;concurrent user&#8221; numbers and are still simulating the same traffic. This shows that the number of       concurrent users is a pretty questionable way of describing       traffic.</p>
<p>It does not matter which number we take, because most of the time       the servers will see the same traffic. Because we run against a       SaaS environment that serves a multiple of other customers at the       same time and is sized to serve the peak traffic for all customers       at the same time, we have plenty of comfortable room around us.       This permits us to run with 53 concurrent visitors for most of the       testing. This will save us client hardware resources for the load       generation. e.g. saves us money. We are basically only       interested in the runtime of requests and not if the environment       can handle that, because it can.</p>
<p>The goal of this test is to demonstrate that the implementation on the       SaaS platform is efficient, not that the SaaS platform itself is fast       and stable, because this is guaranteed by design and contract.       Testing this would require way more traffic and generate huge       costs, because the environment would suddenly no longer be a       shared one but exclusively used for this testing purpose.</p>
<p>When finalizing the entire test and all tests turned out good, we are going to turn up the concurrent user       count to 530 users and compare the result with the previous       measurements. Just to satisfy the traditional test expectations.</p>
<h3>Does that work for you?</h3>
<p>Hope that gives you an idea how to come up with a nice user mix for testing without having too much data in the first place. Comments welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/06/07/get-the-right-load-mix-out-of-a-few-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.0.5 Amazon-EC2 AMIs available</title>
		<link>http://blog.xceptance.com/2011/05/14/xlt-4-0-5-amazon-ec2-amis-available-2/</link>
		<comments>http://blog.xceptance.com/2011/05/14/xlt-4-0-5-amazon-ec2-amis-available-2/#comments</comments>
		<pubDate>Sat, 14 May 2011 03:54:10 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AMI]]></category>
		<category><![CDATA[EC2]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=633</guid>
		<description><![CDATA[These are the AMI-IDs of the XLT 4.0.5 images for Amazon-EC2. EU-West: ami-772b1d03 US-East: ami-52649b3b US-West: ami-29bfec6c Images can be used free of charge. The EU image is brand new and features Ubuntu 11.04. It has also a smaller disk of only 8GB compared to 15GB before. This helps to make it eligible for a free [...]]]></description>
			<content:encoded><![CDATA[<p>These are the AMI-IDs of the XLT 4.0.5 images for Amazon-EC2.</p>
<ul>
<li>EU-West: ami-772b1d03</li>
<li>US-East: ami-52649b3b</li>
<li>US-West: ami-29bfec6c</li>
</ul>
<p>Images can be used free of charge. The EU image is brand new and features Ubuntu 11.04. It has also a smaller disk of only 8GB compared to 15GB before. This helps to make it eligible for a free tier micro instance. Of course this instance type is not recommended for load testing, but you can easily test deployment and remote execution of XLT before you move up to more expensive setups.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/05/14/xlt-4-0-5-amazon-ec2-amis-available-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spurious wakeup &#8211; the rare event</title>
		<link>http://blog.xceptance.com/2011/05/06/spurious-wakeup-the-rare-event/</link>
		<comments>http://blog.xceptance.com/2011/05/06/spurious-wakeup-the-rare-event/#comments</comments>
		<pubDate>Fri, 06 May 2011 00:12:08 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[threads]]></category>
		<category><![CDATA[wait]]></category>
		<category><![CDATA[wakeup]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=628</guid>
		<description><![CDATA[After hunting for quite some for a strange application behavior, I finally found the reason. The Problem The Java application was behaving strangely in 4 out of 10 runs. It did not process all data available and assumed that the data input already ended. The application features several producer-consumer patterns, where one thread offers preprocessed data [...]]]></description>
			<content:encoded><![CDATA[<p>After hunting for quite some for a strange application behavior, I finally found the reason.</p>
<h3>The Problem</h3>
<p>The Java application was behaving strangely in 4 out of 10 runs. It did not process all data available and assumed that the data input already ended. The application features several producer-consumer patterns, where one thread offers preprocessed data to the next one, passing it into a buffer where the next thread reads it from.</p>
<p>The consumer or producer fall into a wait state in case no data is available or the buffer is full. In case of a state change, the active threads notifies all waiting threads about the new data or the fact that all data is consumed.</p>
<p>On 2-core and 8-core machines, the application was running fine but when we moved it to 24-cores, it suddenly started to act in an unpredictable manner.</p>
<h3>The Cause</h3>
<p>After a lot of debugging I found out that threads wake up without having been notified by their partner thread. In this case the consumer was woken up despite the fact that data was unavailable aka the producer has not delivered and therefore not notified anyone. But the consumer was awake&#8230;</p>
<p>The debugging nightmare finally revealed a rare behavior of any POSIX based application. This is the quote from the JDK6 doc:</p>
<blockquote><p>A thread can also wake up without being notified, interrupted, or  timing out, a so-called <em>spurious wakeup</em>.  While this will rarely  occur in practice, applications must guard against it by testing for  the condition that should have caused the thread to be awakened, and  continuing to wait if the condition is not satisfied.  In other words,  waits should always occur in loops.</p></blockquote>
<h3>The Verdict</h3>
<p>So never trust your notification chains. Threads might wake up even though nobody directly notified it. Additionally you should never exclude the possibility that the move from a small box to a big box does not influence the application behavior. More cores mean more trouble.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/05/06/spurious-wakeup-the-rare-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.0.5 is out</title>
		<link>http://blog.xceptance.com/2011/05/05/xlt-4-0-5-is-out/</link>
		<comments>http://blog.xceptance.com/2011/05/05/xlt-4-0-5-is-out/#comments</comments>
		<pubDate>Thu, 05 May 2011 01:25:42 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[script developer]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=619</guid>
		<description><![CDATA[We just released Xceptance LoadTest 4.0.5. It is a minor update and recommended for everyone. But you might have special interests if you use the Script Developer heavily. Besides a few defect fixes, release 4.0.5 delivers four great improvements to speed up test case creation and maintenance with Script Developer and make your work more [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="/wp-content/uploads/2011/05/script-developer-evaluate-now.png"><img class="alignright size-medium wp-image-620" title="New Script Developer Evaluate Now" src="/wp-content/uploads/2011/05/script-developer-evaluate-now-300x185.png" alt="" width="300" height="185" /></a>We just released Xceptance LoadTest 4.0.5. It is a minor update and recommended for everyone. But you might have special interests if you use the Script Developer heavily.</p>
<p>Besides a few defect fixes, release 4.0.5 delivers four great improvements to speed up test case creation and maintenance with Script Developer and make your work more productive.</p>
<ul>
<li>The XLT Script Developer runs on Firefox 4 and 3 now.</li>
<li>Test variables are now resolved recursively, so you can use variables within resolved content.</li>
<li>There is no need to open modules anymore if you want to edit a line or two of it. Also enabling/disabling of module code can be done easily from the main test case. This saves time and aids script maintenance.</li>
<li>During script debugging and script execution, you can now evaluate assertions instantly to see whether or not your verification expression will match.</li>
</ul>
<p>The full set of <a href="https://lab.xceptance.de/releases/xlt/4.0.5/releasenotes.html">release notes</a> can be viewed directly <a href="https://lab.xceptance.de/releases/xlt/4.0.5/">in the release area</a>. You will also find documentation and the download link there. As usual, th</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/05/05/xlt-4-0-5-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nice reading: CSS3 vs. CSS</title>
		<link>http://blog.xceptance.com/2011/04/21/nice-reading-css3-vs-css/</link>
		<comments>http://blog.xceptance.com/2011/04/21/nice-reading-css3-vs-css/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 14:06:23 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=613</guid>
		<description><![CDATA[Nice article about the advantages of CSS3 in terms of coding as well as download speed: CSS3 vs. CSS: A Speed Benchmark. I believe in the power, speed and “update-ability” of CSS3. Not having to load background images as structural enhancements (such as PNGs for rounded corners and gradients) can save time in production (i.e. [...]]]></description>
			<content:encoded><![CDATA[<p>Nice article about the advantages of CSS3 in terms of coding as well as download speed: <a href="http://www.smashingmagazine.com/2011/04/21/css3-vs-css-a-speed-benchmark/">CSS3 vs. CSS: A Speed Benchmark</a>.</p>
<blockquote><p>I believe in the power, speed and “update-ability” of CSS3. Not having to load background images as structural enhancements (such as PNGs for rounded corners and gradients) can save time in production (i.e. billable hours) and loading (i.e. page speed). At our company, we’ve happily been using CSS3 on client websites for over a year now, and I find that implementing many of these properties right now is the most sensible way to build websites.</p>
<p>Until today, all of that was based on an assumption: that I can produce a pixel-perfect Web page with CSS3 quicker than I can with older image-based CSS methods, and that the CSS3 page will load faster, with a smaller overall file size and fewer HTTP requests. As a single use case experiment, I decided to design and code a Web page and add visual enhancements twice: once with CSS3, and a second time using background images sliced directly from the PSD. I timed myself each round that I added the enhancements, and when finished, I used Pingdom to measure the loading times.</p>
<p><a href="http://www.smashingmagazine.com/2011/04/21/css3-vs-css-a-speed-benchmark/">More&#8230;</a></p></blockquote>
<p>Enjoy reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/04/21/nice-reading-css3-vs-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How does Garbage Collection work?</title>
		<link>http://blog.xceptance.com/2011/04/11/how-does-garbage-collection-work/</link>
		<comments>http://blog.xceptance.com/2011/04/11/how-does-garbage-collection-work/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 11:46:37 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[garbage collection]]></category>
		<category><![CDATA[gc]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=611</guid>
		<description><![CDATA[Just found two nice blog entries by Chaotic Java which explain nicely how Java Garbage Collection works. Might be still too much if you have never dealt with the topic before, but good reading for the others. Parallel and concurrent garbage collectors How does garbage collection work? Enjoy reading.]]></description>
			<content:encoded><![CDATA[<p>Just found two nice blog entries by <em>Chaotic Java</em> which explain nicely how Java Garbage Collection works. Might be still too much if you have never dealt with the topic before, but good reading for the others.</p>
<ul>
<li><a title="Permanent Link to Parallel and concurrent garbage collectors" href="http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/">Parallel and concurrent garbage collectors</a></li>
<li><a title="Permanent Link to How does garbage collection work?" href="http://chaoticjava.com/posts/how-does-garbage-collection-work/">How does garbage collection work?</a></li>
</ul>
<p>Enjoy reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/04/11/how-does-garbage-collection-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Load Testing Web Applications &#8211; Do it on the DOM Level!</title>
		<link>http://blog.xceptance.com/2011/04/07/load-testing-web-applications-do-it-on-the-dom-level-2/</link>
		<comments>http://blog.xceptance.com/2011/04/07/load-testing-web-applications-do-it-on-the-dom-level-2/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 16:44:55 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[load test]]></category>
		<category><![CDATA[performance test]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=597</guid>
		<description><![CDATA[This article was first published in the June 2010 issue of the magazine Testing Experience. HTTP-level tools record HTTP requests on the HTTP protocol level. They usually provide functionality for basic parsing of HTTP responses and building of new HTTP requests. Such tools may also offer parsing and extraction of HTML forms for easier access [...]]]></description>
			<content:encoded><![CDATA[<p>This article was first published in the June 2010 issue of the magazine <a href="http://www.testingexperience.com/">Testing Experience</a>.</p>
<p>HTTP-level tools record HTTP requests on the HTTP protocol level. They usually provide functionality for basic parsing of HTTP responses and building of new HTTP requests. Such tools may also offer parsing and extraction of HTML forms for easier access to form parameters, automatic replacement of session IDs by placeholders, automatic cookie handling, functions to parse and construct URLs, automatic image URL detection and image loading, and so on. Extraction of data and validation are often done with the help of string operations and regular expressions, operating on plain HTTP response data. Even if HTTP-level tools address many load testing needs, writing load test scripts using them can be difficult.</p>
<h2>Challenges with HTTP-Level Scripting</h2>
<h3>Challenge 1: Continual Application Changes</h3>
<p>Many of you probably know this situation: A load test needs to be prepared and executed during the final stage of software development. There is a certain time pressure, because the go-live date of the application is in the near future. Unfortunately, there are still some ongoing changes in the application, because software development and web page design are not completed yet.</p>
<p>Your only chance is to start scripting soon, but you find yourself struggling to keep up with application changes and adjusting the scripts. Some typical cases are described below.</p>
<ul>
<li> The protocol changes for a subset of URLs, for example, from HTTP to HTTPS. This could happen because a server certificate becomes available and the registration and checkout process of a web shop, as well as the corresponding static image URLs, are switched to HTTPS.</li>
<li>The URL path changes due to renamed or added path components.</li>
<li>The URL query string changes by renaming, adding or removing URL parameters.</li>
<li>The host name changes for a subset of URLs. For example, additional host names may be introduced for a new group of servers that delivers static images or for the separation of content management URLs and application server URLs that deliver dynamically generated pages.</li>
<li>HTML form parameter names or values are changed or form parameters are added or removed.</li>
<li>Frames are introduced or the frame structure is changed.</li>
<li>JavaScript code is changed, which leads to new or different HTTP requests, to different AJAX calls, or to a new DOM (Document Object Model) structure.</li>
</ul>
<p>In most of these cases, HTTP-level load test scripts need to be adjusted. There is even a high risk that testers do not notice certain application changes, and although the scripts do not report any errors, they do not behave like the real application. This may have side effects that are hard to track down.</p>
<h3>Challenge 2: Dynamic Data</h3>
<p>Even if the application under test is stable and does not undergo further changes, there can be serious scripting challenges due to dynamic form data. This means that form field names and values can change with each request. One motivation to use such mechanisms is to prevent the web browser from recalling filled-in form values when the same form is loaded again. Instead of &#8220;creditcard_number&#8221;, for example, the form field might have a generated name like &#8220;cc_number_9827387189479843&#8243;, where the numeric part is changed every time the page is requested. Modern web applications also use dynamic form fields for protection against cross-site scripting attacks or to carry security-related tokens.</p>
<p>Another problem can be data that is dynamically changing, because it is maintained and updated as part of the daily business. If, for example, the application under test is an online store that uses search-engine-friendly URLs containing catalog and product names, these URLs can change quite often. Even worse, sometimes the URLs contain search-friendly catalog and product names, while embedded HTML form fields use internal IDs, so that there is no longer an obvious relation between them.</p>
<p>Session IDs in URLs or in form fields may also need special handling in HTTP-level scripts. The use of placeholders for session IDs is well supported by most load test tools. However, special script code might be needed, if the application not only passes these IDs in an unmodified form, but also uses client-side operations on them or inserts them into other form values.</p>
<p>To handle the above-mentioned cases, HTTP-level scripts need manually coded, and thus unfortunately also error-prone, logic.</p>
<h3>Challenge 3: Modeling Client-Side Activity</h3>
<p>In modern web applications, JavaScript is often used to assemble URLs, to process data, or to trigger requests. The resulting requests may also be recorded by HTTP-level tools, but if their URLs or form data change dynamically, the logic that builds them needs to be reproduced in the test scripts.</p>
<p>Besides this, it can be necessary to model periodic AJAX calls, for example to automatically refresh the content of a ticker that shows the latest news or stock quotes. For a realistic load simulation, this also needs to be simulated by the load test scripts.</p>
<h3>Challenge 4: Client-Side Web Browser Behavior</h3>
<p>For correct and realistic load simulations, the load test tool needs to implement further web browser features. Here are a few examples:</p>
<ul>
<li>Caching</li>
<li> CSS handling</li>
<li>HTTP redirect handling</li>
<li>Parallel and configurable image loading</li>
<li>Cookie handling</li>
</ul>
<p>Many of these features are supported by load test tools, even if the tools act on the HTTP level, but not necessarily all of them are supported adequately. If, for example, the simulated think time between requests of a certain test case is varied, a low-level test script might always load the cacheable content in the same way – either it was recorded with an empty cache and the requests are fired, or the requests were not recorded and will never be issued.</p>
<h2>DOM-Level Scripting</h2>
<p>What is the difference between HTTP-level scripting tools and DOM-level scripting tools? The basic distinction between the levels is the degree to which the client application is simulated during the load test. This also affects the following characteristics:</p>
<ul>
<li> Representation of data: DOM-level tools use a DOM tree instead of simple data structures.</li>
<li>Scripting API: The scripting API of DOM-level tools works on DOM elements instead of strings.</li>
<li>Amount and quality of recorded or hard-coded data: There is much less URL and form data stored with the scripts. Most of this data is handled dynamically.</li>
</ul>
<p>DOM-level tools add another layer of functionality on top. Besides the handling of HTTP, these tools also parse the contained HTML and CSS responses to build a DOM tree from this information, similar to a real web browser. The higher-level API enables the script creator to access elements in the DOM tree using XPath expressions, or to perform actions or validations on certain DOM elements. Some tools even incorporate a JavaScript engine that is able to execute JavaScript code during the load test.</p>
<h3>Advantages</h3>
<p>DOM-level scripting has a number of advantages:</p>
<ul>
<li> Load test scripts become much more stable against changes in the web application. Instead of storing hard-coded URLs or data, they operate dynamically on DOM elements like “the first URL below the element xyz” or “hit the button with id=xyz”. This is especially important as long as application development is still ongoing. As a consequence, you can start scripting earlier.</li>
<li>Scripting is easier and faster, in particular if advanced script functionality is desired.</li>
<li>Validation of result pages is also easier on the DOM level compared to low-level mechanisms like regular expressions. For example, checking a certain HTML structure or the content of an element, like “the third element in the list below the second H2” can be easily achieved by using an appropriate XPath to address the desired element.</li>
<li>Application changes like changed form parameter names normally do not break the scripts, if the form parameters are not touched by the script. But, if such a change does break the script because the script uses the parameter explicitly, the error is immediately visible since accessing the DOM tree element will fail. The same is true for almost all kinds of application changes described above. Results are more reliable, because there are fewer hidden differences between the scripts and the real application.</li>
<li>CSS is applied. Assume there is a CSS change such that a formerly visible UI element that can submit a URL becomes invisible now. A low-level script would not notice this change. It would still fire the old request and might also get a valid response from the server, in which case the mismatch between the script and the changed application could easily remain unnoticed. In contrast, a DOM-level script that tries to use this UI element would run into an error that is immediately visible to the tester.</li>
<li>If the tool supports it, JavaScript can be executed. This avoids complicated and error-prone re-modeling of JavaScript behavior in the test scripts. JavaScript support has become more and more important in recent years with the evolution of Web 2.0/AJAX applications.</li>
</ul>
<h3>Disadvantages</h3>
<p>There is one disadvantage of DOM-level scripting. The additional functionality needs more CPU and main memory, for instance to create and handle the DOM tree. Resource usage increases even more if JavaScript support is activated.</p>
<p>Detailed numbers vary considerably with the specific application and structure of the load test scripts. Therefore, the following numbers should be treated with caution. Table 1 shows a rough comparison, derived from different load testing projects for large-scale web applications. The simulated client think times between a received response and the next request were relatively short. Otherwise, significantly more users might have been simulated per CPU.</p>
<table>
<tbody>
<tr>
<th>Scripting Level</th>
<th>Virtual Users per CPU</th>
</tr>
<tr>
<td>HTTP Level</td>
<td>100..200</td>
</tr>
<tr>
<td>DOM Level</td>
<td>10..30</td>
</tr>
<tr>
<td>DOM Level + JavaScript execution</td>
<td>2..10</td>
</tr>
</tbody>
</table>
<p>If you evaluate these numbers, please keep in mind that machines are becoming ever more powerful and that there are many flexible and easy-to-use on-demand cloud computing services today, so that resource usage should not prevent DOM-level scripting.</p>
<h2>Conclusion</h2>
<p>Avoid hard-coded or recorded URLs, parameter names and parameter values as far as possible. Handle everything dynamically. This is what we have learned. One good solution to achieve this is to do your scripting on the DOM level, not on the HTTP level. If working on the DOM level and/or JavaScript execution are not possible for some reason, you always have to make compromises and accept a number of disadvantages.</p>
<p>We have created and executed web-application load tests for many years now, in a considerable number of different projects. Since 2005, we have mainly used our own tool, Xceptance LoadTest (XLT), which is capable of working on different levels and supports fine-grained control over options like JavaScript execution. In our experience, the advantages of working on the DOM level, in many cases even with JavaScript execution enabled, generally by far outweigh the disadvantages. Working on the DOM level makes scripting much easier and faster, the scripts handle many of the dynamically changing data automatically, and the scripts become much more stable against typical changes in the web application.</p>
<p><em>Ronny Vogel is technical manager and co-founder of Xceptance. His main areas of expertise are test management, functional testing and load testing of web applications in the field of e-commerce and telecommunications. He holds a Masters degree (Dipl.-Inf.) in computer science from the Chemnitz University of Technology and has 16 years of experience in the field of software testing. Xceptance is a provider of consulting services and tools in the area of software quality assurance, with headquarters in Jena, Germany and a branch office in Cambridge, Massachusetts, USA.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/04/07/load-testing-web-applications-do-it-on-the-dom-level-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our new company logo</title>
		<link>http://blog.xceptance.com/2011/03/18/our-new-company-logo/</link>
		<comments>http://blog.xceptance.com/2011/03/18/our-new-company-logo/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 14:48:48 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[xceptance]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=581</guid>
		<description><![CDATA[Today we updated our web site with the new logo of our company and product. We hope you like it. It is modern, unique, and resembles our company colors. The font is distinct and the X is pretty eye-catching, because it has been carefully designed and crafted to express the uniqueness of Xceptance and it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-582  alignleft" title="The new Xceptance Logo" src="/wp-content/uploads/2011/03/xceptance-title-stripe-logo_neu.png" alt="The new Xceptance Company Logo" width="265" height="50" />Today we updated our web site with the new logo of our company and product. We hope you like it.</p>
<p>It is modern, unique, and resembles our company colors. The font is distinct and the X is pretty eye-catching, because it has been carefully designed and crafted to express the uniqueness of Xceptance and it&#8217;s product and service offers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/03/18/our-new-company-logo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.0.4 is available</title>
		<link>http://blog.xceptance.com/2011/03/16/xlt-4-0-4-is-available/</link>
		<comments>http://blog.xceptance.com/2011/03/16/xlt-4-0-4-is-available/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 17:02:43 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=578</guid>
		<description><![CDATA[Today we released update 4 of XLT 4.0. You will find all the details about it at the usual place: https://lab.xceptance.de/releases/xlt/4.0.4/. Check out the release notes too. This release addresses minor script developer defects. As always, updates are free for all customers and all people using XLT despite the license.]]></description>
			<content:encoded><![CDATA[<p>Today we released update 4 of XLT 4.0. You will find all the details about it at the usual place: <a href="https://lab.xceptance.de/releases/xlt/4.0.4/">https://lab.xceptance.de/releases/xlt/4.0.4/</a>. Check out the <a href="https://lab.xceptance.de/releases/xlt/4.0.4/releasenotes.html">release notes</a> too. This release addresses minor script developer defects. </p>
<p>As always, updates are free for all customers and all people using XLT despite the license.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/03/16/xlt-4-0-4-is-available/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

