Automated integration tests for AJAX applications Overview - - PowerPoint PPT Presentation

automated integration tests for ajax applications
SMART_READER_LITE
LIVE PREVIEW

Automated integration tests for AJAX applications Overview - - PowerPoint PPT Presentation

Automated integration tests for AJAX applications Automated integration tests for AJAX applications Overview CEE-SECR 2011 October 31 November 3, Moscow 1 Justification Automated integration tests for AJAX applications Who is part of


slide-1
SLIDE 1

1

Automated integration tests for AJAX applications

CEE-SECR 2011

October 31 – November 3, Moscow

Automated integration tests for AJAX applications

Overview

slide-2
SLIDE 2

2

Automated integration tests for AJAX applications

Justification

  • Who is part of development team?

Who is using …

  • automated integration (functional) testing
  • unit-testing
  • manual testing

… to track quality?

  • Why or how?
slide-3
SLIDE 3

3

Automated integration tests for AJAX applications

Agenda

  • Motivation
  • Challenges
  • Solutions & tricks
  • Experience
  • Conclusion
slide-4
SLIDE 4

4

Automated integration tests for AJAX applications

Motivation – goals

  • Reliability of the product at any moment
  • Less time for bugs – more time for

development

  • Feel free to add new features – it’s safe
slide-5
SLIDE 5

5

Automated integration tests for AJAX applications

Motivation – issues

  • Manual testing is slow
  • Hard to determine guilty commit
slide-6
SLIDE 6

6

Automated integration tests for AJAX applications

Reliability at any moment

Worst case is: The goal is:

slide-7
SLIDE 7

7

Automated integration tests for AJAX applications

Automated tests for AJAX web-applications

slide-8
SLIDE 8

8

Automated integration tests for AJAX applications

Challenges - I

  • Recent framework compared to unit testing
  • Full-featured container required
  • New approach (API)
  • Lack of tools
  • Relatively faster, but …. relatively slow
slide-9
SLIDE 9

9

Automated integration tests for AJAX applications

Challenges - II

  • Asynchronous behavior
  • Tricky to configure Hudson/Jenkins
  • Complicated staging environment configuration
  • Lack of experienced QA engineers
slide-10
SLIDE 10

10

Automated integration tests for AJAX applications

Solutions

Challenges

  • Recent framework compared to unit testing
  • Tricky to configure Hudson/Jenkins
  • Lack of experienced QA engineers

Solution

  • Well… Everything happens for the first time
  • Research, study and teach
slide-11
SLIDE 11

11

Automated integration tests for AJAX applications

Solutions

Challenges

  • Complicated staging environment configuration

Solution

  • Test driven application architecture – planning in advance is

a key

  • Use IoC based approach for applications
slide-12
SLIDE 12

12

Automated integration tests for AJAX applications

Solutions

Challenge

  • Requires full-featured container
  • Requires new approach (API)

Solution

  • Use Selenium, jWebUnit
slide-13
SLIDE 13

13

Automated integration tests for AJAX applications

Solutions

Challenge

  • Tools… Just few of them

Solution

  • jWebUnit

−In case of simple ajax −Turn off javascript if not needed (save 30 seconds)

  • Selenium

−Need to control items visibility −Need to test against real browser

slide-14
SLIDE 14

14

Automated integration tests for AJAX applications

Solutions

Challenge

  • Relatively faster, but… relatively slow

Solution

  • Still much faster than manual tests
  • Define AllInOne suite for quick check
  • Run full set of tests on CI
  • Use distributed technologies (i.e. Selenium Grid)
slide-15
SLIDE 15

15

Automated integration tests for AJAX applications

Solutions

Challenge

  • Hard to determine guilty commit
  • Intend to add new features safely

Solution

  • Test all before commit
  • or at least -
  • Email notification from CI that commit produced regression
slide-16
SLIDE 16

16

Automated integration tests for AJAX applications

Solutions

Challenge

  • Asynchronous behavior

Solution

  • Use wait() approach
  • Use Thread.sleep() after each action
  • Be aware of DOM inconsistency
slide-17
SLIDE 17

17

Automated integration tests for AJAX applications

Experience

Our experience with AJAX apps testing:

  • GWT application (100% AJAX)
  • GWTTestCase is not recommended for

functional testing

  • Regular WEB 2.0

application

slide-18
SLIDE 18

18

Automated integration tests for AJAX applications

Test Case

The architecture

Test Cases Server-side running in test environment HTML + JavaScript container running client-side Test Cases AJAX Selenium, jWebUnit jUnit-style tests

slide-19
SLIDE 19

19

Automated integration tests for AJAX applications

Source code example (jWebUnit) – 1/3

