SlideShare une entreprise Scribd logo
1  sur  27
Automated integration tests for
AJAX applications

Overview

DEVELOPER GARAGE 2012
April 17, Nizhny Novgorod
Justification

 Who is part of development team?

Who is using …
 automated integration (functional) testing
 unit-testing
 manual testing
… to track quality?

 Why or how?


                                               2
Agenda


•Motivation
•Challenges
•Solutions & tricks
•Experience
•Conclusion


                      3
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




                                             4
Motivation – issues


•Manual testing is slow
•Hard to determine guilty commit




                                   5
Reliability at any moment

Worst case is:




The goal is:




                             6
Automated tests for AJAX
    web-applications




                           7
Challenges - I

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




                                             8
Challenges - II

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




                                                 9
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




                                                10
Solutions

Challenges
• Complicated staging environment configuration
Solution
• Test driven application architecture – planning in advance is
  a key
• Use IoC based approach for applications




                                                                  11
Solutions

Challenge
•Requires full-featured container
•Requires new approach (API)
Solution
•Use Selenium, jWebUnit




                                    12
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




                                                         13
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)




                                                      14
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




                                                               15
Solutions



Challenge
•Asynchronous behavior
Solution
•Use wait() approach
•Use Thread.sleep() after each action
•Be aware of DOM inconsistency


                                        16
Experience


Our experience with AJAX apps
 testing:
•GWT application (100% AJAX)
 •GWTTestCase is not recommended for
  functional testing

•Regular WEB 2.0
 application

                                       17
The architecture




                            Server-side running in
                              test environment


                                        AJAX


    Test Cases           HTML + JavaScript container
     Test Cases
      Test Case              running client-side

     jUnit-style tests               Selenium, jWebUnit




                                                          18
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')]");




                                                                    19
Source code example (jWebUnit) – 2/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')]");




                                                                    20
Source code example (jWebUnit) – 3/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')]");




                                                                    21
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("btn-add-chart”);
        WebElement elm = driver.findElement(By.id("btn-add-chart"));
        click(elm);

        Alert alert = getAlert();
        alert.sendKeys(newChartName);
        alert.dismiss();
        waitInvAjax();




                                                                       22
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();




                                                                       23
Experience

Time spent. Grouped by task type

25
20
15
10
                                   Before
  5
                                   After
  0




                                      24
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!
                                             25
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   -   Technology (s/w and h/w)
    -   Mobile                   -   Finance
    -   Document Management      -   Healthcare
    -   Portals                  -   Telecom
    -   Social Web               -   Logistics
    -   Media and Web            -   Government
                                 -   Security


                                                                26
Contacts




              Thank You!

      Sergey.Karpushin@auriga.com




                                    27

Contenu connexe

Tendances

Alliance2011 goldcoast Farid
Alliance2011 goldcoast FaridAlliance2011 goldcoast Farid
Alliance2011 goldcoast Farid
Farid Vaswani
 

Tendances (20)

Alliance2011 goldcoast Farid
Alliance2011 goldcoast FaridAlliance2011 goldcoast Farid
Alliance2011 goldcoast Farid
 
Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop Applications
 
San Jose Selenium Meet-up PushToTest TestMaker Presentation
San Jose Selenium Meet-up PushToTest TestMaker PresentationSan Jose Selenium Meet-up PushToTest TestMaker Presentation
San Jose Selenium Meet-up PushToTest TestMaker Presentation
 
Implementing Quality on a Java Project
Implementing Quality on a Java ProjectImplementing Quality on a Java Project
Implementing Quality on a Java Project
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
 
081107 Sammy Eclipse Summit2
081107   Sammy   Eclipse Summit2081107   Sammy   Eclipse Summit2
081107 Sammy Eclipse Summit2
 
Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013
 
JavaFX Pitfalls
JavaFX PitfallsJavaFX Pitfalls
JavaFX Pitfalls
 
Improving the Quality of Existing Software - DevIntersection April 2016
Improving the Quality of Existing Software - DevIntersection April 2016Improving the Quality of Existing Software - DevIntersection April 2016
Improving the Quality of Existing Software - DevIntersection April 2016
 
Extracting Plugins And Gems From Rails Apps
Extracting Plugins And Gems From Rails AppsExtracting Plugins And Gems From Rails Apps
Extracting Plugins And Gems From Rails Apps
 
Cnc scala-presentation
Cnc scala-presentationCnc scala-presentation
Cnc scala-presentation
 
Advanced Selenium Workshop
Advanced Selenium WorkshopAdvanced Selenium Workshop
Advanced Selenium Workshop
 
Easy tests with Selenide and Easyb
Easy tests with Selenide and EasybEasy tests with Selenide and Easyb
Easy tests with Selenide and Easyb
 
DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)
 
