Is Your API Misbehaving (workshop)

23365b2ae97212e561fb82442857d8bb?s=47 Keith Casey
November 05, 2015

Is Your API Misbehaving (workshop)

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.

23365b2ae97212e561fb82442857d8bb?s=128

Keith Casey

November 05, 2015
Tweet

Transcript

  1. Is Your API Misbehaving? D. Keith Casey Jr keith@clarify.io @CaseySoftware

  2. Who am I?

  3. Who am I? Clarify.io - The API for businesses to

    build apps that Search and Understand their Audio & Videos
  4. Who am I? http://TheAPIDesignBook.com

  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
  11. … no seriously. API Testing Sucks 11

  12. Two Goals Prove* that it works (now) Give us confidence

    (later) 12
  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…
  21. In lots of languages 21 • Java - JBehave •

    Ruby - RBehave -> RSpec -> Cucumber • PHP - Behat • Python - Behave • C# - NSpec • Javascript - Cucumber-js & Jasmine
  22. So let’s do this! Start small.

  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…
  34. todo next? 34 Lots of things!

  35. todo next? 35 But remember: Start small and iterate!

  36. D. Keith Casey Jr keith@clarify.io @CaseySoftware Is Your API Misbehaving?

  37. Who am I? http://TheAPIDesignBook.com