<?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; Performance</title>
	<atom:link href="http://blog.xceptance.com/category/performance/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>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>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>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>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>Browser Cache Usage Study by Yahoo</title>
		<link>http://blog.xceptance.com/2010/11/03/browser-cache-usage-study-by-yahoo/</link>
		<comments>http://blog.xceptance.com/2010/11/03/browser-cache-usage-study-by-yahoo/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 19:05:11 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Quotations]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=496</guid>
		<description><![CDATA[Today, I rediscovered this nice article about browser cache usage: Performance Research, Part 2: Browser Cache Usage – Exposed!. It gives you a pretty good idea about the average cache usage. Bottom line: Optimize your site for no cache hits at all and you are good. 40-60% of Yahoo!’s users have an empty cache experience [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I rediscovered this nice article about browser cache usage: <a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/">Performance Research, Part 2: Browser Cache Usage – Exposed!</a>. It gives you a pretty good idea about the average cache usage. Bottom line: Optimize your site for no cache hits at all and you are good.</p>
<blockquote><p>40-60% of Yahoo!’s users have an empty cache experience and ~20% of all page views are done with an empty cache. &#8230; It says that even if your assets are optimized for maximum caching, there are a significant number of users that will always have an empty cache. &#8230;reducing the number of HTTP requests has the biggest  impact on reducing response time. The percentage of users with an empty cache for different web pages may vary, especially for pages with a high number of active (daily) users. However, we found in our study that regardless of usage patterns, the percentage of page views with an empty cache is always ~20%.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/11/03/browser-cache-usage-study-by-yahoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Burn-in test of XLT 4.0</title>
		<link>http://blog.xceptance.com/2010/10/22/burn-in-test-of-xlt-4-0/</link>
		<comments>http://blog.xceptance.com/2010/10/22/burn-in-test-of-xlt-4-0/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 18:46:47 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[burn in]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[hits]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=477</guid>
		<description><![CDATA[If you write a performance testing software, your first obligation is a performance test for and with that software. So before we can ship XLT 4.0, we have to make sure that it can hold up to its promises. Test software has to be tested too, so to speak. Today we provisioned a bunch of Amazon-EC2 [...]]]></description>
			<content:encoded><![CDATA[<p>If you write a performance testing software, your first obligation is a performance test for and with that software. So before we can ship XLT 4.0, we have to make sure that it can hold up to its promises. Test software has to be tested too, so to speak. Today we provisioned a bunch of Amazon-EC2 boxes with 30 test agents in total. These charts are from a short test to see where we can get to, when ignoring any target numbers. This was a short and violent test. Just hammer the system under test and see if it can and will recover.</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2010/10/HitsPerSecond.png"><img class="size-medium wp-image-481   aligncenter" title="HitsPerSecond" src="http://blog.xceptance.de/wp-content/uploads/2010/10/HitsPerSecond-300x100.png" alt="HitsPerSecond" width="300" height="100" /></a></p>
<p>A short ramp up period in the beginning of the test and afterwards we kept a steady load factor. For the steady phase we reached more than 11,000 hits per second.</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2010/10/ConcurrentUsers.png"><img class="size-medium wp-image-482  aligncenter" title="Concurrent Users" src="http://blog.xceptance.de/wp-content/uploads/2010/10/ConcurrentUsers-300x100.png" alt="Concurrent Users" width="300" height="100" /></a></p>
<p>The target system was seeing about 2,200 concurrent users during the peak of the test.</p>
<p style="text-align: center;"><a rel="lightbox" href="/wp-content/uploads/2010/10/ReceivedBytesPerSecond.png"><img class="size-medium wp-image-483    aligncenter" title="Received Bytes per Second" src="http://blog.xceptance.de/wp-content/uploads/2010/10/ReceivedBytesPerSecond-300x100.png" alt="Received Bytes per Second" width="300" height="100" /></a></p>
<p>During that test, the network was transporting about 95 Mbytes/s inbound traffic, this is a network utilization of about 760 Mbit/s. Amazing that the EC2 boxes in the EU data center can handle that traffic. We used just 10 boxes and each box has a 100Mbit network, so the overall limit must have been reached we think.</p>
<p>By the way, the target system recovered easily and was able to serve its normal duties without any problems. But this test clearly showed the limits in terms of throughput. But this test did not show any limits of XLT 4.0, because neither the load boxes in terms of CPU nor the reporting had any problems with this test size.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/10/22/burn-in-test-of-xlt-4-0/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>What is the state of the G1 Garbage Collector?</title>
		<link>http://blog.xceptance.com/2010/07/31/what-is-the-state-of-the-g1-garbage-collector/</link>
		<comments>http://blog.xceptance.com/2010/07/31/what-is-the-state-of-the-g1-garbage-collector/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 18:39:36 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[G1]]></category>
		<category><![CDATA[garbage collection]]></category>
		<category><![CDATA[gc]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=465</guid>
		<description><![CDATA[Because I do not know what is the current state of the Java G1 Garbage Collector, I decided to try G1 with JDK6u20. Somehow I was disappointed because after a short moment of predictable GC performance, the entire VM stopped and some major collection was running. You can easily see that in the charts of [...]]]></description>
			<content:encoded><![CDATA[<p>Because I do not know what is the current state of the Java G1 Garbage Collector, I decided to try G1 with JDK6u20. Somehow I was disappointed because after a short moment of predictable GC performance, the entire VM stopped and some major collection was running. You can easily see that in the charts of that run. Right around 20:09:45, the threads were stopped and the entire VM behaved ugly.</p>
<p><a rel="lightbox" href="/wp-content/uploads/2010/07/SearchResult.png"><img class="aligncenter size-medium wp-image-466" title="The G1 stop the world" src="http://blog.xceptance.de/wp-content/uploads/2010/07/SearchResult-300x100.png" alt="The G1 stop the world" width="300" height="100" /></a></p>
<p>So, the G1 is not yet ready for production, of course nobody stated that it is ready for production. If I read the release notes of JDK6u21 correctly, it delivers plenty of G1 changes, so I might try that soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/07/31/what-is-the-state-of-the-g1-garbage-collector/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>Speed matters for your ranking</title>
		<link>http://blog.xceptance.com/2010/05/30/speed-matters-for-your-ranking/</link>
		<comments>http://blog.xceptance.com/2010/05/30/speed-matters-for-your-ranking/#comments</comments>
		<pubDate>Sun, 30 May 2010 15:00:38 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ranking]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=448</guid>
		<description><![CDATA[Nati Shalom discusses in one of his latest blog entries the changes Google made to its page ranking algorithm and how it influences your Google page ranking. Last month Google added Website speed to its site ranking algorithm: It’s Official: Google Now Counts Site Speed As A Ranking Factor&#8230; The rationale behind this move by [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://natishalom.typepad.com/nati_shaloms_blog/">Nati Shalom</a> discusses in one of <a href="http://natishalom.typepad.com/nati_shaloms_blog/2010/05/web-speed-can-get-you-off-of-google-search-how-to-solve-it.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+NatiShalom+%28Nati+Shalom%27s+Blog%29">his latest blog entries</a> the changes Google made to its page ranking algorithm and how it influences your Google page ranking.</p>
<blockquote><p>Last month Google added <strong>Website speed</strong> to its site ranking algorithm: <a href="http://searchengineland.com/google-now-counts-site-speed-as-ranking-factor-39708">It’s Official: Google Now Counts Site Speed As A Ranking Factor</a>&#8230; The rationale behind this move by Google is fairly straightforward:</p>
<p>Slow web sites lead to a poor user experience, and therefore should not appear at the top of the search list <em>even if they contain relevant content</em>.</p></blockquote>
<p>This emphasizes once more the influence of performance on your daily business. A simple change to your site can now affect your entire page ranking and how users find your content. Continuous performance testing is now even more important than ever.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/05/30/speed-matters-for-your-ranking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ist die Geschwindigkeit ein Teil des Pagerank?</title>
		<link>http://blog.xceptance.com/2010/01/21/ist-die-geschwindigkeit-ein-teil-des-pagerank/</link>
		<comments>http://blog.xceptance.com/2010/01/21/ist-die-geschwindigkeit-ein-teil-des-pagerank/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 11:51:13 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[optimierung]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=385</guid>
		<description><![CDATA[In diesem Interview mit SEO marketing expert Amanda Watlington ist die Rede davon, dass Google die Geschwindigkeit einer Website in die Platzierung im Suchergebnis einfließen lässt. Google is now using page loading speed in their ranking algorithm. The engineering of some sites can make this a difficult problem to fix quickly, so webmasters should study [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem <a href="http://www.wilsonweb.com/seo/watlington-seo-challenges-2010.htm">Interview mit SEO marketing expert Amanda Watlington</a> ist die Rede davon, dass Google die Geschwindigkeit einer Website in die Platzierung im Suchergebnis einfließen lässt.</p>
<blockquote><p>Google is now using page loading speed in their ranking algorithm. The engineering of some sites can make this a difficult problem to fix quickly, so webmasters should study the problem now with speed detection tools such as <a href="http://developer.yahoo.com/yslow">YSlow</a> and <a href="http://code.google.com/speed/page-speed/">Google Page Speed</a>.</p></blockquote>
<p>Das wäre nur konsequent von Google, da bereits die Webmaster-Tools in der Google-Administration die Seitengeschwindigkeit ausweisen. Zudem profitiert Google von schnellen Webseiten indirekt, da der Aufwand für die Indizierung sinkt bzw. die Updatezyklen kürzer sein können. Damit steigt auch die Aktualität von Suchergebnissen und das verbessert die Wettbewerbssituation für Google.</p>
<p>Wir freuen uns natürlich auch darüber, weil damit nicht zuletzt auch die Bedeutung von Last- und Performancetests steigt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2010/01/21/ist-die-geschwindigkeit-ein-teil-des-pagerank/feed/</wfw:commentRss>
		<slash:comments>2</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>
		<item>
		<title>Xceptance LoadTest 3.3 ist verfügbar</title>
		<link>http://blog.xceptance.com/2009/09/10/xceptance-loadtest-3-3-ist-verfugbar/</link>
		<comments>http://blog.xceptance.com/2009/09/10/xceptance-loadtest-3-3-ist-verfugbar/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:45:29 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[lasttest]]></category>
		<category><![CDATA[Xceptance LoadTest]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=301</guid>
		<description><![CDATA[Ab sofort steht das Softwarepaket Xceptance LoadTest (XLT) 3.3 zum kostenlosen Download bereit. Dahinter verbirgt sich schon die erste Neuerung, denn mit dem Download besitzt man automatisch eine freie Basislizenz. Sie erlaubt Tests mit bis zu fünf virtuellen Nutzern, gilt zeitlich unbegrenzt und unterliegt keinen Nutzungseinschränkungen. Damit darf man XLT auch kommerziell einsetzen, beispielsweise intern [...]]]></description>
			<content:encoded><![CDATA[<p>Ab sofort steht das Softwarepaket Xceptance LoadTest (XLT) 3.3 zum kostenlosen <a title="Download XLT" href="http://www.xceptance.de/produkte/xlt/downloads.html">Download</a> bereit.</p>
<p>Dahinter verbirgt sich schon die erste Neuerung, denn mit dem Download besitzt man automatisch eine freie Basislizenz. Sie erlaubt Tests mit bis zu fünf virtuellen Nutzern, gilt zeitlich unbegrenzt und unterliegt keinen Nutzungseinschränkungen. Damit darf man XLT auch kommerziell einsetzen, beispielsweise intern oder in  Kundenprojekten. So kann man ungehindert prüfen, ob XLT das Werkzeug der Wahl ist oder man kann XLT bereits produktiv für Regressionstests verwenden.</p>
<p>XLT 3.3 bietet einige neue Features, die die tägliche Arbeit effizienter gestalten und den Einsatzbereich von XLT erweitern:</p>
<ul>
<li>Comparison-Reports zum detaillierten Vergleich zweier Testläufe</li>
<li>Trend-Reports zur Visualisierung von Veränderungen in den Testergebnissen über mehrere Testläufe hinweg</li>
<li>Unterstützung des Google WebDriver API für schnelles Prototyping von Testfällen</li>
<li>Ruby als zusätzliche Scriptsprache zur Testfallerstellung</li>
<li>Programmierbeispiele für typische Anwendungsfälle, zum Beispiel für die Bearbeitung von Ajax-Requests und die Behandlung von Popups oder Frames</li>
<li>Überarbeiteter Testrecorder mit der Unterstützung für Voreinstellungen zur Codegenerierung</li>
</ul>
<p>Zusätzlich sind wieder  viele Detailverbesserungen in diese Version eingeflossen. Weiterführende Informationen gibt es in den <a title="XLT 3.3 Releasenotes" href="https://lab.xceptance.de/releases/xlt/3.3.0/releasenotes.html">Releasenotes</a> oder auf den <a title="XLT Produktinformationen" href="http://www.xceptance-loadtest.de/">Produktseiten</a> unseres Webauftritts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/09/10/xceptance-loadtest-3-3-ist-verfugbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vergleich von Lasttest-Ergebnissen</title>
		<link>http://blog.xceptance.com/2009/06/13/vergleich-von-lasttests-ergebnissen/</link>
		<comments>http://blog.xceptance.com/2009/06/13/vergleich-von-lasttests-ergebnissen/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 14:02:08 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[vergleich]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=220</guid>
		<description><![CDATA[Die kommende Version von XLT (3.3) wird ein schönes neues Feature mitbringen: Die Möglichkeit des Vergleichs von Lasttest-Ergebnissen und die dazu gehörige Visualisierung. Hier nur ein kleiner Ausschnitt aus einem Report. So oder so ähnlich wird es dann aussehen. Wie gewohnt, wird auch der Vergleich von Lasttest-Ergebnissen nur mit offenen Datenformaten arbeiten. Außerdem wird der [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="http://blog.xceptance.de/wp-content/uploads/2009/06/xlt-33-diff-report.png"><img class="alignleft size-medium wp-image-221" title="Übersicht über die Unterschiede in der Request-Laufzeit" src="/wp-content/uploads/2009/06/xlt-33-diff-report-300x176.png" alt="Übersicht über die Unterschiede in der Request-Laufzeit" width="300" height="176" /></a>Die kommende Version von XLT (3.3) wird ein schönes neues Feature mitbringen: Die Möglichkeit des Vergleichs von Lasttest-Ergebnissen und die dazu gehörige Visualisierung. Hier nur ein kleiner Ausschnitt aus einem Report. So oder so ähnlich wird es dann aussehen.</p>
<p>Wie gewohnt, wird auch der Vergleich von Lasttest-Ergebnissen nur mit offenen Datenformaten arbeiten. Außerdem wird der Vergleich basierend auf den bereits existierenden Reports erstellt. Damit kann man schnell und einfach zwei Reports vergleichen und sich ein Bild von den Fortschritten oder aktuellen Problemen machen.</p>
<p>Alle Kunden, die bereits XLT einsetzen, sind herzlich zu einem Vorabtest der Entwicklungsversion 3.3 eingeladen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2009/06/13/vergleich-von-lasttests-ergebnissen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unterschied zwischen Visits und Pageviews</title>
		<link>http://blog.xceptance.com/2008/12/21/unterschied-zwischen-visits-und-pageviews/</link>
		<comments>http://blog.xceptance.com/2008/12/21/unterschied-zwischen-visits-und-pageviews/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 22:53:06 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[pageviews]]></category>
		<category><![CDATA[visits]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=137</guid>
		<description><![CDATA[Heute habe ich eine Suchanfrage zum Thema &#8220;Unterschied zw Visits und Pageviews&#8221; entdeckt. Da wir leider keine passende Antwort im Blog haben, soll es jetzt glatt eine geben. Kunde ist schließlich König. Hier nun als die Erklärung. Was ist ein Visits? Ein Visit ist der Besuch eines Kunden auf einer Webseite. Dabei gilt, dass der [...]]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich eine Suchanfrage zum Thema<em> &#8220;Unterschied zw Visits und Pageviews&#8221;</em> entdeckt. Da wir leider keine passende Antwort im Blog haben, soll es jetzt glatt eine geben. Kunde ist schließlich König. Hier nun als die Erklärung.</p>
<h3>Was ist ein Visits?</h3>
<p>Ein Visit ist der Besuch eines Kunden auf einer Webseite. Dabei gilt, dass der letzte Besuch bereits einige Zeit her sein muss, damit dieser neue Besuch als neuer Besuch gilt. Im Ecommerce wird häufig der Begriff Session/Sitzung verwendet. Dieser Begriff ist auch technisch geprägt, denn der Server besitzt interne Strukturen, die Details über den Besuch für eine gewisse Zeit speichern.</p>
<p>Ein Visit entsteht, wenn der Nutzer einen Request an einen Server schickt und als Antwort eine Webseite angezeigt bekommt. Die Anzeige der Webseite ist übrigens der Pageview, dazu aber später mehr. Ein Visit hat mindestens einen Pageview, typischerweise aber mehrere. Zeitlich zusammenhängende Pageviews eines Nutzers bilden damit einen Visit.</p>
<p>Als Beispiel sei einfach mal ein Besuch bei Amazon genannt. Man tippt www.amazon.de ein, bekommt eine Webseite angezeigt und schwupst hat man einen Visit erzeugt. Jetzt bewegt man sich durch den Shop und alles was man macht, fällt unter diesen einen Visits.</p>
<p>Sollte man eine gewisse Zeit nichts machen, also seinen Browser geschlossen haben oder einfach nicht klicken, dann beendet sich der Visit, denn auf der Serverseite werden die Informationen über den Besuch entfernt bzw. inaktiv gesetzt. Abhängig vom Webangebot ist ein  Zeitraum von 30 Minuten bis 24 Stunden möglich.</p>
<p>Wichtige Messgrößen sind die Länge eines Visits (Visit Duration), die Anzahl der Pageviews und der Abstand zwischen zwei Pageviews (Thinktime).</p>
<p>Andere Begriffe für Visits sind: Besuch, Besucher oder Session.</p>
<h3>Was ist ein Pageview?</h3>
<p>Ein Pageview stellt die Anzeige einer Webseite dar. Ich schicke also einen Request/Anfrage an einen Webserver und bekomme als Antwort eine Webseite, da ich sie sehe, ist das dann der Pageview.</p>
<p>Noch vor kurzer Zeit war für einen Pageview nur ein Request an den Server nötig, der mir eine Webseite lieferte. Mit weiteren Request hat dann der Browser Bilder, CSS und Javascript ergänzt und mir die Seite gezeigt. In der modernen Webwelt ist die Definition Pageview etwas weicher und ungenauer, denn AJAX und moderne Nutzerkonzepte tauschen keine kompletten Webseiten mehr aus, sondern ändern oft nur kleine Teile. Damit haben wir keinen Pageview mehr, sondern nur noch eine Interaction oder eine Action.</p>
<p>Bleiben wir aber einfach mal beim altmodischen Pageview. Ein Pageview wird durch einen Request (technisch) eingeleitet und durch die Antwort (Response) des Servers beendet. Diese Abfolge wird oft auch als Hit bezeichnet. Ein Seite kann nun andere Elemente beinhalten, zum Beispiel Bilder und CSS. Jedes dieser Elemente wird nun wieder mit Request/Response abgewickelt und formt wiederum einen weiteren Hit.</p>
<p>Ein Pageview besteht also aus einem HTML-Teil und vielen eingebetteten Elementen. Jede Komponente und der HTML-Teil verursachen jeweils einen Hit.</p>
<p>Wichtige Messgrößen sind zum Beispiel: Ladezeit der Page, Größe der Seite und Länge der Betrachtung, also die Zeit bis zum nächsten Klick.</p>
<p>Andere Begriffe für Pageview sind: Page Impression, Page Hit und Seitenaufruf.</p>
<h3>Fazit</h3>
<p>Ein Visit besteht also aus einem oder mehreren Pageviews und hat eine Dauer. Ein Pageview dagegen hat eine Laufzeit und besteht aus Elementen, die selbst als Request oder Hit bezeichnet werden.</p>
<p>Verwirrt? Macht nichts. Einfach in den Kommentaren fragen. Außerdem ist die Begrifflichkeit nicht fest definiert und wird oft leicht anderes verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2008/12/21/unterschied-zwischen-visits-und-pageviews/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Parallele Nutzer &#8211; die Kunst der Berechnung</title>
		<link>http://blog.xceptance.com/2008/11/27/parallele-nutzer-die-kunst-der-berechnung/</link>
		<comments>http://blog.xceptance.com/2008/11/27/parallele-nutzer-die-kunst-der-berechnung/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 05:35:31 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[lasttest]]></category>
		<category><![CDATA[nutzer]]></category>
		<category><![CDATA[performancetest]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=102</guid>
		<description><![CDATA[Die Meisten dürften den Begriff Parallele Nutzer (Concurrent User) kennen. Im Bereich des Last- und Performancetests wird die Zahl Parallele Nutzer gern als Maß aller Dinge herangezogen. Dabei tauchen gern astronomische Zahlen auf, die beim genauen Hinsehen oft überhaupt nicht überprüfbar sind. Leider sind diese Zahlen oft auch ein Verkaufsargument für völlig überpreiste Software. Mit [...]]]></description>
			<content:encoded><![CDATA[<p>Die Meisten dürften den Begriff <em>Parallele Nutzer</em> (<em>Concurrent User</em>) kennen. Im Bereich des Last- und Performancetests wird die Zahl <em>Parallele Nutzer</em> gern als Maß aller Dinge herangezogen. Dabei tauchen gern astronomische Zahlen auf, die beim genauen Hinsehen oft überhaupt nicht überprüfbar sind. Leider sind diese Zahlen oft auch ein Verkaufsargument für völlig überpreiste Software.</p>
<p>Mit diesem Blogeintrag möchte ich gern einige Mythen und Missverständnisse  aufklären und Licht in die Welt der <em>Parallelen Nutzer</em> bringen. Meinungen, Einwände und natürlich auch Zustimmung dürfen gern als Kommentar verewigt werden.</p>
<p>Fangen wir mit einigen Grundbegriffen an, damit wir alles über das Gleiche reden. Da wir uns als Firma meist in den Bereichen Internet und Ecommerce bewegen, sind natürlich Beispiele auf Webshops bezogen. Das Thema ist natürlich nicht auf Ecommerce-Lasttests beschränkt.</p>
<h3>Die Begriffe</h3>
<ul>
<li><strong>Visit</strong>: Als Visit wird ein zusammenhängender Besuch einer Webpräsenz bezeichnet. Der Visit hat eine Dauer (erstes Byte, erster Request bis letztes Byte, letzter Request). Ein Besuch besteht aus einem oder mehreren Pageviews. Zwischen den einzelnen Pageviews liegt die Denkzeit (Thinktime).</li>
<li><strong>Session</strong>: Technischer Begriff oder technische Repräsentation eines Visits. Oft werden Visit und Session als Synonyme benutzt.</li>
<li><strong>Pageview</strong>: Der Aufruf einer URL oder Webseite (auch Page-Impression). Ein Pageview kann eine Vielzahl mehrerer technischer Requests nach sich ziehen (Html, CSS, Javascript, Bilder etc.), aber besteht immer mindestens aus einem Request.</li>
<li><strong>Request</strong>: Anfrage an einen Server, im Falle von Webapplikationen in den meisten Fällen unter Nutzung der Protokolle HTTP/HTTPS. Der zurückgelieferte Inhalt kann HTML, CSS oder Javascript sein, es können Bilder oder Videos, Flash oder Silverlight Applikationen ausgeliefert werden. Über HTTP lässt sich fast alles transportieren.</li>
<li><strong>Thinktime/Denkzeit</strong>: Abstand zwischen zwei Pageviews innerhalb eines Visits.</li>
<li><strong>Szenario</strong>: Ablauf eines Visits im Sinne eines Usecases (zum Beispiel Suchen oder Bestellen oder auch beides). Szenarien repräsentieren oft abgebildete Testfälle, die als Lasttest ausgeführt werden sollen.</li>
<li><strong>Parallele Nutzer</strong>: So genau wissen wir das jetzt noch nicht&#8230;</li>
</ul>
<h3>Der Last- und Performancetest</h3>
<p>Ein Lasttest bildet die existierende Realität ab oder will eine Zukunftserwartung widerspiegeln. In beiden Fällen ist es nicht möglich, mit vertretbarem Aufwand alle Möglichkeiten abzudecken, sie  sich ergeben oder vorstellbar sind. Die Wege durch einen Webshop sind vielfältig und eigentlich gibt es eine unendliche Anzahl davon. Aus diesem Grund wählt man zuerst die typischsten Testcases aus und formt diese in Szenarien um. Im Falle eines Szenarios wird in den meisten Fällen nur davon ausgegangen, dass es sich um einen isolierten Visit handelt, der die Vorgänge des Testcases wiederholt und damit definierte (auch zufällige Daten sind definiert) nutzt.</p>
<p>Als Beispiel nehmen wir drei Szenarien: Ein Besucher, der sich nur umschaut (<em>Browsing</em>); ein Besucher, der interessante Produkte in den Warenkorb legt (<em>Add2Cart</em>) und einen Besteller, der seinen zusammengestellten Warenkorb auch nach Hause geliefert bekommen möchte (<em>Order</em>). Für unser Beispiel registriert sich der Nutzer nicht, er kauft also anonym ein bzw. ohne Nutzung einer Registrierung.</p>
<p>Die Nutzer müssen alle Grundschritte durchführen, um ihrem Szenario gerecht zu werden:</p>
<p><strong>Browsing-User</strong></p>
<ol>
<li>Homepage</li>
<li>Auswahl eines Kataloges</li>
<li>Auswahl eines Unterkataloges</li>
<li>Auswahl eines Produktes</li>
</ol>
<p><strong>Add2Cart</strong></p>
<ol>
<li>Browsing 1.-4.</li>
<li>Produkt in den Warenkorb legen</li>
</ol>
<p><strong>Order<br />
</strong></p>
<ol>
<li>Add2Cart 1.-2.</li>
<li>Checkout beginnen</li>
<li>Adressen eingeben</li>
<li>Zahlungsmethode wählen</li>
<li>Lieferart wählen</li>
<li>Bestellung bestätigen</li>
</ol>
<p>Die erste Herausforderung besteht in der Wahl der Inhalte für die einzelnen Aktionen. Soll es immer das gleich Produkt sein, immer die gleichen Katalog, sollen Mengen variiert werden, Warenkorbgrössen usw&#8230; Allein diese drei Szenarien bieten sich unendliche Variationsmöglichkeiten. Aber bleiben wir zunächst bei den Grundschritten und einfach nur beim einfachen <em>Browsing</em>.</p>
<h3>Die Parallelen Nutzer</h3>
<p>Die einmalige Ausführung eines <em>Browsing</em> wäre im Rahmen eines Tests gegen den Server ein Visit, bestehend aus 4 Pageviews, mit ggf. weiteren Requests für statische Inhalte. Wird der Test zweimal ausgeführt und alle Daten und Verbindungen (Cookies, HTTP-Keep-Alive, Browsercache) zurückgesetzt, so ergibt sich ein weiterer Visit. Führt man diese beiden Visits jetzt unabhängig parallel aus, dann ergeben sich zwei parallele Nutzer, wobei Nutzer hier umgangssprachlich zu verstehen ist, eigentlich sind es parallele Visits. Ich selbst bevorzuge den Begriff Visits.</p>
<p>Unsere beiden Visits führen nun jeweils vier Pageviews aus. Macht also insgesamt 8. Da jeder Pageview eine Grundlaufzeit im Server hat, sagen wir 1 Sekunde, dauert also ein Visit mindestens 4 Sekunden. D.h. wenn ein Nutzer seine Visits eine Stunde lang wiederholen würde, dann hätte er 3.600 Sekunden / 4 Sekunden pro Visit = 900 Visits absolviert. Zwei Nutzer gleichzeitig also 1.800 Visits, insgesamt dann 1.800 Visits x 4 Pageviews pro Visit = 7.200 Pageviews.</p>
<h3>Die Denkzeiten</h3>
<p>Nun sind natürlich die wenigstens Nutzer so zügig unterwegs und deswegen werden oft Denkzeiten/Thinktimes eingerechnet. Die durchschnittliche Denkzeit dürfte momentan im Schnitt (je nach Webauftritt natürlich) bei ca. 10-20 Sekunden liegen. Früher waren es eher 40 Sekunden, aber die Anwender haben inzwischen mehr Erfahrung, wissen mehr und die Nutzerführung hat sich auch verbessert, so dass man schneller im Webangebot navigieren kann. Für unsere Berechnung nehmen wir einfach 15 Sekunden Denkzeit an.</p>
<p>Ein Visit würde jetzt also 4 Pageviews a 1 Sekunde plus 3 Denkzeiten a 15 Sekunden dauern. Nach dem letzten Klick gibt es keine Denkzeit, der Visit ist beendet, deswegen nur 3&#215;15 und nicht 4&#215;15. Insgesamt dauert unser Visit also jetzt 49 Sekunden. Würden wir jetzt also wieder einen Nutzer eine Stunde klicken lassen und jeweils 4 Pageviews als Visit definieren, inkl. der Denkzeit, so kann ein Nutzer 3.600 Sekunden / 49 Sekunden pro Visit = 73,5 Visits pro Stunde absolvieren.</p>
<p>Möchten wir jetzt wieder 1.800 Visits testen, so benötigen wir 1800 Visits / 73,5 Visits pro Stunde pro Nutzer = 24,5 Nutzer, also rund 25. Die Anzahl der Pageviews bleibt gleich, da ja ein Visit vier Pageviews sind und die Anzahl der Visits konstant ist.</p>
<p>Diese 25 Nutzer müssen jetzt also parallel und gleichzeitig, trotzdem unabhängig voneinander ihre Besuche vollziehen.</p>
<h3>Der Zufall und die Varianz</h3>
<p>Wir haben also nun 25 parallele Nutzer, die exakt den gleichen Simulationstraffic erzeugen, wie 2 Nutzer ohne Denkzeit. Exakt den gleichen Datenverkehr? Nein, natürlich nicht, denn jetzt kommt extreme Parallelität und die Unvorhersagbarkeit von Tests und ja auch der Realität ins Spiel.</p>
<p>Würde unsere Anforderung heissen, dass wir 1.800 Visits pro Stunde simulieren sollen und 7.200 Pageviews pro Stunde, so könnten wir jetzt die Denkzeit beliebig schieben und eine Zahl zwischen 2 und X Simulationsnutzern wählen.</p>
<p>Wo liegt nun der Unterschied zwischen 25 Nutzern und 2 Nutzern? Für unsere Simulationsperiode von einer Stunde heisst es für den Server, dass er aller 2 Sekunden, eine neue Session (Visit-Beginn) sieht &#8211; 3600 Sekunden / 1800 Visits. Schliesslich sind unsere Visits gleichverteilt</p>
<p>Achso, wären unsere Visits nicht gleichverteilt, dann würden wir nicht 1800 Visits, sondern viel mehr simulieren. Warum? Nehmen wir an, es heisst, wir werden 1800 Visits per Stunde haben, aber 100 Nutzer gleichzeitig. Nun wissen wir aus unsere Berechnung, dass ein Visit 49 Sekunden dauert. Sind 100 Nutzer gleichzeitig aktiv, so würde der Server pro Stunde 3600 / 49 * 100 = 7.347 Visits sehen. Unsere Simulation muss etwas annehmen und das ist immer der schlimmste Fall. Auch brauchen wir einen handhabbaren Zeitraum, eine Sekunde ist etwas zu fein. Eine Stunde ist immer sehr günstig, da die meisten Internetstatistiken immer auf eine Stunde hoch- oder runtergerechnet werden können.</p>
<p>Man kann aber auch anderes herangehen, um die Zahlen zu hinterfragen bzw. anders zu betrachten. Wenn 100 Nutzer gleichzeitig aktiv sind, dann können sie 100 Pageviews gleichzeitig anfordern. Im schlimmsten Fall wären das aber (ein Pageview braucht 1 Sekunde auf dem Server) dann 100 * 3600 Sekunden = 36.000 Pageviews pro Stunde. Weil die Aussagen 100 parallele Nutzer eigentlich nie an einen Zeitraum gebunden ist, muss man also annehmen, dass zu jedem Zeitpunkt diese Nutzer theoretisch klicken könnten.</p>
<p>Damit sieht man schnell, dass die Zahl der <em>Parallelen Nutzer</em> für sich allein gesehen nur im Raum schwebt und alles sein kann. Viel Traffic, wenig Traffic, wenig Last, viel Last. Nur mit der Kenntnis der Testfälle und der weiteren Zahlen, wie Visits und Pageviews pro Zeiteinheit, lässt sich a) eine Anzahl von <em>Parallelen Nutzern</em> ermitteln und b) jede der Zahlen mit Hilfe von Berechnungen gegen die anderen Zahlen überprüfen.</p>
<p>Nicht zu vergessen, dass <a title="Die Antwort auf DIE Frage" href="http://de.wikipedia.org/wiki/42_(Antwort)">42</a> immer eine gute Anzahl an <em>Parallelen Nutzern</em> ist&#8230;</p>
<h3>Warum 100.000 Nutzer nicht 100.000 Visits sind</h3>
<p>Was ich damit ausdrücken möchte, ist die unbedingte Notwendigkeit einer zeitlichen Dimension. Die Vorgabe 300.000 Nutzer würde immer heissen, sie könnten gleichzeitig klicken. Wir hätten also mit einem Schlag 300.000 Visits eröffnet. Das Argument heisst jetzt bestimmt, aber sie kommen ja nicht gleichzeitig. Sind die Nutzer aber nicht gleichzeitig mit einem Visit aktiv, dann sind es keine <em>Parallelen Nutzer</em> und man braucht sie auch nicht simulieren.</p>
<p>300.000 Nutzer pro Stunde, die glaube ich mit Visits in den meisten Fällen gleichgesetzt werden, würden also mit der Annahme einer Gleichverteilung und einer durchschnittlichen Visitdauer von 49 Sekunden zum Einsatz von  (jeder Nutzer schafft pro Stunde 3600 / 49 = 73,5 Visits) 300.000 / 73,5 = 4081 <em>Parallelen Nutzern</em> führen. 4081 Nutzer machen in 49 Sekunden (Visitlänge) jeder 4 Pageviews, d.h. in 49 Sekunden haben wir 16.324 Pageviews, pro Sekunde sind das also 333 Pageviews (siehe nächster Paragraf).</p>
<p>Oder denken wir einfach nur in Pageviews ohne Denkzeit. 300.000 Nutzer sind 1.200.000 Pageviews (für unser obiges Beispiel). Also muss ich 1.200.000 / 3600 = 333 Pageviews pro Sekunde ausführen. Ohne Denkzeit würde ich also 333 Nutzer zur Simulation benötigen. Jeder schafft 3600 / 4 Pageviews = 900 Visits pro Stunden, also haben wir am Ende 299.700 Visits ausgeführt (etwas Rechenunschärfe ist dabei, gut gerundet halt).</p>
<p>Für das Endergebnis ist also genau genommen die Simulation mit 4081 Nutzern und 15 Sekunden Denkzeit oder 333 Nutzern ohne Denkzeit identisch. Der Server sieht die gleiche Anzahl von Visits pro Zeitperiode, die gleiche Anzahl an Pageviews etc.</p>
<h3>Das kann doch nicht sein</h3>
<p>Mit Recht werden jetzt Einwände laut und diese sind berechtigt, denn in der Realität würde die Denkzeit nie exakt 15 Sekunden betragen und auch nie die Antwortzeit immer 1 Sekunde. Hier kommt der Zufall ins Spiel. Für unser Beispiel nehmen wir an, dass die Denkzeit zwischen 10 und 20 Sekunden schwankt. Das Mittel wären immer noch 15 Sekunden.</p>
<p>Was jetzt passiert, wirkt sich rechnerisch so aus. Im schlimmsten Fall, sind jetzt alle Visits nur noch 4 Sekunden + 3 x 10 Sekunden lang, also 34 Sekunden. Das bedeutet, dass unser Server innerhalb von 34 Sekunden jetzt die Anzahl der Visits und Pageviews liefern muss, die bisher in 49 Sekunden ausgeliefert wurden. In diesem Moment würde der Tests also nicht 300.000 Nutzer mit 4081 parallelen Testnutzern abdecken, sondern 3600/34*4081 = 432,105 Visits pro Stunde.</p>
<p>Das heisst, man muss sich auf Zielzahlen festlegen, die man unterstützen möchte bzw. messen, was der Server momentan liefern kann. Sobald man sagt, man hat X Visits, aber die könnten in der Länge schwanken, hat man wieder eine höhere Maximalzahl an Visits geschaffen, die man unterstützen muss, aber eigentlich nicht testen will.</p>
<p>Das wäre der reine Blick auf den Last- und Performancetest. Wir möchten also wissen, ob wir dem Ansturm X gewachsen sind. Wobei X theoretisch (und so ist es im Test), beständig für einen längere Zeitperiode als schlimmster Fall (Worst-Case) gilt. Möchte man den Server jenseits des maximalen &#8220;guten&#8221; Falles ausmessen, dann jagt man nicht mehr Performance, sondern erforscht das Überlastverhalten. Hier legt man Wert auf Stabilität und eine vorhersagbare Art- und Weise der &#8220;Verschlechterung&#8221;. Alle Tests, die normalerweise zuerst gemacht werden, und das ist richtig so, sind Tests, die den Gutzustand ermitteln oder beweisen wollen.</p>
<h3>Und doch&#8230;.</h3>
<p>Selbstverständlich kann es Sinn machen, mit 4081 statt 333 Nutzern zu testen, auch wenn der Server die gleiche Anzahl von Visits und Pageviews pro Zeitperiode sieht. 4081 Nutzer können halt sehr kurz parallel erscheinen und damit zum Beispiel 4081 Webserver-Threads oder Sockets beanspruchen, während 333 Nutzer nie auf diese Zahl kommen werden. Selbst wenn man die Denkzeit bei den 4081 Nutzer konstant hält, wird durch die variablen Antwortzeiten der Traffic nicht mehr so synchron laufen, wie er am Start geplant war.</p>
<p>Im schlimmsten Fall kann das dazu führen, dass wir so überhaupt nicht testen können, weil jeder Durchlauf ein anderen Ergebnis liefert. Durch die Reduktion auf 333 Nutzer mit keiner oder minimaler Denkzeit schränken wir zunächst die &#8220;Bewegung&#8221; des Systems ein, um es vermessen zu können. Wenn das System liefert, was es soll, dann kann der Test in die Breite wachsen.</p>
<h4>Steady Load versus Constant Arrival Rate</h4>
<p>Um das Dilemma zu lösen, ohne a) auf den Server Rücksicht zu nehmen und b) trotzdem vernünftig messen zu können, kann man aus zwei typischen Lastprofilen wählen.</p>
<ul>
<li><strong>Steady Load</strong>: Hier wird eine fixe Anzahl von Nutzer losgeschickt, die auch auf den Server warten, wenn der Server z.B. lange Antwortzeiten hat und so wird das Visitziel nicht erreicht, weil die Nutzer vom Antwortverhalten des Servers abhängen. Das Verfahren ist aber günstig für kontrollierte Messungen, da man Schwankungen unterbindet.</li>
<li><strong>Constant Arrival Rate</strong>: Hier kommen die Nutzer (arrival rate) als neue Besucher unabhängig vom Serverzustand an. Auch wenn der Server klemmt, werden neue Nutzer es trotzdem versuchen. Wenn der Server mit der Last umgehen kann, dann schwingt sich das System/der Regelkreis ein &#8211; man braucht eine Nutzeranzahl X (entsprechend der Berechnung z.B. 4081). Sollte der Server Probleme haben, dann erhöht sich die Nutzeranzahl automatisch bis zu einem Wert X + n (z.B. insgesamt 10.000 Nutzer). Das heisst, man braucht im besten Fall nur 4081 Nutzer, aber wenn der Server sich unerwartet verhält, werden bis zu 10.000 Nutzern aktiviert. Damit testet man auch gleich das Überlastverhalten.</li>
</ul>
<h3>Der Schluß</h3>
<p>Ich hoffe, der Text ist einigermaßen verständlich und der Zahlenwust ist überschaubar geblieben. Das Thema <em>Parallele Nutzer</em> (Concurrent User) nimmt teilweise schon religöse Züge an&#8230;</p>
<p>Anmerkungen sind sehr willkommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2008/11/27/parallele-nutzer-die-kunst-der-berechnung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Manchmal werden Dinge wahr&#8230;</title>
		<link>http://blog.xceptance.com/2008/11/19/manchmal-werden-dinge-wahr/</link>
		<comments>http://blog.xceptance.com/2008/11/19/manchmal-werden-dinge-wahr/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 19:45:09 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Things went wrong]]></category>
		<category><![CDATA[fehler]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=91</guid>
		<description><![CDATA[Heute ist mir beim Testen dieser Javascript-Code über den Weg gelaufen. Ich liege jetzt noch auf dem Boden. Eigentlich ist es ja eher zum Heulen, aber naja: if(8 &#60; 3) { display.setIndex(1, 8); } Aber wer weiss, manchmal werden Sachen einfach true.]]></description>
			<content:encoded><![CDATA[<p>Heute ist mir beim Testen dieser Javascript-Code über den Weg gelaufen. Ich liege jetzt noch auf dem Boden. Eigentlich ist es ja eher zum Heulen, aber naja:</p>
<pre id="line889">if(8 &lt; 3)
{
    display.setIndex(1, 8);
}</pre>
<p>Aber wer weiss, manchmal werden Sachen einfach <em>true</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2008/11/19/manchmal-werden-dinge-wahr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hammerhead &#8211; Firefox Plugin</title>
		<link>http://blog.xceptance.com/2008/10/01/hammerhead-firefox-plugin/</link>
		<comments>http://blog.xceptance.com/2008/10/01/hammerhead-firefox-plugin/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 18:57:32 +0000</pubDate>
		<dc:creator>Rene</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XLT]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.xceptance.de/?p=42</guid>
		<description><![CDATA[Ab sofort gibt es Hammerhead als neues und nützliches Firefox/Firebug-Plugin. Hammerhead misst die Ladezeit einer Webseite und zeigt sie übersichtlich in der Browser-Statusbar an. Zusätzlich erlaubt das Plugin ein Browser-Cachemanagement, um die Messungen zu verbessern bzw. Cache-Einflüsse auszuschliessen.]]></description>
			<content:encoded><![CDATA[<p><a href="http://stevesouders.com/hammerhead/"><img class="alignleft size-full wp-image-43" style="float: left;" title="Hammerhead Icon" src="http://blog.xceptance.de/wp-content/uploads/2008/10/hammerhead-icon-52x52.png" alt="" width="52" height="52" /></a></p>
<p>Ab sofort gibt es <a href="http://www.stevesouders.com/blog/2008/09/30/hammerhead-moving-performance-testing-upstream/">Hammerhead</a> als neues und nützliches Firefox/Firebug-Plugin. Hammerhead misst die Ladezeit einer Webseite und zeigt sie übersichtlich in der Browser-Statusbar an. Zusätzlich erlaubt das Plugin ein Browser-Cachemanagement, um die Messungen zu verbessern bzw. Cache-Einflüsse auszuschliessen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xceptance.com/2008/10/01/hammerhead-firefox-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