1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
 
Test
TestTest
Test
 
Model-Based Testing: Theory and Practice. Keynote @ MoTiP (ISSRE) 2012.
Model-Based Testing: Theory and Practice. Keynote @ MoTiP (ISSRE) 2012.Model-Based Testing: Theory and Practice. Keynote @ MoTiP (ISSRE) 2012.
Model-Based Testing: Theory and Practice. Keynote @ MoTiP (ISSRE) 2012.
 
Grails 1.1 Testing - Unit, Integration & Functional
Grails 1.1 Testing - Unit, Integration & FunctionalGrails 1.1 Testing - Unit, Integration & Functional
Grails 1.1 Testing - Unit, Integration & Functional
 
Testing untestable code - DPC10
Testing untestable code - DPC10Testing untestable code - DPC10
Testing untestable code - DPC10
 

Similaire à Automated integration tests for ajax applications (с. карпушин, auriga)

Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
Droidcon Berlin
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability
drewz lin
 

Similaire à Automated integration tests for ajax applications (с. карпушин, auriga) (20)

Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"
 
Testing in FrontEnd World by Nikita Galkin
Testing in FrontEnd World by Nikita GalkinTesting in FrontEnd World by Nikita Galkin
Testing in FrontEnd World by Nikita Galkin
 
Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
 
Automated acceptance test
Automated acceptance testAutomated acceptance test
Automated acceptance test
 
Android Unit Test
Android Unit TestAndroid Unit Test
Android Unit Test
 
Lecture (Software Testing).pptx
Lecture (Software Testing).pptxLecture (Software Testing).pptx
Lecture (Software Testing).pptx
 
Unit tests and TDD
Unit tests and TDDUnit tests and TDD
Unit tests and TDD
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability
 
Implementing quality in Java projects
Implementing quality in Java projectsImplementing quality in Java projects
Implementing quality in Java projects
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NET
 
Amin Milani Fard: Directed Model Inference for Testing and Analysis of Web Ap...
Amin Milani Fard: Directed Model Inference for Testing and Analysis of Web Ap...Amin Milani Fard: Directed Model Inference for Testing and Analysis of Web Ap...
Amin Milani Fard: Directed Model Inference for Testing and Analysis of Web Ap...
 
UI Testing Automation - Alex Kalinovsky - CreamTec LLC
UI Testing Automation - Alex Kalinovsky - CreamTec LLCUI Testing Automation - Alex Kalinovsky - CreamTec LLC
UI Testing Automation - Alex Kalinovsky - CreamTec LLC
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!
 
ITGM8. Всеволод Брекелов (Grid Dinamics) Component tests. let's do that!
ITGM8. Всеволод Брекелов (Grid Dinamics) Component tests. let's do that!ITGM8. Всеволод Брекелов (Grid Dinamics) Component tests. let's do that!
ITGM8. Всеволод Брекелов (Grid Dinamics) Component tests. let's do that!
 
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
 
6months industrial training in software testing, jalandhar
6months industrial training in software testing, jalandhar6months industrial training in software testing, jalandhar
6months industrial training in software testing, jalandhar
 
6 weeks summer training in software testing,ludhiana
6 weeks summer training in software testing,ludhiana6 weeks summer training in software testing,ludhiana
6 weeks summer training in software testing,ludhiana
 
6 weeks summer training in software testing,jalandhar
6 weeks summer training in software testing,jalandhar6 weeks summer training in software testing,jalandhar
6 weeks summer training in software testing,jalandhar
 
6months industrial training in software testing, ludhiana
6months industrial training in software testing, ludhiana6months industrial training in software testing, ludhiana
6months industrial training in software testing, ludhiana
 
Operating a High Velocity Large Organization with Spring Cloud Microservices
Operating a High Velocity Large Organization with Spring Cloud MicroservicesOperating a High Velocity Large Organization with Spring Cloud Microservices
Operating a High Velocity Large Organization with Spring Cloud Microservices
 

Plus de Mobile Developer Day

Dmitry Tarasov "Tarasov mobile" Chaos control
Dmitry Tarasov "Tarasov mobile" Chaos controlDmitry Tarasov "Tarasov mobile" Chaos control
Dmitry Tarasov "Tarasov mobile" Chaos control
Mobile Developer Day
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
Mobile Developer Day
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
Mobile Developer Day
 
