<?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 &#187; Testing</title>
	<atom:link href="http://blog.xceptance.com/category/testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xceptance.com</link>
	<description>Passionate Testing</description>
	<lastBuildDate>Sat, 21 Jan 2012 11:29:54 +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>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>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>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>XLT &#8211; Garbage Collector details visualized</title>
		<link>http://blog.xceptance.com/2011/02/17/xlt-garbage-collector-details-visualized/</link>
		<comments>http://blog.xceptance.com/2011/02/17/xlt-garbage-collector-details-visualized/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 04:00:29 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[gc]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=535</guid>
		<description><![CDATA[Today we want to give you a small preview of an upcoming XLT feature. Most of you probably know that XLT features agent statistics. These statistics help you to keep an eye on the health of the test execution engines (agents) to ensure that you do not influence the test results by providing insufficient hardware [...]]]></description>
			<content:encoded><![CDATA[<p>Today we want to give you a small preview of an upcoming XLT feature. Most of you probably know that XLT features agent statistics. These statistics help you to keep an eye on the health of the test execution engines (agents) to ensure that you do not influence the test results by providing insufficient hardware or by applying no or incorrect settings.</p>
<p>Most modern programming languages are virtual machine based and these machines have knobs you can turn to adjust their behavior according to your requirements. XLT runs on Java and so all the things you might have already learnt from tuning your Java-based servers apply to XLT as well. If you do not have experience in tuning your Java-based servers, you will learn a lot that can be applied to your servers and help you to increase performance.</p>
<p>So, let&#8217;s take a look at the upcoming XLT feature that provides you with more details about garbage collection (GC) without the need to use any external tool to monitor or analyze logs or JVMs runtime behavior.</p>
<div id="attachment_536" class="wp-caption aligncenter" style="width: 210px"><a rel="lightbox" href="/wp-content/uploads/2011/02/xlt-memory-and-gc-charts-good.png"><img class="size-thumbnail wp-image-536   " title="Example of XLT agent memory details - good example" src="/wp-content/uploads/2011/02/xlt-memory-and-gc-charts-good-200x200.png" alt="" width="200" height="200" /></a><p class="wp-caption-text">Perfect GC behavior</p></div>
<p>This is a chart displays nice memory statistics that indicate absolutely no problems with the garbage collection. As you can see the memory usage (first chart in the image) is alternating but never touching the upper limit. The second chart gives you the times when full garbage collection occurred, basically these are the bad events. Events that block the virtual machine from continuing to run. We should avoid these at any cost&#8230; nearly, because a full GC is costly. There was only one full GC right at the beginning at the test. This is a normal JVM behavior. So we seem to have done a pretty good job. No major collection of garbage. Sweat!</p>
<p>There are still the minor collections. Minor collections occur frequently and they reclaim small portions of memory with short living objects. The third charts shows us, that minor collection took about 10 to 30 ms, some spikes up to 70 ms. This is acceptable.</p>
<div class="wp-caption aligncenter" style="width: 210px"><a rel="lightbox" href="/wp-content/uploads/2011/02/xlt-memory-and-gc-charts-bad.png"><img title="Example of XLT memory example with bad data" src="/wp-content/uploads/2011/02/xlt-memory-and-gc-charts-bad-200x200.png" alt="" width="200" height="200" /></a><p class="wp-caption-text">GC with Issues</p></div>
<p>Ok, let&#8217;s have a bad example in comparison. It runs with almost default VM settings. This means just min and max heap were set (Xms256MB/Xmx512MB). You can see clearly that a lot of major collections were running for up to 800 ms each. Also the minor collections were longer.</p>
<p>Clearly, the new charts help you see and fix misbehavior quickly. &#8220;What about the settings?&#8221; you might ask now. Yes, this example is not very helpful without revealing the difference between both test runs. So, we will give you the settings of the good one. The bad run had only Xms and Xmx set, as mentioned before.</p>
<blockquote>
<pre>## Set minimum memory to use
-Xms512m

## Set maximum permitted memory
-Xmx512m

## Enable concurrent old GC to avoid sudden long pauses
-XX:+UseConcMarkSweepGC

## When to start GC for the tenured/old area of the memory.
## This has to be low enough to avoid that threads need
## memory and can not get any before the GC has finished.
## This will lower the wait time.
-XX:CMSInitiatingOccupancyFraction=70
</pre>
</blockquote>
<p>That&#8217;s really all. The use of the Concurrent-Mark-Sweep-Collector (CMS) is the most important setting. The CMS does not block the main VM worker threads, but collects the garbage concurrently. Because there might be situations were the CMS collector is not fast enough in cleaning up, this means the old space runs out of free memory, we give the CMS a hint with the last line. This line explicitly tells the CMS to start early with the clean up. In this case at a 70% fill level. The default is 96% and way too high.</p>
<p>One last thing. Setting Xms and Xmx to the same number helps the VM to relax because it will not try to get back to the minimal memory limit (Xms) and so it cleans less aggressively.</p>
<p>If you want to lean more about Java Garbage Collection, take a look at this Oracle documents: <a href="http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html">GC Tuning</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/02/17/xlt-garbage-collector-details-visualized/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QA Blog Collection</title>
		<link>http://blog.xceptance.com/2011/02/07/qa-blog-collection/</link>
		<comments>http://blog.xceptance.com/2011/02/07/qa-blog-collection/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 01:17:49 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[list]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=533</guid>
		<description><![CDATA[Steve collected a very nice list of QA and testing blogs. 100 + 4 different blogs to take a look at. Check it out: Top 100 Software Testing Blogs.]]></description>
			<content:encoded><![CDATA[<p>Steve collected a very nice list of QA and testing blogs. 100 + 4 different blogs to take a look at. Check it out: <a href="http://www.testingminded.com/2010/04/top-100-software-testing-blogs.html">Top 100 Software Testing Blogs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/02/07/qa-blog-collection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 4.0 Developer Screencasts</title>
		<link>http://blog.xceptance.com/2011/01/24/xlt-4-0-developer-screencasts/</link>
		<comments>http://blog.xceptance.com/2011/01/24/xlt-4-0-developer-screencasts/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 17:14:47 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[script developer]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[video tutorial]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=498</guid>
		<description><![CDATA[We just published four brand-new screencasts about XLT 4.0, its features, and how to work with them. This is our first attempt to use screencasts as a way of documenting our software. They do not replace the written documentation, of course, but they do provide a quick and easy way to become familiar with XLT. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xceptance-loadtest.com/screencasts/"><img class="alignleft size-full wp-image-523" title="XLT-Screencasts" src="/wp-content/uploads/2011/01/xlt-screencasts.jpg" alt="The XLT Screencast Page" width="300" height="205" /></a>We just published four brand-new <a href="http://www.xceptance-loadtest.com/screencasts/" title="Xceptance Load Test - XLT - Developer Screencasts">screencasts</a> about XLT 4.0, its features, and how to work with them. This is our first attempt to use screencasts as a way of documenting our software. They do not replace the written documentation, of course, but they do provide a quick and easy way to become familiar with XLT.</p>
<p>You might be especially interested in the new Script Developer. Our main feature of XLT 4.0.</p>
<p>The script developer is our approach to write and execute scripts efficiently within Firefox. It is a tool to quickly automate web application, share scripts without the hassle of complicated installations, while maintaining full control over possible other ways to execute scripts. The script developer lays the foundation to run test within the browser, execute scripts during builds, create and run test-driven tests, and, if required, export scripts into Java to unleash the power of a modern programming language.</p>
<p>Enjoy the screencasts and of course feedback is always welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/01/24/xlt-4-0-developer-screencasts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xceptance LoadTest 4.0 is available</title>
		<link>http://blog.xceptance.com/2011/01/13/xceptance-loadtest-4-0-is-available/</link>
		<comments>http://blog.xceptance.com/2011/01/13/xceptance-loadtest-4-0-is-available/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 17:17:56 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[load testing]]></category>
		<category><![CDATA[performance testing]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=506</guid>
		<description><![CDATA[We just released Xceptance LoadTest 4.0. This release of our load test software got some really nice feature enhancements to make your regression testing easier. So we stick to our general software approach: One tool for regression and load testing. One set of scripts for both purposes. Script Developer As an alternative to writing test [...]]]></description>
			<content:encoded><![CDATA[<p>We just released Xceptance LoadTest 4.0. This release of our load test software got some really nice feature enhancements to make your regression testing easier. So we stick to our general software approach: One tool for regression and load testing. One set of scripts for both purposes.</p>
<h3>Script Developer</h3>
<p><a rel="lightbox" href="/wp-content/uploads/2011/01/ScriptDev_MainWindow.png"><img class="alignleft size-medium wp-image-507" title="Script Developer Main Window" src="http://blog.xceptance.de/wp-content/uploads/2011/01/ScriptDev_MainWindow-300x125.png" alt="Script Developer" width="300" height="125" /></a>As an alternative to writing test cases in Java, you can now use the  XLT Script Developer to create script test cases. Script test cases are  based on a simple syntax and a reduced set of operations, which makes  them a perfect fit for non-programmers. Only the Script Developer,  which is an extension to Firefox, is necessary to create,  edit, and manage basic script test cases.</p>
<p>To create a new script test case, the test designer simply uses the  application under test. All interactions with the application are  recorded in the background and stored to an XML script file as a  sequence of script commands. While recording, assertion commands to  validate the web pages may be inserted manually. From the Script  Developer, script test cases can be replayed in Firefox at any time to  quickly check whether the test case still runs successfully.</p>
<p>Existing  script test cases can be modified later on, for example, to add new or  delete obsolete commands. Common command sequences, which could be  reused in other test cases as well, can be refactored to parameterizable  script modules. Finally, any recorded value can be extracted out of the  script into a test data file to separate test data from script code.</p>
<p>Script  files can also be run outside of the browser, via the XLT framework,  which simulates a head-less browser. This mode is suitable for  unattended test case execution, during functional or load tests. When  saving scripts, the Script Developer also creates JUnit test case  classes as “wrappers” around script test cases, which serve as a bridge  between the XLT framework and the script world. This way, from the  framework’s point of view, script test cases are in no way different  from test cases written in Java.</p>
<h3>More Data to Query</h3>
<p>For improved tests accuracy, you can now query the request and response data and run assertions on it. This permits checks on the communication because not all requests are reflected in the DOM tree.</p>
<h3>Improved EC2 Handling</h3>
<p>AWS (Amazon Web Services) added the ability to tag EC2 resources to  simplify the administration of your cloud infrastructure. As a form of  meta data, tags can be used to create user-friendly names and improve  coordination between multiple users. The XLT EC2 administration tool <code>ec2_admin</code> features an additional menu which lets you select your EC2 resources based on the tag name.</p>
<h3>Better Automation</h3>
<p>To improve automation of tests, we added the ability to pass properties on the mastercontroller command line. Additionally the test definition file for the test suite can be redefined on the command line as well.</p>
<h3>Faster Work Flow</h3>
<p>When test goes wrong or a logging is turn up, the data to download from all agents can be pretty big. To get a fast or selective result, you can now decide how much data you want to download.</p>
<h3>JDK Compatibility</h3>
<p>Beginning with v4.0, XLT requires a Java virtual machine 6 or above to  run. Java 5 is not supported any longer. The reason is the <a href="http://www.oracle.com/technetwork/java/javase/downloads/index-jdk5-jsp-142662.html">end-of-life announcement for JDK 5</a>.</p>
<h3><strong>Misc</strong></h3>
<p>We refreshed HtmlUnit and updated it to version 2.8, Ruby got updated to 1.5.1, and WebDriver is now v2.0a6. The event API got simplified and is now easier to use.</p>
<h3>Where to get it</h3>
<p><a href="http://www.xceptance.com/releases/xlt/latest/releasenotes.html">More information</a> about the release, the <a href="http://www.xceptance.com/releases/xlt/latest/quick-start-guide.html">quick start guide</a>, and the <a href="http://www.xceptance.com/releases/xlt/latest/user-manual.html">manual</a> can be found in the release area. Of course, the full download of <a href="https://lab.xceptance.de/releases/xlt/latest/">XLT 4.0 is available there too</a>. </p>
<p>We are looking forward to your feedback, comments, and of course&#8230; Happy testing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2011/01/13/xceptance-loadtest-4-0-is-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reasons for a Test Environment</title>
		<link>http://blog.xceptance.com/2010/09/23/reasons-for-a-test-environment/</link>
		<comments>http://blog.xceptance.com/2010/09/23/reasons-for-a-test-environment/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 21:39:54 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[live testing]]></category>
		<category><![CDATA[setup load testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=475</guid>
		<description><![CDATA[People asked for a rough guide for running load tests against their live site and whether this is a good idea at all. Well, let me first say that test environments exist for exactly that purpose. So if you already have something live, of course you used it before going live for load testing, and [...]]]></description>
			<content:encoded><![CDATA[<p>People asked for a rough guide for running load tests against their live site and whether this is a good idea at all.</p>
<p>Well, let me first say that test environments exist for exactly       that purpose. So if you already have something live, of course you used it before going live for load testing, and now you cannot run another test there&#8230; yes, you need a test environment. This is well spent money for several reasons:</p>
<ul>
<li>Created data will not pollute your installation aka log           entries, analytics data, orders in the database, created users, and           so on.</li>
<li>You do not have to take your live site down for testing.</li>
<li>Problems during testing will not leave your live site down or take it down.</li>
<li>Your hosting company or IT department might charge for all test traffic against the live site as           it would have been real traffic (revenue share, bandwidth utilization), so having           your own testing realm makes expenses more predictable.</li>
<li>You can easily change code and retest when changes are           necessary. You can profile, you can debug.</li>
<li>You do not risk problems with traffic going to live systems,           such as payment due to configuration or testing errors. If you already had items from test orders piling up in your office, you know what I mean.</li>
</ul>
<p>So, get yourself a test environment. Spend the money and enjoy the freedom to measure, debug, and tune.</p>
<p>P.S. Of course, there are situations, where you cannot replicate a live environment or you cannot find application problems in a test setup due to totally different timing behavior&#8230; Well, this indicates only that your live environment is already screwed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/09/23/reasons-for-a-test-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Test Automation Costs Too Much</title>
		<link>http://blog.xceptance.com/2010/07/20/why-test-automation-costs-too-much/</link>
		<comments>http://blog.xceptance.com/2010/07/20/why-test-automation-costs-too-much/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 15:27:55 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Quotations]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[teams]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=457</guid>
		<description><![CDATA[I got a pretty nice link today. Check out that short article about the usual obstacles when trying or applying test automation: Why Test Automation Costs Too Much. Elisabeth covers the aspects of disconnected teams and the often practiced sharp distinction between programmers and testers pretty well. Bottom line: the reason test automation costs so [...]]]></description>
			<content:encoded><![CDATA[<p>I got a pretty nice link today. Check out that short article about the usual obstacles when trying or applying test automation: <a href="http://testobsessed.com/2010/07/19/why-test-automation-costs-too-much/">Why Test Automation Costs Too Much</a>. Elisabeth covers the aspects of disconnected teams and the often practiced sharp distinction between programmers and testers pretty well.</p>
<blockquote><p>Bottom line: the reason test automation costs so much is that it’s done in a silo far removed from the development effort.</p>
<p>Buffered from the consequences of design decisions that decrease testability, the developers continue to create software that’s nigh onto impossible to automate.</p>
<p>And isolated from the technical expertise of how the software was constructed, the test automation specialists are in a situation where they cannot help but be both inefficient and ineffective.</p></blockquote>
<p>Enjoy reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/07/20/why-test-automation-costs-too-much/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/2010/06/08/load-testing-web-applications-do-it-on-the-dom-level/</link>
		<comments>http://blog.xceptance.com/2010/06/08/load-testing-web-applications-do-it-on-the-dom-level/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 09:59:47 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=451</guid>
		<description><![CDATA[We published the article &#8220;Load Testing Web Applications &#8211; Do it on the DOM Level!&#8221; in the 10th issue of the testing magazine &#8220;Testing Experience&#8220;. This issue is all about performance testing. The article discusses our experience in web load testing on HTTP level versus HTML/DOM level. There is a free PDF version of the [...]]]></description>
			<content:encoded><![CDATA[<p>We published the article &#8220;Load Testing Web Applications &#8211; Do it on the DOM Level!&#8221; in the 10th issue of the testing magazine &#8220;<a title="Testing Experience" href="http://www.testingexperience.com/" target="_blank">Testing Experience</a>&#8220;. This issue is all about performance testing. The article discusses our experience in web load testing on HTTP level versus HTML/DOM level.</p>
<p>There is a free PDF version of the magazine that requires an online registration, where your e-mail address and country are required fields.</p>
<p>Enjoy reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/06/08/load-testing-web-applications-do-it-on-the-dom-level/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XLT 3.3.1 &#8211; Neue Kommentarfunktion</title>
		<link>http://blog.xceptance.com/2010/02/07/xlt-3-3-1-neue-kommentarfunktion/</link>
		<comments>http://blog.xceptance.com/2010/02/07/xlt-3-3-1-neue-kommentarfunktion/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 12:01:57 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=401</guid>
		<description><![CDATA[Jeder Tester hat sich bestimmt schon über den Aufwand geärgert, den man treiben muss, damit Testkonfigurationen, -ergebnisse und Änderungen an der Zielplattform für die spätere Testauswertung zur Verfügung stehen. Vor allem viele Änderungen während der Fehlersuche können das Testleben recht schwer machen. Weiss man dann wirklich immer noch, wie viele Server in diesem Moment liefen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xceptance-loadtest.de/"><img src="/wp-content/uploads/2010/02/XLT_Logo_211x54.png" alt="XLT-Logo" title="XLT-Logo" width="211" height="54" class="alignleft size-full wp-image-402" /></a>Jeder Tester hat sich bestimmt schon über den Aufwand geärgert, den man treiben muss, damit Testkonfigurationen, -ergebnisse und Änderungen an der Zielplattform für die spätere Testauswertung zur Verfügung stehen. Vor allem viele Änderungen während der Fehlersuche können das Testleben recht schwer machen. Weiss man dann wirklich immer noch, wie viele Server in diesem Moment liefen oder ob man die Cacheeinstellungen für diesen Testlauf angepasst hatte?</p>
<p>XLT hat hier bisher schon immer einen guten Job gemacht, denn es archiviert automatisch die Konfiguration zusammen mit dem Testreport und erlaubt so, jederzeit den Test zu wiederholen oder die Einstellungen nachzuprüfen. Aber Kommentare und Notizen zum Testzweck waren bisher nicht Teil der Daten.</p>
<p>Mit XLT 3.3.1 haben wir das geändert und eine Kommentarfunktion integriert, um schnell Testgedanken erfassen zu können und zusammen mit dem Test zu archivieren und natürlich auch in den Testergebnissen darzustellen.</p>
<p>Ab sofort können Kommentare und Informationen zur aktuellen Testkonfiguration hinzugefügt werden. Das ist vor allem wichtig, wenn man im Team arbeitet. Zusätzlich kann jeder Testlauf kommentiert werden. XLT fragt, ob man einen Kommentar hinzufügen möchte und speichert diesen gemeinsam mit dem Testergebnis ab. Alle Kommentare werden dann in den Testreport gerendert. So hat man sofort Ergebnisse und <em>Notizen</em> gemeinsam verfügbar.</p>
<p>Damit man seine Gedanken und Anmerkungen auch strukturieren kann, erlaubt XLT an dieser Stelle HTML als Eingabe. Besonders nützlich sind die Tags für Absätze (p), Listen (ul, li) und Hervorhebungen (em, strong).</p>
<p>Mehr dazu in den <a href="https://lab.xceptance.de/releases/xlt/3.3.1/releasenotes.html#Commentingtestsandtestexecutions105">Release Notes von XLT 3.3.1</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/02/07/xlt-3-3-1-neue-kommentarfunktion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Darüber lachen Tester</title>
		<link>http://blog.xceptance.com/2010/02/01/daruber-lachen-tester/</link>
		<comments>http://blog.xceptance.com/2010/02/01/daruber-lachen-tester/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 21:45:16 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[witzig]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=389</guid>
		<description><![CDATA[Immer wieder interessant, aber auch lustig, auf welche Schlüsselwörter Google-Adwords-Anzeigen geschaltet sind. In diesem Fall sogar inhaltlich sehr lustig. Es gibt wirklich ein Videospiel, das Lode Runner heisst. Aber warum jemand die Anzeige auf das Schlüsselwort Loadrunner schaltet, bleibt mir ein Rätsel. Hier hat man wohl den Vorschlag der automatischen Suchwortoptimierung von Google einfach blind [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2010/02/loadrunner-testing.png"><img src="http://blog.xceptance.de/wp-content/uploads/2010/02/loadrunner-testing.png" alt="Google Adwords Anzeige" title="Google Adwords Anzeige" width="223" height="72" class="alignleft size-full wp-image-390" /></a>Immer wieder interessant, aber auch lustig, auf welche Schlüsselwörter Google-Adwords-Anzeigen geschaltet sind. In diesem Fall sogar inhaltlich sehr lustig.</p>
<p>Es gibt wirklich ein Videospiel, das <em>Lode Runner</em> heisst. Aber warum jemand die Anzeige auf das Schlüsselwort <em>Loadrunner</em> schaltet, bleibt mir ein Rätsel. Hier hat man wohl den Vorschlag der automatischen Suchwortoptimierung von Google einfach blind abgenickt. Amazon wird das verschwendete Budget verschmerzen können.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/02/01/daruber-lachen-tester/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alle Verzeichnisse im einem Verzeichnis einpacken</title>
		<link>http://blog.xceptance.com/2009/11/24/alle-verzeichnisse-im-einem-verzeichnis-einpacken/</link>
		<comments>http://blog.xceptance.com/2009/11/24/alle-verzeichnisse-im-einem-verzeichnis-einpacken/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 15:18:17 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=362</guid>
		<description><![CDATA[Wer auf seiner Serverplatte (Linux) mal aufräumen möchte, der könnte den folgenden Shell-Schnipsel nützlich finden. Es TARt und komprimiert alle Verzeichnisse im ggw. Verzeichnis und räumt danach das gerade frisch eingepackte Verzeichnis weg. So lässt sich Platz sparen. Zum Beispiel weil man viele Testergebnisse herumliegen hat. for i in `ls -d *` ; do tar [...]]]></description>
			<content:encoded><![CDATA[<p>Wer auf seiner Serverplatte (Linux) mal aufräumen möchte, der könnte den folgenden Shell-Schnipsel nützlich finden. Es TARt und komprimiert alle Verzeichnisse im ggw. Verzeichnis und räumt danach das gerade frisch eingepackte Verzeichnis weg. So lässt sich Platz sparen. Zum Beispiel weil man viele Testergebnisse herumliegen hat.</p>
<blockquote><p>for i in `ls -d *` ; do tar cfz $i.tar.gz $i ; rm -rf $i; done</p></blockquote>
<p>Getestet auf OpenSuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/11/24/alle-verzeichnisse-im-einem-verzeichnis-einpacken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Andere Blogs rund ums Testen</title>
		<link>http://blog.xceptance.com/2009/10/25/andere-blogs-rund-ums-testen/</link>
		<comments>http://blog.xceptance.com/2009/10/25/andere-blogs-rund-ums-testen/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 20:39:50 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[blogs]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=326</guid>
		<description><![CDATA[Natürlich gibt es noch andere Blogs, die sich mit Testen und Qualitätssicherung beschäftigen. Einige davon möchte ich heute mit einem kurzen Kommentar vorstellen: DevelopSense von Michael Bolton (nicht der Sänger). Für Michael ist der Fakt wichtig, dass ein Tester viel wertvoller ist, als jede Automation. Das Hirn eines Testers ist sein Werkzeug. Er nennt es [...]]]></description>
			<content:encoded><![CDATA[<p>Natürlich gibt es noch andere Blogs, die sich mit Testen und Qualitätssicherung beschäftigen. Einige davon möchte ich heute mit einem kurzen Kommentar vorstellen:</p>
<ul>
<li><a href="http://www.developsense.com/blog.html">DevelopSense</a> von Michael Bolton (nicht der Sänger). Für Michael ist der Fakt wichtig, dass ein Tester viel wertvoller ist, als jede Automation. Das Hirn eines Testers ist sein Werkzeug. Er nennt es auch: <a href="http://www.developsense.com/2009/08/testing-vs-checking.html">Checking is not testing.</a></li>
<li><a href="http://www.satisfice.com/blog/">James Bach</a> vertritt eine ähnliche Meinung und verurteilt die blinden Bestrebungen, alles unkontrolliert zu automatisieren. Sein Kernbotschaft dreht sich um <em>Exploratory Testing</em>. Das intuitive, aber nicht zufällige Testen.</li>
<li><a href="http://www.testthisblog.com/">Eric Jacobson</a> legt sich nicht auf Gebiete fest, sondern kommentiert alles Querbeet.</li>
<li>Nicht zu vergessen das <a href="http://googletesting.blogspot.com/">Google Testing Blog</a>. Hier berichten Google Tester aus ihrer täglichen Arbeit und den Herausforderungen von großer Software.</li>
</ul>
<p>Wer kennt weitere empfehlenswerte Blogs?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/10/25/andere-blogs-rund-ums-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was QA nicht machen soll</title>
		<link>http://blog.xceptance.com/2009/10/24/was-qa-nicht-machen-soll/</link>
		<comments>http://blog.xceptance.com/2009/10/24/was-qa-nicht-machen-soll/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 22:42:15 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Quotations]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[bach]]></category>
		<category><![CDATA[entscheidung]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=322</guid>
		<description><![CDATA[Es gibt immer große Missverständnisse über die Rolle von QA/Test. Einige Leute wollen, dass QA das Produkt explizit freigibt und notfalls es aufhält, wenn es schlecht ist. Andere meinen, dass es besser ist, wenn QA einfach nur eine Empfehlung ausspricht. Jon Bach hat heute auf der STPCon 2009 mit einem kurzen Satz schön zusammengefasst, welche [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt immer große Missverständnisse über die Rolle von QA/Test. Einige Leute wollen, dass QA das Produkt explizit freigibt und notfalls es aufhält, wenn es schlecht ist. Andere meinen, dass es besser ist, wenn QA einfach nur eine Empfehlung ausspricht.</p>
<p><a href="http://jonbox.wordpress.com/">Jon Bach</a> hat heute auf der STPCon 2009 mit einem kurzen Satz schön zusammengefasst, welche Aufgabe QA hat. Ich teile seine Ansicht voll.</p>
<blockquote><p>QA does not make quality. QA helps to make an informed decision about the quality.</p></blockquote>
<p>QA/Test stellt den Zustand der Software/Hardware fest und informiert darüber. QA wird sich auf keinen Fall die Aufgabe auf den Tisch ziehen, zu richten. Das soll bitteschön der Auftraggeber, Programmmanager oder Projektmanager machen. Er bekommt den Bonus, er darf entscheiden. QA hilft nur dabei und zwar so gut, dass er eigentlich nicht anders kann, als der QA-Empfehlung zu folgen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/10/24/was-qa-nicht-machen-soll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Gewöhnung an Abweichungen</title>
		<link>http://blog.xceptance.com/2009/10/23/die-gewoehnung-an-abweichungen/</link>
		<comments>http://blog.xceptance.com/2009/10/23/die-gewoehnung-an-abweichungen/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 01:40:03 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Things went wrong]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=318</guid>
		<description><![CDATA[Heute hatte ich das Vergnügen, den Space Shuttle Astronauten Mike Mullane auf der STPCon 2009 kennenzulernen. Die STPCon ist eine Testkonferenz und Mike wurde eingeladen, um aus Sicht eines Astronauten Motivation zum Thema Testen zu versprühen. Man kann sich ja durchaus vorstellen, dass die NASA eventuell Sachen vorher ausprobiert, damit es dann erfolgreich fliegt. Mike [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.de/Riding-Rockets-Outrageous-Shuttle-Astronaut/dp/0743276833/ref=pd_bxgy_eb_img_a"><img class="size-full wp-image-317 alignleft" title="Mike Mullane - Riding Rockets" src="/wp-content/uploads/2009/10/mike-mullane-riding-rockets.jpg" alt="Mike Mullane - Riding Rockets" width="104" height="160" /></a>Heute hatte ich das Vergnügen, den Space Shuttle Astronauten Mike Mullane auf der <a href="http://www.stpcon.com/">STPCon 2009</a> kennenzulernen. Die <a href="http://www.stpcon.com/">STPCon</a> ist eine Testkonferenz und Mike wurde eingeladen, um aus Sicht eines Astronauten Motivation zum Thema Testen zu versprühen. Man kann sich ja durchaus vorstellen, dass die NASA eventuell Sachen vorher ausprobiert, damit es dann erfolgreich fliegt.</p>
<p>Mike erzählte wunderbar, wie man als Astronaut lernen muss, die Toilette zu treffen, wie er zu NASA gekommen war, wie die Flugcomputer des Shuttles grob funktionieren usw. Aber der eigentliche Kern seiner Rede war <em>Normalization of Deviance</em> und es klang zunächst überhaupt nicht nach Testen.</p>
<p>Er erklärte uns verständlich, wie die <em>Normalisierung von Abweichungen</em> bzw. treffender die <em>Gewöhnung an Abweichungen</em> schlussendlich zu Katastrophen führt. Im Fall der NASA zu Unglücken, wie der Explosion des Challenger-Shuttles 1986.</p>
<p>Der Grund für das Unglück lag in einfachen Gummidichtungen (O-Ringe). Diese Ringe dichten die Feststoffraketen-Segmente ab. O-Ringe dürfen nicht porös werden und niemals mit Hitze in Kontakt kommen, denn das Innere der Rakete brennt aus und die Flamme darf nur nach unten und niemals zur Seite entweichen.</p>
<p>Der Hersteller entdeckte sehr zeitig, dass die Dichtungsringe mit Brandspuren von den Flügen zurückkehrten und alarmierte die NASA, da laut Vorschrift und Spezifikation niemals ein Ring mit Flammen in Kontakt kommen durfte. Da die NASA zu dieser Zeit unter extremen Druck stand, hat man das Problem verzögert, ignoriert und heruntergespielt. Immer mehr Flüge kamen mit immer mehr Schäden zurück, aber da bisher nichts passiert war, hielt man das Problem für hinnehmbar, obwohl die ursprüngliche Spezifikation und alle Warnungen des Herstellers andere Dinge erzählten.</p>
<p>Jeder Flug ohne offensichtliche Probleme, aber mit beschädigten Ringen, war quasi die Bestätigung der Abweichung. &#8220;Eigentlich haben wir doch kein Problem.&#8221; &#8220;Ist schon nicht so schlimm, ging doch bisher.&#8221; Am 28. Januar 1986 trat dann genau die Situation ein, die viele vorhergesagt hatten. Ein Techniker hatte sich nur um 73 Sekunden geirrt. Er hatte die Explosion am Boden erwartet.</p>
<p>Mit diesem drastischen Beispiel menschlicher Gewohnheit, hat er sehr schön einen unserer typischen Fehler vorgeführt, denn wir nehmen oft unter Druck Abkürzungen und gewöhnen uns dann daran, weil es ja gut ging. Jede erfolgreiche Abkürzung wird zur Bestätigung der Abkürzung, weil ja nichts passiert ist.</p>
<p>Für uns Tester heißt das übertragen, dass ein aus Zeitgründen ausgelassener Test wohl auch beim nächsten Mal ausgelassen wird bzw. man uns dazu &#8220;zwingt&#8221;, darauf zu verzichten, weil beim letzten Mal ja alles in Ordnung war.</p>
<p>Am Ende des Vortrages habe ich dann sein Buch <a href="http://www.amazon.de/Riding-Rockets-Outrageous-Shuttle-Astronaut/dp/0743276833/ref=pd_bxgy_eb_img_a">Riding Rockets</a> erworben, es widmen lassen und ihm die Hand geschüttelt, denn er hat Recht. Wir gewöhnen uns viel zu oft an unsere Ausnahmen und Abkürzungen&#8230; bis es eines Tages zu spät ist. In seinem Geschäft wird das dann eine Meldung in den Abendnachrichten. Glücklicherweise ist es in unserem Geschäft meist &#8220;nur&#8221; ein finanzieller Verlust.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/10/23/die-gewoehnung-an-abweichungen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was sind Visits, was sind Sessions?</title>
		<link>http://blog.xceptance.com/2009/10/18/was-sind-visits-was-sind-sessions/</link>
		<comments>http://blog.xceptance.com/2009/10/18/was-sind-visits-was-sind-sessions/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 23:07:17 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[lasttest]]></category>
		<category><![CDATA[loadtest]]></category>
		<category><![CDATA[sessions]]></category>
		<category><![CDATA[visits]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=284</guid>
		<description><![CDATA[Wenn wir mit Kunden über die möglichen Lasttesteckdaten sprechen, dann ist immer wieder von Visits und Sessions die Rede. Beide Begriffe stammen aus dem Englischen, sind aber durch das Internet und die meist in Englisch ablaufende Softwareentwicklung in den allgemeinen Sprachgebrauch im Bereich Last- und Performancetests eingegangen. Selbstverständlich gibt es auch deutsche Entsprechungen, wenn auch [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn wir mit Kunden über die möglichen Lasttesteckdaten sprechen, dann ist immer wieder von <em>Visits</em> und <em>Sessions</em> die Rede. Beide Begriffe stammen aus dem Englischen, sind aber durch das Internet und die meist in Englisch ablaufende Softwareentwicklung in den allgemeinen Sprachgebrauch im Bereich Last- und Performancetests eingegangen. Selbstverständlich gibt es auch deutsche Entsprechungen, wenn auch weniger oft benutzt: <em>Besuche</em> und <em>Sitzungen</em>.</p>
<h3>Warum geht es im Allgemeinen?</h3>
<p><em>Visits</em> und <em>Sessions</em> sind Begriffe aus der Webentwicklung, werden aber auch als Metriken im Webumfeld genutzt. Der technische Teil verbindet sich in der endgültigen Definition mit der wirtschaftlich/mathematischen zur eigentliche Bedeutung. Was wir also wollen ist: a) wissen was dahinter steckt, b) erfahren was die Begriffe definieren und c) wissen wozu man die Zahlen braucht.</p>
<h3>Was ist ein Visit?</h3>
<p>Wenn man sich dazu entschließt, eine Webseite zu besuchen, dann ruft man irgendwann eine erste Seite auf. In diesem Moment hat man einen Visit begonnen oder auf Deutsch &#8211; man ist zum Besucher geworden. So lange man sein Surfen auf dieser Webseite fortsetzt, solange setzt man seinen Visit fort. Alle einzelnen Seiten zusammengenommen, bilden damit, beginnnend mit der ersten Seite, einen Visit.</p>
<p>Für den Betreiber ist damit klar, dass ein Interessent oder Kunde seiner Webseite einen Besuch abgestattet hat. Am besten läßt sich das mit dem Besuch eines realen Ladens vergleichen. Wenn man in den Laden geht, dann beginnt man seinen Besuch/Visit und wenn man ihn wieder verlässt, dann endet der Besuch/Visit.</p>
<p>Natürlich gibt es auch Ausnahmen von der Regel. Wenn man nur mal schnell 5 Minuten in die Küche geht bzw. in einem realen Laden schnell zum Auto läuft, weil man sein Geld vergessen hat, dann zählt das nur als ein Visit, weil man nur eine Besuchsabsicht hatte.</p>
<p>Über die Metrik Visit läßt sich damit einfach messen, wieviele Besuchsabsichten pro Zeiteinheit vorgelegen haben und auch in die Tat umgesetzt wurden. Dabei spielt es keine Rolle, ob man etwas kauft, zurückbringt oder gleich wieder an der Tür kehrt macht.</p>
<p>Im Internet gibt es nicht nur echte Besucher, sondern auch jede Menge Automaten, die sich in den Netzweiten herumtreiben und mit jedem Abruf einer oder mehrerer Seite jeweils auch einen Visit erzeugen. Das bringt natürlich die Statistiken durcheinander. Deshalb versucht man durch technische Maßnahmen, diese meist unrelevanten Besuche herauszurechnen. Das <em>Wie</em> kann bei Interesse ein weiterer Blogeintrag werden.</p>
<h3>Was ist eine Session?</h3>
<p>Nun haben wir geklärt, was hinter dem Begriff <em>Visit</em> steckt, aber was ist dann eine <em>Session</em>?</p>
<p>Einfach gesagt, ist eine Session die technische Abbildung eines Besuchs/Visit. Die genutzte Technik und Software müssen sich nämlich merken, welche Anfragen zusammengehören, damit es möglich wird, Dinge wie ein Login oder einen Warenkorb technisch umzusetzen.</p>
<p>Sessions bestehen aus Daten, die Informationen über die Vorgänge des Visits zusammenfassen, oft als <em>Sessioninformationen</em> bezeichnet. Diese Datensätze haben im Regelfall eine begrenzte Lebenszeit. Wenn man seinen Visit beendet bzw. nicht fortsetzt, also nicht mehr klickt, dann beginnt eine Uhr zu ticken, die nach eine einstellbaren Zeit (oft 30 Minuten bis 2 Stunden), die Daten entfernt, damit es zu keinen Überläufen kommt. Das nennt sich <em>Session-Timeout</em>. Nimmt man vor Ablauf der Zeit seinen Besuch wieder auf, kommt also in den Laden zurück, dann beginnt die Uhr von Neuem zu ticken.</p>
<p>Vergleichbar ist es mit der Situation, dass man an der Kasse sein Geld nicht findet, den Korb schnell an der Kasse lässt, um Geld zu holen. Kommt man nun nicht rechtzeitig zurück, dann hat jemand den Korb ausgeräumt und die Waren zurückgestellt.</p>
<p>Die Anzahl der Sessions müsste eigentlich immer gleich der Anzahl der Visits sein. Da aber Visits oft anders gezählt werden, weil geschäftliche Kriterien dahinter stehen und keine technischen, liegen oft die Visits unter der Anzahl der Sessions pro Zeiteinheit.</p>
<p>Wir hoffen, dass diese kurze Erklärung hilft, die Begriffe <em>Visit</em> und <em>Session</em> zu verstehen und auseinander zu halten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/10/18/was-sind-visits-was-sind-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Begriffe erklärt: Lasttest, Stresstest, &#8230;</title>
		<link>http://blog.xceptance.com/2009/09/16/begriffe-erklart-lasttest-stresstest/</link>
		<comments>http://blog.xceptance.com/2009/09/16/begriffe-erklart-lasttest-stresstest/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 09:25:42 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=309</guid>
		<description><![CDATA[Begriffe erklärt: Lasttest, Stresstest, Dauerlasttest, Fail-Over-Test, Performancetest, Sizing-Test, Skalierbarkeitstest]]></description>
			<content:encoded><![CDATA[<p>Es gibt zahlreiche Begriffe für die verschiedenen Lasttest-Arten. Unsere Erfahrung aus der täglichen Arbeit, aus Gesprächen mit Kunden und aus der Auswertung von Suchwörtern zeigt, dass die Begriffe oft unklar sind  und manchmal nicht ganz korrekt benutzt werden. Daher möchten wir hier unsere Sicht auf diese Begriffe darstellen.</p>
<ul>
<li><strong>Lasttest:</strong> Bei einem Lasttest wird die zukünftige Nutzung des zu testenden Systems unter Berücksichtigung bestimmter Benutzer- und Transaktionsmengen simuliert und bewertet. Dabei werden zwei grundsätzliche Ziele verfolgt. Das erste Ziel ist die Aufdeckung funktionaler Fehler, die nur unter paralleler oder intensiver Nutzung des Systems auftreten. Das zweite Ziel ist die Überprüfung des Zeit- und Verbrauchsverhaltens des getesteten Systems unter einer gegebenen Last. Dabei werden beispielsweise Antwortzeiten sowie der Verbrauch von Hauptspeicher und Rechenleistung ermittelt. Lasttests können auf unterschiedliche Aspekte eines Systems ausgerichtet sein. Dafür sind jeweils auch unterschiedliche Lastprofile und Testszenarien erforderlich, die oft mit eigenen Begriffen bezeichnet werden. Beispiele dafür sind &#8220;Skalierungstest&#8221;, &#8220;Stresstest&#8221; oder &#8220;Dauerlasttest&#8221;. Der Begriff &#8220;Lasttest&#8221; ist der Oberbegriff für alle diese Testarten.</li>
<li><strong>Stresstest:</strong> Bei einem Stresstest wird die simulierte Last über das im Normalbetrieb erwartete Maß erhöht, bis funktionale Fehler auftreten oder das Antwortverhalten des getesteten Systems bestimmte Grenzen überschreitet. Hierfür wird oft eine kontinuierlich ansteigende Nutzerzahl simuliert. Stresstests verwendet man beispielsweise zur Ermittlung des Systemverhaltens in und nach Überlastsituationen, zur Ermittlung der maximal akzeptierbaren Last oder zum Finden von Performance-Schwachstellen (Bottlenecks).<span id="more-309"></span></li>
<li><strong>Dauerlasttest:</strong> Dauerlasttests sind Lasttests, die kontinuierlich über einen längeren Zeitraum laufen. Ziel ist die Prüfung der Langzeitstabilität des getesteten Systems sowie des Ressourcenbedarfs (Memory Leaks!) und das Antwortzeitverhaltens. Die Testdauer beträgt meist 12h bis mehrere Tage. Es wird beispielsweise die später im Produktivbetrieb erwartete Last oder eine Last etwa 30% unter der im Stresstest ermittelten Maximallast simuliert. Dauerlasttests werden auch Stabilitätstests genannt.</li>
<li><strong>Fail-Over-Test:</strong> Ein Fail-Over-Test prüft Hochverfügbarkeitseigenschaften einer Anwendung. Dazu werden während der Lastsimulation der Ausfall und der Wiederanlauf einzelner, redundant ausgelegter Systemkomponenten provoziert und die korrekte Reaktion (Fail-Over) des Systems geprüft.</li>
<li><strong>Performance-Test:</strong> Der Begriff Performance-Test wird nicht immer einheitlich verwendet. Teilweise meint man damit einen Test, der die Einhaltung der vorgegebenen Lastanforderungen prüft, indem man die geforderte Last simuliert und das Verhalten des Systems mit den Anforderungen an Antwortzeiten, Durchsatz usw. vergleicht. Teilweise wird von einem Performancetest gesprochen, wenn der Test Bottlenecks aufspüren soll, ohne das getestete System zu überlasten. Dazu werden während der Testläufe detaillierte Monitoring-Informationen über alle Hardware- und Softwarekomponenten gesammelt und ausgewertet. Gelegentlich wird der Begriff auch synonym zum Oberbegriff &#8220;Lasttest&#8221; benutzt.</li>
<li><strong>Sizing-Test:</strong> Mit einem Sizing-Test bestimmt man den Umfang der benötigten Hardware und Software für bestimmte Lastanforderungen. Dazu werden die Grenzen unterschiedlicher Hardware-/Software-Konfigurationen ermittelt, um später auf Basis gegebener Lastanforderungen Schätzungen zur voraussichtlich benötigten Hardware und Software durchführen zu können.</li>
<li><strong>Skalierbarkeitstest:</strong> Mit einem Skalierbarkeitstest wird erstens geprüft, wie sich das Antwortverhalten und der Ressourcenverbrauch eines Systems mit steigender Last verändern. Im Idealfall steigen die Antwortzeiten linear zur Last. In diesem Bereich &#8220;skaliert&#8221; das System. In realen Systemen verschlechtert sich dieses Verhalten mit zunehmender Last, so dass eine weitere Lasterhöhung ab einem gewissen Punkt einen stark überproportionalen Anstieg der Antwortzeiten zur Folge hat. Damit ist die Grenze der Skalierbarkeit erreicht. Es wird also getestet, wie stark die Last auf einem gegebenen System erhöht werden kann, bis diese Grenze erreicht ist. Zweitens ist zu testen, inwiefern sich diese Grenze durch Hinzunahme von Hardware- und Softwarekomponenten nach oben verschieben lässt. Solange die maximal verarbeitbare Last annähernd linear mit der Menge der eingesetzten Komponenten steigt, &#8220;skaliert das System über die Hardware- und Software&#8221;.</li>
</ul>
<p>Wir hoffen, damit die wichtigsten Lasttest-Arten ein wenig beleuchtet zu haben.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/09/16/begriffe-erklart-lasttest-stresstest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

