Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Como testar e documentar REST APIs com ScanAPI

Como testar e documentar REST APIs com ScanAPI

Palestra apresentada pela Camila Maia na 57º Python Floripa on-line https://www.youtube.com/watch?v=_78stm2WpYM

23f134e5e0567efeff45ecfaa8702f37?s=128

Python Floripa

March 27, 2021
Tweet

Transcript

  1. @cmaiacd ScanAPI Como testar e documentar REST APIs com ScanAPI

    57º Python Floripa on-line - Mar 2021 Camila Maia
  2. @cmaiacd Esta apresentação está disponível em: speakerdeck.com/cmaiacd

  3. @cmaiacd Motivação 🚒 Tudo começou numa bela semana de firefighter…

    🔥
  4. @cmaiacd Eu trabalho na...

  5. @cmaiacd Quem sou eu? - Desenvolvedora Backend - Formada em

    Sistemas de Informação pela UFSC - Entrei na área em 2010 - Python and Ruby - Organização de eventos: Pyjamas, EuroPython, Python Brasil….
  6. @cmaiacd Motivação 🚒 Tudo começou numa bela semana de firefighter…

    🔥
  7. @cmaiacd Motivação Erros de integração 💥 - Clientes enviando campos

    diferentes do esperado - Frontend recebendo campos diferentes do esperado
  8. @cmaiacd - Endpoints e campos faltantes - Desinformação Motivação Documentação

    desatualizada 📜
  9. @cmaiacd /reservar/:id_do_assento id_do_voo? id_da_aeronave? id_do_passageiro? Aeronave está disponível? ???? Motivação

    Dificuldade em recriar o cenário 😤
  10. @cmaiacd Motivação Dificuldade em recriar o cenário 😤

  11. @cmaiacd

  12. @cmaiacd O quê a ScanAPI se propõe a fazer pela

    sua API? - Framework de código aberto - Command line interface (CLI) - Escrito em Python 1. Fornecer Live Documentation 2. Possibilitar a implementação de Testes de Integração
  13. @cmaiacd PokéAPI: https://pokeapi.co $ http https://pokeapi.co/api/v2/pokemon/ Como funciona? Exemplo: PokéAPI

  14. @cmaiacd

  15. @cmaiacd

  16. @cmaiacd Como funciona? $ pip install scanapi Exemplo: PokéAPI

  17. @cmaiacd # scanapi.yaml endpoints: - name: pokeapi path: https://pokeapi.co/api/v2/ endpoints:

    - name: pokemon path: pokemon requests: - name: list_all method: get path: / Como funciona? Exemplo: PokéAPI path: https://pokeapi.co/api/v2/ pokemon / name: pokeapi :: pokemon :: list_all
  18. @cmaiacd Como funciona? Executar... Exemplo: PokéAPI

  19. @cmaiacd Como funciona? Documentação 📄

  20. @cmaiacd

  21. @cmaiacd

  22. @cmaiacd

  23. @cmaiacd ... requests: - name: list_all method: get tests: -

    name: status_code_is_200 assert: ${{ response.status_code == 200 }} - name: response_time_is_under_half_second assert: ${{ response.elapsed.total_seconds() < 0.5 }} - name: results_length_is_20 assert: ${{ len(response.json()["results"]) == 20 }} - name: count_is_gte_1050 assert: ${{ response.json()["count"] >= 1050 }} Como funciona? https://requests.readthedocs.io Testes de Integração ✅
  24. @cmaiacd

  25. @cmaiacd Como funciona? Encadeamento ⛓ - Pegar detalhes de um

    Pokémon - Neste caso o dado é “estático”, mas poderia não ser https://pokeapi.co/api/v2/pokemon/bulbasaur
  26. @cmaiacd Como funciona? ... endpoints: - name: pokemon path: pokemon

    requests: - name: list_all method: get vars: pokemon_name: ${{ response.json()["results"][0]["name"] }} tests: ... - name: details method: get path: ${pokemon_name} pokemon/${pokemon_name}
  27. @cmaiacd

  28. @cmaiacd Como funciona? E tem mais 🎉 - Independente de

    linguagem! - Especificação da API também é aceita em JSON - Variável de Ambiente - Esconder dados sensitivos no relatório - Especificação da API em vários arquivos - Delay entre requests - Templates Customizados - VS Code Plugin
  29. @cmaiacd ScanAPI no seu projeto - CIs - GitHub Action

  30. @cmaiacd Adicionando ScanAPI ao seu projeto

  31. @cmaiacd Adicionando ScanAPI ao seu projeto Exemplo: CircleCI

  32. @cmaiacd Adicionando ScanAPI ao seu projeto Exemplo: CircleCI

  33. @cmaiacd # my_project/.circleci/config.yml ... scanapi: docker: - image: camilamaia/scanapi:2.1.0 steps:

    - checkout - run: name: Run ScanAPI command: | scanapi run scanapi/scanapi.yaml -c scanapi/scanapi.conf -o scanapi/report.html - store_artifacts: path: scanapi/report.html workflows: version: 2 main: jobs: - scanapi: filters: branches: only: - master - build-push: name: build-push-staging env: staging requires: - scanapi filters: branches: only: - master
  34. @cmaiacd Adicionando ScanAPI ao seu projeto Examplo: GitHub Action

  35. @cmaiacd # my_project/.github/workflows/scanapi.yml on: push: branches: [master] name: Run ScanAPI

    jobs: scanapi: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Run automated API tests uses: scanapi/github-action@v1 with: scanapi_version: "==2.1.0" arguments: "run ./pokeapi/scanapi.yaml" - name: Upload scanapi-report.html uses: actions/upload-artifact@v2 with: name: ScanAPI Report path: scanapi-report.html
  36. @cmaiacd scanapi.dev

  37. @cmaiacd - GitHub - Issues (per project) - Dashboards. Ex:

    Hacktoberfest - Spectrum (events, sprints...). Future: Github Discussions Comunicação Bora trocar uma ideia! 🗣
  38. @cmaiacd Próximos passos E o futuro? 🔮 - Outros métodos

    HTTP (além de GET, POST, PUT, PATCH, DELETE) - Melhorar Documentação - Criar Tutoriais - Melhor documentação para contribuição E se…. - Exportar: OpenAPI, Postman Collection, Insomnia…
  39. @cmaiacd github.com/scanapi ⭐

  40. @cmaiacd MUITO OBRIGADA! @cmaiacd camilamaia 👩‍💻 cmaiacd.com