«традиционные сми как приложения»
«традиционные сми как приложения»«традиционные сми как приложения»
«традиционные сми как приложения»
Mobile Developer Day
 
«Ip в мобильных играх», виктор залётов, herocraft
«Ip в мобильных играх», виктор залётов, herocraft«Ip в мобильных играх», виктор залётов, herocraft
«Ip в мобильных играх», виктор залётов, herocraft
Mobile Developer Day
 
«особенности проектирования I pad приложений для высших руководителей», алекс...
«особенности проектирования I pad приложений для высших руководителей», алекс...«особенности проектирования I pad приложений для высших руководителей», алекс...
«особенности проектирования I pad приложений для высших руководителей», алекс...
Mobile Developer Day
 

Plus de Mobile Developer Day (6)

Dmitry Tarasov "Tarasov mobile" Chaos control
Dmitry Tarasov "Tarasov mobile" Chaos controlDmitry Tarasov "Tarasov mobile" Chaos control
Dmitry Tarasov "Tarasov mobile" Chaos control
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
 
«традиционные сми как приложения»
«традиционные сми как приложения»«традиционные сми как приложения»
«традиционные сми как приложения»
 
«Ip в мобильных играх», виктор залётов, herocraft
«Ip в мобильных играх», виктор залётов, herocraft«Ip в мобильных играх», виктор залётов, herocraft
«Ip в мобильных играх», виктор залётов, herocraft
 
«особенности проектирования I pad приложений для высших руководителей», алекс...
«особенности проектирования I pad приложений для высших руководителей», алекс...«особенности проектирования I pad приложений для высших руководителей», алекс...
«особенности проектирования I pad приложений для высших руководителей», алекс...
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Dernier (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 

Automated integration tests for ajax applications (с. карпушин, auriga)

  • 1. Automated integration tests for AJAX applications Overview DEVELOPER GARAGE 2012 April 17, Nizhny Novgorod
  • 2. Justification  Who is part of development team? Who is using …  automated integration (functional) testing  unit-testing  manual testing … to track quality?  Why or how? 2
  • 4. 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 4
  • 5. Motivation – issues •Manual testing is slow •Hard to determine guilty commit 5
  • 6. Reliability at any moment Worst case is: The goal is: 6
  • 7. Automated tests for AJAX web-applications 7
  • 8. Challenges - I •Recent framework compared to unit testing •Full-featured container required •New approach (API) •Lack of tools •Relatively faster, but …. relatively slow 8
  • 9. Challenges - II •Asynchronous behavior •Tricky to configure Hudson/Jenkins •Complicated staging environment configuration •Lack of experienced QA engineers 9
  • 10. 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 10
  • 11. Solutions Challenges • Complicated staging environment configuration Solution • Test driven application architecture – planning in advance is a key • Use IoC based approach for applications 11
  • 12. Solutions Challenge •Requires full-featured container •Requires new approach (API) Solution •Use Selenium, jWebUnit 12
  • 13. 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 13
  • 14. 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) 14
  • 15. 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 15
  • 16. Solutions Challenge •Asynchronous behavior Solution •Use wait() approach •Use Thread.sleep() after each action •Be aware of DOM inconsistency 16
  • 17. Experience Our experience with AJAX apps testing: •GWT application (100% AJAX) •GWTTestCase is not recommended for functional testing •Regular WEB 2.0 application 17
  • 18. The architecture Server-side running in test environment AJAX Test Cases HTML + JavaScript container Test Cases Test Case running client-side jUnit-style tests Selenium, jWebUnit 18
  • 19. 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')]"); 19
  • 20. Source code example (jWebUnit) – 2/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')]"); 20
  • 21. Source code example (jWebUnit) – 3/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')]"); 21
  • 22. 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("btn-add-chart”); WebElement elm = driver.findElement(By.id("btn-add-chart")); click(elm); Alert alert = getAlert(); alert.sendKeys(newChartName); alert.dismiss(); waitInvAjax(); 22
  • 23. 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(); 23
  • 24. Experience Time spent. Grouped by task type 25 20 15 10 Before 5 After 0 24
  • 25. 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! 25
  • 26. 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 - Technology (s/w and h/w) - Mobile - Finance - Document Management - Healthcare - Portals - Telecom - Social Web - Logistics - Media and Web - Government - Security 26
  • 27. Contacts Thank You! Sergey.Karpushin@auriga.com 27