Automated integration tests for ajax applications (с. карпушин, auriga)
-
Upload
mobile-developer-day -
Category
Technology
-
view
756 -
download
0
Transcript of Automated integration tests for ajax applications (с. карпушин, auriga)
![Page 1: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/1.jpg)
DEVELOPER GARAGE 2012April 17, Nizhny Novgorod
Automated integration tests for AJAX applications
Overview
![Page 2: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/2.jpg)
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?
![Page 3: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/3.jpg)
3
Automated integration tests for AJAX applications
Agenda
•Motivation
•Challenges
•Solutions & tricks
•Experience
•Conclusion
![Page 4: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/4.jpg)
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
![Page 5: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/5.jpg)
5
Automated integration tests for AJAX applications
Motivation – issues
•Manual testing is slow
•Hard to determine guilty commit
![Page 6: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/6.jpg)
6
Automated integration tests for AJAX applications
Reliability at any moment
Worst case is:
The goal is:
![Page 7: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/7.jpg)
7
Automated integration tests for AJAX applications
Automated tests for AJAX
web-applications
![Page 8: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/8.jpg)
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
![Page 9: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/9.jpg)
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
![Page 10: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/10.jpg)
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
![Page 11: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/11.jpg)
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
![Page 12: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/12.jpg)
12
Automated integration tests for AJAX applications
Solutions
Challenge
•Requires full-featured container
•Requires new approach (API)
Solution
•Use Selenium, jWebUnit
![Page 13: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/13.jpg)
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
![Page 14: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/14.jpg)
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)
![Page 15: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/15.jpg)
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
![Page 16: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/16.jpg)
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
![Page 17: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/17.jpg)
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
![Page 18: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/18.jpg)
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, jWebUnitjUnit-style tests
![Page 19: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/19.jpg)
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')]");
![Page 20: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/20.jpg)
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
![Page 21: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/21.jpg)
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
![Page 22: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/22.jpg)
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("btn-add-chart”); WebElement elm = driver.findElement(By.id("btn-add-chart")); click(elm); Alert alert = getAlert(); alert.sendKeys(newChartName); alert.dismiss(); waitInvAjax();
![Page 23: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/23.jpg)
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();
![Page 24: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/24.jpg)
24
Automated integration tests for AJAX applications
Experience
Implement Fix bugs Manually test
Write auto-test
total spent0
5
10
15
20
25
BeforeAfter
Time spent. Grouped by task type
![Page 25: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/25.jpg)
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!
![Page 26: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/26.jpg)
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
![Page 27: Automated integration tests for ajax applications (с. карпушин, auriga)](https://reader035.fdocuments.us/reader035/viewer/2022081514/558c9495d8b42a13258b459e/html5/thumbnails/27.jpg)
27
Automated integration tests for AJAX applications
Contacts
Thank You!