Test automation 3
-
Upload
michael-barker -
Category
Software
-
view
209 -
download
1
description
Transcript of Test automation 3
![Page 1: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/1.jpg)
7 Years of Test Automation
!
@mikeb2701
![Page 2: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/2.jpg)
Assumptions
• Testing is important
• Automating testing is important
![Page 3: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/3.jpg)
Types of tests• Static Analysis
• Unit Testing
• Integration Testing
• Acceptance Testing!
• Performance Testing
• Testing in Live
• Exploratory Testing
![Page 4: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/4.jpg)
![Page 5: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/5.jpg)
The acceptance test suite as a whole both verifies that the application delivers the business value and guards against regressions or defects that break preexisting functions of the application.
— Humble, Farley, Continuous Delivery, 2010, Chapter 8.
![Page 6: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/6.jpg)
An acceptance test may only drive and assert behaviour in the system through interfaces available to the system’s users.
![Page 7: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/7.jpg)
Writing Acceptance Tests
![Page 8: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/8.jpg)
@RunWith(AcceptanceTestRunner.class)@Multithreaded@AcceptanceTest(id = 29, flavour = {Flavour.PLACE_ORDER, Flavour.API})public class PlaceOrderAcceptanceTest extends DslTestCase {! @Before public void beforeEveryTest() {! adminAPI.createInstrument("name: instrument”, "orderQuantityIncrement: 0.1”,…); registrationAPI.createUser("user", "balance: 100000"); mtfMemberAPI.createMtfMemberAndFixSession("marketMaker"); publicAPI.login("user"); mtfFixAPI.login(“marketMaker"); } // end! @Test public void shouldRejectOrderIfNotLoggedIn() { publicAPI.logout(); publicAPI.placeOrder(“instrument", "side: buy", "quantity: 1.2”, "timeInForce: ImmediateOrCancel”, "unauthorised: true");!
![Page 9: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/9.jpg)
@RunWith(AcceptanceTestRunner.class)@Multithreaded@AcceptanceTest(id = 29, flavour = {Flavour.PLACE_ORDER, Flavour.API})public class PlaceOrderAcceptanceTest extends DslTestCase {! @Before public void beforeEveryTest() {! adminAPI.createInstrument("name: instrument”, "orderQuantityIncrement: 0.1”,…); registrationAPI.createUser("user", "balance: 100000"); mtfMemberAPI.createMtfMemberAndFixSession("marketMaker"); publicAPI.login("user"); mtfFixAPI.login(“marketMaker"); } // end! @Test public void shouldRejectOrderIfNotLoggedIn() { publicAPI.logout(); publicAPI.placeOrder(“instrument", "side: buy", "quantity: 1.2”, "timeInForce: ImmediateOrCancel”, "unauthorised: true");!
![Page 10: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/10.jpg)
@RunWith(AcceptanceTestRunner.class)@Multithreaded@AcceptanceTest(id = 29, flavour = {Flavour.PLACE_ORDER, Flavour.API})public class PlaceOrderAcceptanceTest extends DslTestCase {! @Before public void beforeEveryTest() {! adminAPI.createInstrument("name: instrument”, "orderQuantityIncrement: 0.1”,…); registrationAPI.createUser("user", "balance: 100000"); mtfMemberAPI.createMtfMemberAndFixSession("marketMaker"); publicAPI.login("user"); mtfFixAPI.login(“marketMaker"); } // end! @Test public void shouldRejectOrderIfNotLoggedIn() { publicAPI.logout(); publicAPI.placeOrder(“instrument", "side: buy", "quantity: 1.2”, "timeInForce: ImmediateOrCancel”, "unauthorised: true");!
![Page 11: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/11.jpg)
@RunWith(AcceptanceTestRunner.class)@Multithreaded@AcceptanceTest(id = 29, flavour = {Flavour.PLACE_ORDER, Flavour.API})public class PlaceOrderAcceptanceTest extends DslTestCase {! @Before public void beforeEveryTest() {! adminAPI.createInstrument("name: instrument”, "orderQuantityIncrement: 0.1”,…); registrationAPI.createUser("user", "balance: 100000"); mtfMemberAPI.createMtfMemberAndFixSession("marketMaker"); publicAPI.login("user"); mtfFixAPI.login(“marketMaker"); } // end! @Test public void shouldRejectOrderIfNotLoggedIn() { publicAPI.logout(); publicAPI.placeOrder(“instrument", "side: buy", "quantity: 1.2”, "timeInForce: ImmediateOrCancel”, "unauthorised: true");!
![Page 12: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/12.jpg)
@RunWith(AcceptanceTestRunner.class)@Multithreaded@AcceptanceTest(id = 29, flavour = {Flavour.PLACE_ORDER, Flavour.API})public class PlaceOrderAcceptanceTest extends DslTestCase {! @Before public void beforeEveryTest() {! adminAPI.createInstrument("name: instrument”, "orderQuantityIncrement: 0.1”,…); registrationAPI.createUser("user", "balance: 100000"); mtfMemberAPI.createMtfMemberAndFixSession("marketMaker"); publicAPI.login("user"); mtfFixAPI.login(“marketMaker"); } // end! @Test public void shouldRejectOrderIfNotLoggedIn() { publicAPI.logout(); publicAPI.placeOrder(“instrument", "side: buy", "quantity: 1.2”, "timeInForce: ImmediateOrCancel”, "unauthorised: true");!
![Page 13: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/13.jpg)
DSL
PublicAPI
TradingUI
AdminAPI
Test
MtfMemberAPI
LoginPanelDriver
Selenium
BalancesPanelDriver
InstrumentPanelDriver
JavaAPIDriver
AdminAPIDriver
MtfFixDriver
XML/HTTP
QuickFIX
Drivers
![Page 14: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/14.jpg)
Time Travel
![Page 15: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/15.jpg)
ServiceService
ServiceService
Service
TimeMachine Test
Time Travel To
Time Delta Get CurrentTime
![Page 16: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/16.jpg)
@RunWith(AcceptanceTestRunner.class)@AcceptanceTest(id = 5194, flavour = {Flavour.PLACE_ORDER, Flavour.API})@Multithreaded(tardis = true)public class CancelAndReplaceAcceptanceTest extends DslTestCase{ @Before public void setUp() { dsl.forceToUtcTimeZone(); dsl.enableTimeMachine();! dsl.createTimePoint("name: origin”, "value: <next weekday>"); dsl.createTimePoint("name: marketOpen", "value: origin plus 1 weekdayCalendarOpenOffset”);! dsl.waitUntil("marketOpen");
![Page 17: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/17.jpg)
Pro-Tip:
Isolate as much as possible
![Page 19: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/19.jpg)
Acceptance Testing (Running)
![Page 20: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/20.jpg)
RTAParallel
Sequential
Sequential
Sequential
RTA
RTA
RTA
Scotty RomeroServer
Jenkins
![Page 21: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/21.jpg)
![Page 22: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/22.jpg)
![Page 24: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/24.jpg)
Sources of Intermittency
• Bad code (under test)
• Bad test
• Environmental
![Page 25: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/25.jpg)
Just Fix It!
![Page 26: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/26.jpg)
![Page 27: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/27.jpg)
![Page 28: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/28.jpg)
![Page 29: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/29.jpg)
![Page 30: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/30.jpg)
![Page 31: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/31.jpg)
Acceptance Test DB
![Page 32: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/32.jpg)
![Page 33: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/33.jpg)
![Page 34: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/34.jpg)
Wrap-Up
•Write them well •Run them often •Keep them green
![Page 35: Test automation 3](https://reader034.fdocuments.net/reader034/viewer/2022052215/5566244cd8b42a61238b4de7/html5/thumbnails/35.jpg)
Thank you
Q&A