ajax load testing concerns by eric beland

29
Ajax Load Testing Considerations Load Testing Ajax Websites

Upload: testomatix

Post on 07-Jul-2015

1.779 views

Category:

Lifestyle


1 download

TRANSCRIPT

Page 1: Ajax Load Testing Concerns By Eric Beland

Ajax Load Testing ConsiderationsLoad Testing Ajax Websites

Page 2: Ajax Load Testing Concerns By Eric Beland

Background

Eric Beland

Co-Founder, Testomatix

http://testomatix.com

[email protected]

Twitter: @testomatix

Testomatix provides full service performance testing including expert planning, scripting, and test execution. We test for you, and help you tune.

Page 3: Ajax Load Testing Concerns By Eric Beland

Testing Ajax Websites

Page 4: Ajax Load Testing Concerns By Eric Beland

Will it Scale?

What happens when people show up?

Page 5: Ajax Load Testing Concerns By Eric Beland

Testing at the HTTP Layer

Page 6: Ajax Load Testing Concerns By Eric Beland

Testing at the HTTP Layer

Advantage: Scalable - No browser

Small memory and CPU footprint

Tools: HP LoadRunner, Jmeter, Grinder, Oracle e-Load

Created by:

Recording from within the browser—browser plugins or hooks.

Intercepting requests with a proxy tool.

May be hand-scripted.

Page 7: Ajax Load Testing Concerns By Eric Beland

Challenges At the HTTP layer

Things that aren’t as smooth when simulating the browser…

Page 8: Ajax Load Testing Concerns By Eric Beland

Hard-Coded URLs

Page 9: Ajax Load Testing Concerns By Eric Beland

Hard-coded URLs

If a request is dependent on a previous Ajax request which, after a certain number of users starts failing, a real user would fail.

If you have a hard-coded the URL, your test will pass when it shouldn’t.

If an Ajax request is vital to the user interaction,

Content-checked (match against text in the HTML)

Or defined as a RegExp source for navigation

Page 10: Ajax Load Testing Concerns By Eric Beland

<div id=‘my_wizard’>

<form action=‘step2’>

• Name: <input type="text" name="name" />

• <input type="submit"/>

• </form>

• </div>

Post:

http://mysite.com/step2

name=“Jim”

<div id=‘my_wizard’>

• <form action=‘step3’>

• Name: <input type="text" email="" />

• <input type="submit"/>

• </form>

• </div>

Page 11: Ajax Load Testing Concerns By Eric Beland

Recording Issues – Is it recording?

Does your tool record AJAX traffic?

VS 2005 doesn't record Ajax calls.

Proxy-based tools tend to do well when recording Ajax.

Some proxy based recorders can’t record https traffic.

Jmeter, for example

Page 12: Ajax Load Testing Concerns By Eric Beland

Things that won’t work, at least easily

Highly JavaScript-dependent code.

Any client-server interaction that is dependent on complex client-side computation

Unless you re-implement the logic in your testing tool…

Client-side decompression

Client side JS encryption (Don’t do this. Really.)

Obfuscation

Streaming

Page 13: Ajax Load Testing Concerns By Eric Beland

Recording Issues – Ajax + REST Issues

REST (Representational State Transfer) makes use of 4 HTTP verbs

GET, POST, PUT and DELETE

Browsers do not have support for PUT and DELETE currently (HTML 5)

But it IS supported in the XMLHttpRequest implementation in all major browsers.

But, your load testing tool may not be able to record it, or replay it.

Currently (Sept. 09) the case in Oracle e-Load.

Used to be an issue in JMeter.

Likely still an issue in other tools.

Page 14: Ajax Load Testing Concerns By Eric Beland

Script Maintenance

Script recording

Unless you remember, or your testers determine every place Ajax has been added or removed from a script, you need to recreate your scripts for them to be accurate.

A “real life” example:

http://thedailywtf.com/Articles/Slowing-Time.aspx

Page 15: Ajax Load Testing Concerns By Eric Beland

Statefulness Consideration

Ajax requests may require a session cookie, or value in a cookie.

If the cookie is not configured to be updated, the request will fail.

Page 16: Ajax Load Testing Concerns By Eric Beland

Client-side JS Timestamp on Cache

Timestamps may be hard coded in your recorded posts

We have seen JavaScript caching, with timestamps which need to be updated.

