Why your se tests are so dang brittle and what to do about it
Download
1 / 45

Why Your Se Tests are So Dang Brittle… …and what to do about it - PowerPoint PPT Presentation


  • 77 Views
  • Uploaded on

Why Your Se Tests are So Dang Brittle… …and what to do about it. Patrick Wilson-Welsh Dawn Cannan. Introduction. Patrick Welsh Senior Agile Consultant Pillar Technology Group http://pillartechnology.com [email protected] http://patrickwilsonwelsh.com

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Why Your Se Tests are So Dang Brittle… …and what to do about it' - joelle


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Why your se tests are so dang brittle and what to do about it
Why Your Se Tests are So Dang Brittle……and what to do about it

Patrick Wilson-Welsh

Dawn Cannan


Introduction
Introduction

  • Patrick Welsh

  • Senior Agile Consultant

  • Pillar Technology Group

  • http://pillartechnology.com

  • [email protected]

  • http://patrickwilsonwelsh.com

  • http://coderetreat.ning.com/

  • mobile: 248 565 6130

  • twitter: patrickwelsh


PrerequisitesYou’ll need to know some stuff. To follow, you’ll need to know Selenium, Java, xpath, css, HTML, and a bit of Object Oriented Design.And, I will be gentle. 


We re here to help
We’re here to help …


How hard is it to regression test an entire enterprise web app using any web-app-GUI-black-box testing tool?


too hard: avoid



Because you are writing too many of them let me put that another way
Because you are writing are so brittle?too many of them.Let me put that another way.


You are committing too high a percentage of total test-automation and programming resources to that specific kind of automated testing. Have a plan for outgrowing that pattern.Actually, have a fairy tale:


Driving on the ice in michigan avoid it whenever you can know how to do it well
Driving on the ice in Michigan. test-automation and Avoid it whenever you can. Know how to do it well.


3 kinds of automated tests
3 kinds of automated tests test-automation and


Gui end 2 end integration story acceptance unit micro isolation
GUI test-automation and end-2-end, integration, story, acceptanceunit/micro/isolation


TCO test-automation and

% of automated testing work


Good least investment roi good most investment roi
good test-automation and : least investment/ROIgood: most investment/ROI




we often start here test-automation and


good test-automation and : easy to learn

bad: hard to learn

for good reason!


bad test-automation and : high TCO, low ROI

good: low TCO,

high ROI

But again, the price



How can we minimize the brittleness of these inherently brittle tests
How can we minimize the brittleness of these doing. That’s ok. So am I. inherently brittle tests?


Following are things that help me and my teams
Following are things that help me doing. That’s ok. So am I. and my teams.


Don’t tell me testing is “not your job” doing. That’s ok. So am I.


Don’t say programming is “not your job” doing. That’s ok. So am I.


Automated testing is doing. That’s ok. So am I. everybody’s job, because the Definition of Done is everybody’s job.Se tests are written by testers and programmers together. Period. The whole team shares sufficient testing as part of Definition of Done.


Some issues in Java Selenium RC testing: doing. That’s ok. So am I. Mixed abstraction layer logic (test + biz domain + testing framework + …)Obscure page-flow and page verification.Verifying state across multiple pages. DefaultSelenium (et al) access control.Dynamic HTML/Ajax


Example 1 doing. That’s ok. So am I. : Bad-Ole Se RC Multi-Page-FlowProcedural code for verifying that the same links show up on each of several pages. Even method extraction and custom assertions may not help as much as you need.


Se-Specific, General Guidelines : doing. That’s ok. So am I. Only use Se as last resort; play to its strengthsDon’t use Se IDE except for prototypingHand-roll Object-Oriented Se RC testsSeparate framework code & test code


A principle to consider for se testing dry test framework wet test code
A principle to consider for Se testing: doing. That’s ok. So am I. DRY test framework; “wet” test code.


src doing. That’s ok. So am I. source folder: DRY reusabilitysrc folder contains only reusable domain-specific and domain-independent classes. Domain-specific pages, panes, and common components (nav menus, etc). Domain-independent framework (page elements/controls, Selenium and jQuery façade/decorator, locator strategy code)


test source folder: one-off, wet test code doing. That’s ok. So am I. test folder contains behaviorally-organized test scenarios. Nearly all of them happy paths. Test scenarios for page flow manipulation and state verification can include quite a bit of duplication. If you prefer, extract private helper methods like “loginAndNavigateToSuchAndSuchPage()”


Specific patterns in the selenium rc patterns eclipse project
Specific Patterns in the doing. That’s ok. So am I. selenium-rc-patterns eclipse project.



  • Pattern: Reusable Selenium Singleton Facade doing. That’s ok. So am I.

  • All access to DefaultSelenium and SeleniumServer (jetty proxy) are outside test code.

  • All access to them is via singleton inside façade

  • Façade decorates DefaultSelenium with other cool stuff you need


  • Pattern: Self-Verifying, Lazy-Load Page Objects doing. That’s ok. So am I.

  • Biz-domain-specific classes wrap the behavior of specific pages in your app, in page-specific ways.

  • When you navigate to a page by clicking on a link, the matching page object gets launched, and waits until it is fully loaded by that object’s definition (a css locator).


  • Pattern: Elements that are Page Object Factories doing. That’s ok. So am I.

  • When you instantiate a DhtmlLink class, you parameterize it with the PageObject.class that you want to be launched when you click on that link.

  • This pushes page flow semantics deep into the actual link flow, emulating actual app, and keeps page flow DRY.


Remember the good old days of every browser-resident change resulting from an HTTP Response to an HTTP Request? (Sigh.)Well kiss em goodbye. We live in a dynamic, RIA world now. Ajax. Etc.Whole desktops, coming to browsers near you… except, differently!


Principles to consider for resulting from an HTTP Response to an HTTP Request? (Sigh.)testing dynamic stuff:The rendered HTML is less and less your friend.XPATH is not standard, thus not your friend. The in-memory DOM is your friend. CSS element location strategy is your friend.jQuery is your friend.


  • Pattern: CSS Element resulting from an HTTP Response to an HTTP Request? (Sigh.)locator strategies for DHTML/Ajax

  • Use id or name attributes if you got ‘em

  • Use css as a second-resort locator

  • Only use xpath as a last-resort element locator

  • Actually, forget it. Never use xpath.


  • Pattern: Using resulting from an HTTP Response to an HTTP Request? (Sigh.)jQuery to Verify Dynamic Visibility

  • Consider usingSeto inject jQuery (or some such js library) into a page, to get direct access to the DOM, not the rendered HTML, when you need

  • There will increasingly be behaviors for which jQuery, being cross-browser in a fairly standard way, is a better choice for DOM state verification than older techniques

  • jQuery support: coming to a Selenium near you?


  • Pattern: resulting from an HTTP Response to an HTTP Request? (Sigh.)Common Page Element Singletons

  • If all pages in an app have certain common elements, consider hanging a static singleton off a BasePage object.


  • Pattern: Multi-Page Rule resulting from an HTTP Response to an HTTP Request? (Sigh.)Verification

  • A MultiPageTraverser is instantiated with a rule that implements a Verifiable interface.

  • Verifiable.verify() call on each page does the right thing.


Get this resulting from an HTTP Response to an HTTP Request? (Sigh.)book...


…and this resulting from an HTTP Response to an HTTP Request? (Sigh.)book.


Q/A resulting from an HTTP Response to an HTTP Request? (Sigh.)


ad