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

TDC Porto Alegre 2020: ScanAPI Automatização de Testes de Integração para a sua API

Camila Maia
December 04, 2020

TDC Porto Alegre 2020: ScanAPI Automatização de Testes de Integração para a sua API

A ScanAPI é um framework de código aberto escrita em Python que possibilita a criação de testes de integração para REST APIs.

Através de um arquivo de configuração (YAML/JSON), você consegue implementar testes automatizados para os endpoints da sua API. O framework gera um relatório de execução dos testes que também pode ser utilizado como a própria documentação da API

Essa palestra visa mostrar um pouco do funcionamento da ScanAPI, como ela pode ajudar o seu time na sua arquitetura de micro serviços e discutir os próximos passos a serem seguidos

Link do projeto: https://github.com/scanapi/scanapi

https://thedevconf.com/tdc/2020/poaonline/trilha-python

Camila Maia

December 04, 2020
Tweet

More Decks by Camila Maia

Other Decks in Technology

Transcript

  1. ScanAPI Automatização de Testes de Integração para a sua API

    Camila Maia 1 TDC Porto Alegre Dezembro de 2020
  2. Quem sou eu? 4 - Desenvolvedora Backend - Formada em

    Sistemas de Informação na UFSC - Entrei na área em 2010 - Maior experiência com Python e Ruby - Organização de eventos: Pyjamas, EuroPython 2020, Python Brasil 2020...
  3. Motivação Erros de integração 6 - Cliente mandando campos diferentes

    do esperado - Frontend recebendo campos diferentes do esperado
  4. O quê a ScanAPI se propõe a fazer pela sua

    API? 11 - Framework de código aberto - Command line interface (CLI) - Escrito em Python 1. Fornecer uma documentação “Ao Vivo” 2. Possibilitar a implementação de testes de Integração
  5. 13

  6. 14

  7. Como funciona? Exemplo: PokéAPI 16 # scanapi.yaml endpoints: - name:

    pokeapi path: https://pokeapi.co/api/v2/ endpoints: - name: pokemon path: pokemon requests: - name: list_all method: get path: / path: https://pokeapi.co/api/v2/ pokemon / name: pokeapi :: pokemon :: list_all
  8. 19

  9. 20

  10. 21

  11. Como funciona? Testes de Integração ✅ 23 ... 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 }}
  12. 24

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

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

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

  16. Como funciona? E tem mais 28 - 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 - Visual Studio Code Plugin
  17. 33 # 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
  18. # 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
  19. Comunicação Bora trocar uma ideia - GitHub Issues (por projeto)

    - Dashboards. Ex: Hacktoberfest - Spectrum (eventos, sprints...) 37
  20. Próximos passos E o futuro? 38 - 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… - Chamar Python Modules