Most API testing is a joke. We have things that resemble Unit Tests which are really integration tests which really just wrap our personal understanding in just a bit of code. And at the end of the day, we're still not sure it works. Instead, let's flip the entire experience around and look at it from the API consumer's point of view and confirm that we're solving real problems for real users. In this talk, we'll dive into some of the benefits of Behavior Driven Development and build some examples.
5. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
6. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
7. Assumptions
• You have a technical background
• APIs are an important part of your job
• Use them on a regular basis
• Potentially build them too
• Sometimes public, sometimes private
7
8. Assumptions
• Nothing is perfect
• You make mistakes
• Your providers make mistakes
• That other team are knuckleheads
8
9. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
10. • Click Tests - someone
• Unit Tests - xUnit suite
• Integration Tests - still probably xUnit
• Web/UI Tests - Selenium, Watir, Testlio (mobile)
API Testing is Deceptive
10
13. Back to the Drawing Board
13
• SMART
• Specific, Measurable, Achievable,
Relevant, and Time-boxed
• INVEST
• Independent, Negotiable, Valuable,
Estimable, Small, Testable
14. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
15. BDD - Standard Definition
15
BDD is a synthesis and refinement
of practices stemming from
TDD and ATDD
16. BDD - Dan North
16
BDD is a second-generation, outside-
in, pull-based, multiple-stakeholder,
multiple-scale, high-automation agile
methodology. It describes a cycle
with well-defined outputs, resulting
in the delivery of working, tested
software that matters.
17. BDD - What it really means
17
Get your head out of the system!
18. BDD - What it looks like
18
As a [role], I want [feature]
so that [benefit]
19. BDD - To be more precise
19
It’s English but in the Gherkin syntax so this:
• As a [role], I want [feature] so that [benefit]
becomes a feature (or spec) structured as:
• Given [condition], when I [action] then [result]
20. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
23. So let’s do this!
https://github.com/caseysoftware/is-your-API-misbehaving *
* I don’t like Github as an organization but didn’t
have time to convert all of this and fully test it
with Gitlab which is a better product and company.
24. Using Github…
24
• Let’s start with search
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• simple-search-step-{n}-{description}
25. Using Github…
25
• Now, let’s get the issues for a repository
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• issues-list-step-{n}-{description}
26. Using Github…
26
• Now, let’s get all of your repositories
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• authentication
• myrepos-step-{n}-{description}
27. Using Github…
27
• Now, let’s watch a repository
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• watch-repo-step-{n}-{description}
28. Using Github…
28
• Now, let’s fork a repository
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• watch-repo-fork-step-{n}-{description}
29. Using Github…
29
• Now, let’s create a repository
• Write the story
• Add the stubbed methods
• Write the methods
• Validate the results
• create-repo-step-{n}-{description}
30. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…
31. And now what?
31
• Write the feature
• Refactor to reuse steps when possible
• Add the missing bits
• GOAL:
• We should be writing less and less code!
32. Next Steps?
32
• We can validate other helper libraries too
• One set of features/specs for the API using:
• the PHP library
• the Ruby Gem
• the Python library
33. • Assumptions
• The Problem
• Enter BDD
• BDD in Practice
• BDD at Scale
• Next steps…