public class TestShoppingCart extends BaseTest { @Test public void test() { beginAt("/cart/index"); tester.assertTextPresent("Your cart is empty."); tester.setScriptingEnabled(true); beginAt("/album/list?sort=albumName&max=20"); tester.assertElementPresentByXPath("//div[@class='list']"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='0 items']"); tester.clickElementByXPath("//div[@class='album- buy']/input[contains(@value,'Buy Album')]"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='1 item']"); tester.clickElementByXPath("//div[@id='cart']//a"); tester.assertElementPresentByXPath("//div[@id='ribbon-single- line']/h1[contains(., 'Shopping Cart')]");

slide-20
SLIDE 20

20

Automated integration tests for AJAX applications

public class TestShoppingCart extends BaseTest { @Test public void test() { beginAt("/cart/index"); tester.assertTextPresent("Your cart is empty."); tester.setScriptingEnabled(true); beginAt("/album/list?sort=albumName&max=20"); tester.assertElementPresentByXPath("//div[@class='list']"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='0 items']"); tester.clickElementByXPath("//div[@class='album- buy']/input[contains(@value,'Buy Album')]"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='1 item']"); tester.clickElementByXPath("//div[@id='cart']//a"); tester.assertElementPresentByXPath("//div[@id='ribbon-single- line']/h1[contains(., 'Shopping Cart')]");

Source code example (jWebUnit) – 2/3

slide-21
SLIDE 21

21

Automated integration tests for AJAX applications

public class TestShoppingCart extends BaseTest { @Test public void test() { beginAt("/cart/index"); tester.assertTextPresent("Your cart is empty."); tester.setScriptingEnabled(true); beginAt("/album/list?sort=albumName&max=20"); tester.assertElementPresentByXPath("//div[@class='list']"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='0 items']"); tester.clickElementByXPath("//div[@class='album- buy']/input[contains(@value,'Buy Album')]"); tester.assertElementPresentByXPath("//div[@id=‘c' and .='1 item']"); tester.clickElementByXPath("//div[@id='cart']//a"); tester.assertElementPresentByXPath("//div[@id='ribbon-single- line']/h1[contains(., 'Shopping Cart')]");

Source code example (jWebUnit) – 3/3

slide-22
SLIDE 22

22

Automated integration tests for AJAX applications

Source code example (Selenium) – 1/2

public class TestManageChart extends CatalogMerchTestBase { @Test public void testManageChart() throws Throwable { driver.get(baseUrl + "#top.store[1].manage_charts"); waitV(genId("btn-add-chart")); WebElement elm = driver.findElement(By.id("btn-add-chart")); click(elm); Alert alert = getAlert(); alert.sendKeys(newChartName); alert.dismiss(); waitInvAjax();

slide-23
SLIDE 23

23

Automated integration tests for AJAX applications

Source code example (Selenium) – 2/2

public class TestManageChart extends CatalogMerchTestBase { @Test public void testManageChart() throws Throwable { driver.get(baseUrl + "#top.store[1].manage_charts"); waitV("btn-add-chart"); WebElement elm = driver.findElement(By.id("btn-add-chart")); click(elm); Alert alert = getAlert(); alert.sendKeys(newChartName); alert.dismiss(); waitInvAjax();

slide-24
SLIDE 24

24

Automated integration tests for AJAX applications

Experience

Implement Manually test total spent 5 10 15 20 25 Before After Time spent. Grouped by task type

slide-25
SLIDE 25

25

Automated integration tests for AJAX applications

Conclusion & Questions

  • It’s functional testing
  • It’s worth it!

Note:

  • Write code with low TCO!
  • Perform code review!
  • Don’t let user story overstep the sprint!
slide-26
SLIDE 26

26

Automated integration tests for AJAX applications

Auriga At a Glance

  • World leader in R&D outsourcing

­ #1 Engineering Services Outsourcing (ESO) provider ­ #15 in Top-20 Global Outsourcing Vendors ­ Global Services 100 and Global Outsourcing 100 company ­ Top 10 Offshore Eastern and Central Europe ­ Top 10 Software R&D Service Providers

  • In business since 1990

­ First in Russia to do offshore software services

  • 300 employees
  • Headquartered in the U.S.

­ Incorporated in the U.S. in 1993

  • Engineering centers in

­ Russia: Moscow, Nizhny Novgorod, Rostov-on-Don ­ EU: Vilnius, Lithuania

  • Main Domains: Technologies and Verticals

­ System Level, Embedded ­ Mobile ­ Document Management ­ Portals ­ Social Web ­ Media and Web ­ Technology (s/w and h/w) ­ Finance ­ Healthcare ­ Telecom ­ Logistics ­ Government ­ Security

slide-27
SLIDE 27

27

Automated integration tests for AJAX applications

Contacts Thank You!

Sergey.Karpushin@auriga.com Arkadiy.Hachikyan@auriga.com