a guided tour of test automation - idia computing, llcidiacomputing.com/pub/guided tour of test...

16
George Dinwiddie @gdinwiddie My slides are available for you at: A Guided Tour of Test Automation George Dinwiddie http://idiacomputing.com/publications.html

Upload: others

Post on 29-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

My slides are available for you at:

A Guided Tour of Test Automation George Dinwiddie

http://idiacomputing.com/publications.html

Page 2: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

A “Test,” Check, or Scenario

Arrange Act Assert

Given When Then

Page 3: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

“Arrange” – “Given”

•  The preconditions for the interaction with the system • What needs to be true before we can check this bit of functionality? •  In manual testing, this is often the end state of previous interactions,

to save the tester work •  In test automation, this is preferred to be an independent setup of

known conditions

Page 4: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

“Act” – “When”

•  The triggering interaction of the test • How do we make the system do the behavior we’re testing? •  In manual testing, this is almost always necessarily through the User

Interface (UI) •  In test automation, this can be through the UI, through an Application

Program Interface (API) that the UI calls, directly to code within the system, or any means that is accessible

Page 5: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

“Assert” -- “Then”

•  The postconditions for the interaction with the system • How can we verify that the action performed correctly? •  In manual testing, this may require many steps with the application UI

or other tool •  In test automation, this can be through the UI, through an API, directly

to code within the system, directly to a database where results are stored, or any means that is accessible

Page 6: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Examples

@Test Public void ensureACoinAddsTimeToAnExpiredMeter() {

ParkingMeter parkingMeter = new ParkingMeter(); parkingMeter.reset(); parkingMeter.acceptQuarter(); assertEquals(15, parkingMeter.getMinutesRemaining());

}

Scenario: A coin adds time to an expired meter Given the parking meter shows no time remaining When a quarter is inserted into the slot Then the parking meter shows 15 minutes remaining

JUnit example

Cucumber example

Arrange

Act

Assert

Page 7: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Connections to System Under Test

Arrange Act Assert

Given When Then

System Under Test

System Context

Page 8: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Cucumber Step Definitions

public class ParkingMeterStepDefinitions { private ParkingMeter systemUnderTest = new ParkingMeter();

@Given(“the parking meter shows no time remaining") public void the_parking_meter_shows_no_time_remaining() throws Throwable { systemUnderTest.reset(); }

@When(“a quarter is inserted into the slot") public void a_quarter_is_inserted_into_the_slot() throws Throwable { systemUnderTest.acceptQuarter(); }

@Then(“the parking meter shows {int} minutes remaining") public void the_parking_meter_shows_minutes_remaining(int minutes) throws Throwable { assertEquals(minutes, systemUnderTest.getMinutesRemaining()); } }

used by Cucumber-JVM example to connect to system under test

Page 9: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Connecting to the System Under Test

JUnit test (code) Cucumber Step Definition (code)

Cucumber Scenario (gherkin)

System Under Test

“Helper” code

External Client (e.g., browser, tapsterbot)

Client Driver (e.g. Selenium) Direct Driver

(e.g. HtmlUnit)

System Context (e.g. database)

Driver (e.g. DbUnit)

System Abstraction (e.g. PageObject)

Interaction Abstraction (e.g. ScreenPlay) “Golden” Data

(for setup or comparison)

See https://leanpub.com/EvolutionaryAnatomy/

Page 10: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Protection in Depth

• Unit Tests • Adapter Tests • Subsystem Tests •  Integration Tests • Below-The-GUI • GUI Tests • Exploratory Tests

Page 11: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Test Suite or Feature

System Under Test

System Context

Page 12: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Test Runner

•  All the tests •  Hierarchies of tests in file system •  Groups of tests by named tag

Test Runner

~ Finds & runs

the tests

System Under Test

System Context

Page 13: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Reporting Results

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Arrange Act Assert

Given When Then

Test Runner

~ Finds & runs

the tests

Test Results Report

System Under Test

System Context

Page 14: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Assertion Libraries

Java •  JUnit Assert •  Hamcrest •  AssertJ •  ApprovalTests.Java

.NET •  NSpec Assertions •  Fluent Assertions •  Shouldly •  NFluent •  ApprovalTests.Net Javascript

•  Node.js Assert •  Chai •  should.js •  ApprovalTests.NodeJS

PHP •  PHPUnit Assert •  Leo

and many others

Page 15: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie

Assertion Styles of Expression •  JUnit Assert assertEquals(15, parkingMeter.getMinutesRemaining()); •  TestNG Assert assertEquals(parkingMeter.getMinutesRemaining(), 15); •  Hamcrest Java assertThat(parkingMeter.getMinutesRemaining(), equalTo(15); •  AssertJ assertThat(parkingMeter.getMinutesRemaining()).isEqualTo(15); •  Oleaster-Matcher expect(parkingMeter.getMinutesRemaining()).toEqual(15);

Consider the way failures are reported, too.

Page 16: A Guided Tour of Test Automation - iDIA Computing, LLCidiacomputing.com/pub/Guided Tour of Test Automation-AgileTD201… · • In manual testing, this may require many steps with

George Dinwiddie @gdinwiddie