automated integration tests for ajax...
TRANSCRIPT
![Page 1: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/1.jpg)
1
Automated integration tests for AJAX applications
CEE-SECR 2011October 31 – November 3, Moscow
Automated integration tests for AJAX applications
Overview
![Page 2: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/2.jpg)
2
Automated integration tests for AJAX applicationsJustification
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/3.jpg)
3
Automated integration tests for AJAX applicationsAgenda
•Motivation
•Challenges
•Solutions & tricks
•Experience
•Conclusion
![Page 4: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/4.jpg)
4
Automated integration tests for AJAX applicationsMotivation – 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/5.jpg)
5
Automated integration tests for AJAX applicationsMotivation – issues
•Manual testing is slow
•Hard to determine guilty commit
![Page 6: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/6.jpg)
6
Automated integration tests for AJAX applicationsReliability at any moment
Worst case is:
The goal is:
![Page 7: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/7.jpg)
7
Automated integration tests for AJAX applications
Automated tests for AJAX
web-applications
![Page 8: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/8.jpg)
8
Automated integration tests for AJAX applicationsChallenges - 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/9.jpg)
9
Automated integration tests for AJAX applicationsChallenges - II
•Asynchronous behavior
•Tricky to configure Hudson/Jenkins
•Complicated staging environment configuration
•Lack of experienced QA engineers
![Page 10: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/10.jpg)
10
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/11.jpg)
11
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/12.jpg)
12
Automated integration tests for AJAX applicationsSolutions
Challenge
•Requires full-featured container
•Requires new approach (API)
Solution
•Use Selenium, jWebUnit
![Page 13: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/13.jpg)
13
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/14.jpg)
14
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/15.jpg)
15
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/16.jpg)
16
Automated integration tests for AJAX applicationsSolutions
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/17.jpg)
17
Automated integration tests for AJAX applicationsExperience
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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/19.jpg)
19
Automated integration tests for AJAX applicationsSource 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/22.jpg)
22
Automated integration tests for AJAX applicationsSource 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();
![Page 23: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/23.jpg)
23
Automated integration tests for AJAX applicationsSource 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/24.jpg)
24
Automated integration tests for AJAX applicationsExperience
Implement Manually test total spent0
5
10
15
20
25
BeforeAfter
Time spent. Grouped by task type
![Page 25: Automated integration tests for AJAX applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/25.jpg)
25
Automated integration tests for AJAX applicationsConclusion & 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/26.jpg)
26
Automated integration tests for AJAX applicationsAuriga 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 applications2011.secrus.org/2011/md/karpushin-presentation.pdf•Manual testing is slow ... Don’t let user story overstep the sprint! 26 Auriga](https://reader033.vdocument.in/reader033/viewer/2022060821/6099e6f55423f6197b71702f/html5/thumbnails/27.jpg)
27
Automated integration tests for AJAX applicationsContacts
Thank You!