contract testing - amazon s3 · testing beyond borders - separate codebases - individual...

Post on 02-Jun-2020

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Contract testing-

Verification across service boundaries

1

Who am I?Peter Czibik@peteyycz

github.com/peteyycz

- Nerd - Senior Node JS developer- Linux enthusiast- Lover of programming

languages- Generally a nice guy

2

We help companies succeed with microservices3

Who here works with microservices?4

Everyone loves microservices5

A sad story of Atlassian- Two independent services: Payment and

Users

6

A sad story of Atlassian- Two independent services: Payment and

Users

7

A sad story of Atlassian- Changing a single letter in a json response

{

“user”: [ … ]

}

{

“users”: [ … ]

}

8

9

There’s no worse thing than not letting users pay.

How can we avoid problems like that?

10

11

Everyone loves microservices12

What kind of tests?

13

Testing- Unit tests- Integration tests- End-to-end tests

14

Those are not enough.

15

16

Testing beyond borders- Separate codebases- Individual deployments- Multiple programming languages

17

Testing beyond borders

18

Testing beyond borders

19

These concepts apply to both worlds.

20

Solution A

21

Mocking- Light on resources- No data pollution- Spares maintenance cost- Points out issues quickly- Idempotent- Not trustworthy

22

Solution B

23

Using an instance of the upstream service- Hard to use other team’s code- Trustworthy- Expensive- Non-Idempotent

24

Wrap up

- Idempotent- Light on resources- Cheap ($$$ and code)- CI compatible- Not trustworthy

- Non-Idempotent- Resource heavy- Expensive ($$$ and code)- Not CI compatible- Trustworthy

25

Mocking Extra instancevs.

Solution C

26

C for Contract

Contract ( ) Testing- A contract defines a fix interface ( ) between two parties- Both parties use this definition to test

27

Testing

28

- Uses real data- No extra infrastructure cost- Fast- Easy to scale- Quick setup- Stable- Reliable

Testing- Unit tests- Integration tests- End-to-end tests

29

Consumer Driven TestingImplementation steps:

1. Client makes expectations2. Client uses these expectations to test3. Serialize expectations to language independent format4. Transfer expectations to server5. Server uses those expectations to test

30

Meet Pact31

Pact- Implementation of a Consumer Driven Test Suite- JSON (language independent)- Libraries already exist in multiple languages

- .NET- JVM (Java & Scala)- Javascript

32

33

Everyone stop.

It’s demo time!

34

Thank you for your attention

35

¿Questions?

top related