API Testing in Your CI Pipeline

API Testing in Your CI Pipeline

API Testing in your CI Pipeline [email protected] www.container-solutions.com Jason Smith Senior Engineer Container Solutions @jasonrichardsmi @containersoluti The Three Things ● Specifications ● Testing your API ● Mocking your API www.container-solutions.com [email protected] The Three Things ● Specifications ● Testing your API ● Mocking your API www.container-solutions.com [email protected] 19 Nov 1863 www.container-solutions.com [email protected] Now www.container-solutions.com [email protected] IDL (Interface Description Language) J. R. Nestor W. A. Wulf D. A. Lamb August 1981 Carnegie-Mellon University Computer Science Department www.container-solutions.com [email protected] IDL (Interface Description Language) In order to work together harmoniously, ... programs ... must have a precise and compatible definition of the data structures they use to communicate with each other. www.container-solutions.com [email protected] IDL (Interface Description Language) ● Precision ● Representation Independence ● Language Independence ● Maintainability ● Communication Form www.container-solutions.com [email protected] SOAP WSDL www.container-solutions.com [email protected] REST Tony Tam recounts the history of Swagger and the Open API Initiative www.container-solutions.com [email protected] REST Not standardized... www.container-solutions.com [email protected] OpenAPI Specification Formerly Swagger Open API Initiative(Linux Foundation) www.container-solutions.com [email protected] Other Major Players API Blueprint RAML www.container-solutions.com [email protected] YAML! www.container-solutions.com [email protected] So many tools sswagger-js lua-Spore Mojolicious::Plugin::Swagger2 bootprint-swagger swagger-jack swagger-ui NSwag cakephp-swagger Dredd hapi-swagger swagger-tools Swashbuckle Swagger-PHP ember-swagger-ui Swagger Validation swagger-editor Swashbuckle.AspNetCore SwaggerAssertions generator-openapi-repo swagger-node-client swagger-core AutoRest php-swaggerize-fastroute-library intellij-swagger ratify swagger-parser SwaggerProvider SwaggerGen linter-swagger swagger-express swagger-codegen NSwag Jane OpenAPI ReDoc NelmioApiDocBundle swagger-node QSwag gossi/swagger swagger-commander Restler validator-badge SwaggerWcf calcinai/strut swagger-confluence swagger-assert ring-swagger Nancy.Swagger falsy swagger-diff Swaggervel compojure-api a127 pyramid-swagger swagger.ed django-rest-swagger fnhouse-swagger api-spec-converter flask-restplus SwagDefGen django-tastypie-swagger pedestal-swagger blueoak-server pyswagger vscode-apielements flask-restful-swagger swagger1st express-openapi flex ember-swagger-ui swagger-docs Friboo fleek-parser Flasgger commandcar source2swagger swagger-sdk fleek-response flask-swagger SwagGen swagger_engine cbSwagger fleek-router bravado swagger-mock-validator Scalatra swaggerize fleek-validator bravado-core Spectacle spray-swagger cowboy-swagger fury-adapter-swagger swagger-spec-validator octohipster Api-doc PhoenixSwagger generator-swaggerize swagger-py-codegen swagger-docs-cfml gform-admin go-swagger got-swag Connexion swagger swagger-cli-client goa hapi-swaggered pecan-swagger go-restful Swagger2Postman grpc-gateway hippie-swagger swagger-parser Sashay swagger2 oas-nodegen swagger-tester beego servant-swagger pokemock swagger-aggregator Swagger spec generator assertj-swagger sails-swagger swagger-stub restapidoc binder-swagger-java serverless_swagger bottle-swagger swaggydoc dropwizard-swagger swagger-jsdoc prance swagger4spring-web elide swagger-mongodb Apivore swagger-jaxrs-doclet jooby-swagger swagger-tools grape-swagger swaggerj4 restlet-framework swaggerize-express swagger-blocks swaggerapi springfox swaggerize-hapi swagger_engine swagger-validator swagger-codegen-maven-plugin swagmock svelte swagger-ajax-client swagger2markup Swagger Express Middleware rspec-rails-swagger swagger-angular-client swagger2markup-gradle-plugin Swagger Parser rswag swagger-client-generator swagger-maven-plugin test2doc.js sbt-swagger-codegen swagger-validate swagger-codegen-gradle-plugin koa-joi-swagger play-swagger ServiceStack swagger-request-validator Raisin Fintrospect fubumvc-swagger Swagger Parser Swagger2 SwagGen dotswaggen Jester - Jolie rEST routER Swagger2::Client APIs.guru Swagger Framework www.container-solutions.com [email protected] The Repo https://github.com/ContainerSolutions/DreddDemo www.container-solutions.com [email protected] + = https://github.com/ContainerSolutions/DreddDemo www.container-solutions.com [email protected] The API Swagger Editor Swagger UI https://github.com/ContainerSolutions/DreddDemo www.container-solutions.com [email protected] Simple Server Go (Gorilla Mux) Special Handlers https://github.com/ContainerSolutions/DreddDemo www.container-solutions.com [email protected] Special Handlers authMiddleware NopeHandler https://github.com/ContainerSolutions/DreddDemo www.container-solutions.com [email protected] The Three Things ● Specifications ● Testing your API ● Mocking your API www.container-solutions.com [email protected] Dredd https://github.com/apiaryio/dredd “Dredd reads your API description and step by step validates whether your API implementation replies with responses as they are described in the documentation.” www.container-solutions.com [email protected] Dredd dry-run: null hookfiles: dredd/hooks.js language: nodejs sandbox: false server: ./main dredd.yml server-wait: 2 init: false custom: {} names: false only: [] reporter: [] output: [] header: [] ... www.container-solutions.com [email protected] Dredd Hooks ● POST > /items Requires Auth ● GET > /nope returns error www.container-solutions.com [email protected] Dredd $dredd www.container-solutions.com [email protected] www.container-solutions.com [email protected] Makefile builddredd: @docker build -t dreddtest -f dredd/DockerDredd . dreddtest: builddredd @docker run\ -e "DEMOSHASALT=test_salt"\ dreddtest www.container-solutions.com [email protected] Run the test $make dreddtest www.container-solutions.com [email protected] Circle-CI machine: services: - docker test: override: - make dreddtest www.container-solutions.com [email protected] Travis-CI language: go go: 1.6 services: - docker script: - make dreddtest www.container-solutions.com [email protected] Results https://travis-ci.org/ContainerSolutions/DreddDemo https://circleci.com/gh/ContainerSolutions/DreddDemo https://semaphoreci.com/jasonrichardsmith/dredddemo http://54.72.105.103:8080/job/DreddDemo/ www.container-solutions.com [email protected] The Three Things ● Specifications ● Testing your API ● Mocking your API www.container-solutions.com [email protected] Mocking your api www.container-solutions.com [email protected] Pokemock https://github.com/mobilcom-debitel/pokemock Drakov https://github.com/Aconex/drakov www.container-solutions.com [email protected] www.container-solutions.com [email protected] Pokemock FROM node:7-alpine RUN npm install -g pokemock COPY apispec/spec.yml . COPY pokemock/runpokemock.sh . ENTRYPOINT /bin/sh runpokemock.sh www.container-solutions.com [email protected] Let’s make it public https://sloppy.io/ www.container-solutions.com [email protected] Those tests Badges www.container-solutions.com [email protected] What you get from the start ● A formal contract ● API testing ● A mock for consumer testing www.container-solutions.com [email protected] Thank You! Jason Smith Senior Engineer Container Solutions @jasonrichardsmi.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    42 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us