Page 17: Ajax Load Testing Concerns By Eric Beland

Validate Ajax Returns

For valid testing, the return values of AJAX calls must be validated.

If they are not validated, the script may appear to work past the number of users which the application can support.

Page 18: Ajax Load Testing Concerns By Eric Beland

AutoComplete Fields

Think time between Ajax requests—users type quickly.

In order to replicate real load, and exercise any caching effectively, requests must be parameterized.

AutoComplete fields send requests key-by-key.

Parameterization may not account for this properly.

Page 19: Ajax Load Testing Concerns By Eric Beland
Page 20: Ajax Load Testing Concerns By Eric Beland

Ajax Autocomplete

Autocomplete made these requests:

• Parameterization is tricky.

• The correct way to generate the load is to make multiple requests for the parameter.

• Additionally, it looks like cp= could be a character count.

http://clients1.google.com/complete/search?hl=en&client=hp&q=a&cp=1http://clients1.google.com/complete/search?hl=en&client=hp&q=aja&cp=3http://clients1.google.com/complete/search?hl=en&client=hp&q=ajax&cp=4

Page 21: Ajax Load Testing Concerns By Eric Beland

AJAX Polling or AJAX Streaming

JavaScript which does AJAX polling in the background.

Polling interval may change, which changes the load associated with a page.

Comet (Streaming)

When added or removed, load scripts must be updated.

Page 22: Ajax Load Testing Concerns By Eric Beland

Reporting

Many tools work on the “page” model for load testing.

Ajax apps do not necessarily follow the page model, and in many cases, the application is not “working” when the AJAX functionality is not working.

Ajax timeouts must be treated as full-fledged failures.

Page 23: Ajax Load Testing Concerns By Eric Beland

AJAX Response Times

AJAX response time expectations

Not the same as page load response expectations

Ajax response times should follow UI response time rules, which have their own laws, and generally need to be faster.

A 6 second page load might be ok, but a 6 second lag between UI responses is painful

UI Responsiveness rules are pretty brutal when applied to web applications.

Page 24: Ajax Load Testing Concerns By Eric Beland

Timeouts

Choosing timeouts

Load/Scalability tests

Lower timeouts are appropriate for Ajax heavy applications.

Determine how many users you can support within acceptable-response times.

10 seconds is probably a reasonable threshold for an Ajax request.

Page 25: Ajax Load Testing Concerns By Eric Beland

AJAX/UI response time rules Excerpt from Jacob Nielsen's Usability Engineering

"The basic advice regarding response times has been about the same for almost thirty years [Miller 1968; Card et al. 1991]:

0.1 second is about the limit for having the user feel that the system is reacting instantaneously, meaning that no special feedback is necessary except to display the result.

1.0 second is about the limit for the user's flow of thought to stay uninterrupted, even though the user will notice the delay. Normally, no special feedback is necessary during delays of more than 0.1 but less than 1.0 second, but the user does lose the feeling of operating directly on the data.

10 seconds is about the limit for keeping the user's attention focused on the dialogue. For longer delays, users will want to perform other tasks while waiting for the computer to finish, so they should be given feedback indicating when the computer expects to be done. Feedback during the delay is especially important if the response time is likely to be highly variable, since users will then not know what to expect."

Page 26: Ajax Load Testing Concerns By Eric Beland

New Alternatives to HTTP Layer Testing

Browser-based load testing.

Historically, not very scalable.

Enter the cloud

The cloud makes browser based load testing scalable.

LoadStorm

Page 27: Ajax Load Testing Concerns By Eric Beland

Benefits

Script maintainability

Changes to the websites AJAX code will flow through as JavaScript is executed at test-time.

Proper handling of:

Changes

to Polling intervals

New AJAX requests

Deleted AJAX requests

Auto-complete fields

Page 28: Ajax Load Testing Concerns By Eric Beland

When to use browser-based testing

When you have an Ajax heavy or dynamic site

When you have flash or difficult-to-reproduce interactions.

When your man-hours are precious

Easier maintenance and development make it worthwhile

Generally affordable for small tests, run frequently

When you can!

Page 29: Ajax Load Testing Concerns By Eric Beland

When not to used browser-based testing

When you need to test 200,000 users.

Cost prohibitive

When you cannot expose your site to external traffic (intranet)

There are commercial load testing tools that let you run real browsers locally.

For smaller tests, this can work.