Web Testing With Selenium and JUnit

advertisement
WEB TESTING WITH
SELENIUM AND
JUNIT
David Ross Drake - SDET
06/21/11
What is Selenium?
Selenium
– Portable software testing framework for web
applications
• Selenium IDE
• Selenium Client Drivers
• Selenium RC
• Selenium Grid
2
06/21/11
Why use Selenium?
Why automated testing?
• Speed
• Repeatability
• Reliability
• Cost
• Requalification (security patches)
• Verisimilitude (vs HTMLUnit)
3
06/21/11
DEMONSTRATION:
SELENIUM IDE
Recording and playing back a test with Selenium IDE
4
06/21/11
Selenium Locators
• id – fastest method
• name
• link
• dom
• css
• xpath – slowest method
5
06/21/11
DEMONSTRATION:
EXPORTING TESTS
Exporting tests from Selenium IDE into JUnit and running
using Selenium RC
6
06/21/11
7
Selenium RC
Image: www.seleniumhq.org
06/21/11
Selenium Challenges
• Web app latency can cause tests to fail waiting on
page events
• Tests tend to lock in web pages, slowing iterative
development
• Selenium core is JavaScript based
• Not all browsers interpret the same way
• Can't perform cross-domain testing
• Testing secure connections is tricky, and often browser
specific
• Execution is slow (compared to most unit tests)
• Formatting problems are untested
8
06/21/11
Handling Event Latency
Example: An event is triggered on the page when a user enters invalid data.
public static void waitForPageValidation(DefaultSelenium selenium,
String id) throws InterruptedException {
for (int second = 0;; second++) {
if (second >= 5) {
fail("timeout waiting for event);
}
try {
if (selenium.isVisible(id)) {
break;
}
}
catch (Exception e) {}
Thread.sleep(1000);
}
}
9
06/21/11
Managing Change
Separate page content used in tests from actual test
logic. Most frequently used content:
• Page titles
• Field locators (ids, names)
10
06/21/11
11
Selenium 2
Advantages
Disadvantages
No Selenium RC installation
No final version released
(summer 2011)
Cross-domain testing
capabilities
Limited backwards
compatibility
Object-oriented API
Smaller number of supported
browsers
Mobile browser testing
06/21/11
Speeding Up Selenium
• Avoid xpath; have id attributes for all tested fields
• Reuse browser sessions (although this can cause
subsequent tests to fail if the session fails)
• Test local builds to reduce network latency
• Avoid using multi-page test flows for atomic tests
• Use parameterized tests to test multiple browsers at
once
• Parallelize tests to run multiple test classes at once
• Use cloud-based testing services
12
06/21/11
13
Testing Tools in Sauce Labs
• Sauce Scout – Manual testing using dozens of
os/browser/version combinations
• Sauce OnDemand – Automated cloud-based testing
using a drop in replacement for selenium RC
• Sauce Connect – Tunneling utility for connecting to an
application under test behind a firewall
• Sauce Builder – Selenium IDE modified to run tests
using Sauce OnDemand
06/21/11
14
Cloud-based testing in Sauce Labs
Image: www.saucelabs.com
06/21/11
DEMONSTRATION:
SAUCE LABS
Running tests using Sauce Labs and viewing the results
15
06/21/11
16
Additional Resources
http://www.seleniumhq.com - selenium docs and
downloads
http://www.saucelabs.com - cloud-based selenium
testing.
http://cargo.codehaus.org - thin wrapper for java
containers
http://ce-games.blogger.com - links to this presentation
Download