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

Como testar e documentar REST APIs com ScanAPI ...

Camila Maia
November 09, 2021

Como testar e documentar REST APIs com ScanAPI - Agile Testers Conference 2021

Camila Maia

November 09, 2021
Tweet

More Decks by Camila Maia

Other Decks in Technology

Transcript

  1. Quem sou eu? - Desenvolvedora Backend - 10+ anos xp

    👵 - Python 🐍 e Ruby 💎 - OpenSource e Comunidades ❤ - Organização de eventos: Pyjamas, EuroPython, Python Brasil….
  2. Motivação Erros de integração 💥 - Clientes enviando campos diferentes

    do esperado - Frontend recebendo campos diferentes do esperado
  3. • Framework de código aberto • Command line interface (CLI)

    • Escrito em Python Objetivos: 1. Fornecer Live Documentation 2. Possibilitar a implementação de Testes de Integração O quê é?
  4. # 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
  5. ... requests: - name: list_all method: get path: / 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_1118 assert: ${{ response.json()["count"] >= 1118 }} Como funciona? https://requests.readthedocs.io Testes de Integração ✅
  6. Como funciona? - Pegar detalhes de um Pokémon - Neste

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

    - name: list_all method: get path: / vars: pokemon_name: ${{ response.json()["results"][0]["name"] }} tests: ... - name: details method: get path: ${pokemon_name} pokemon/${pokemon_name}
  8. 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
  9. # 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
  10. # 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
  11. Próximos passos E o futuro? 🔮 • Foco: aumentar a

    adoção da ferramenta. Divulgação! Falando em novas features, e se…. • Exportar: OpenAPI, Postman Collection, Insomnia… Esforço quase nulo para adoção!
  12. Por que utilizar ScanAPI? 8 motivos! 1. Funciona para qualquer

    API REST 2. Excelente para testar e documentar APIs próprias e de terceiros 3. É possível encadear requests, o que é essencial para testar cenários complexos 4. A documentação é gerada automaticamente, ela nunca fica desatualizada 5. É simples. A sintaxe é simples e não requer quase nenhum conhecimento específico da linguagem 6. É extremamente flexível 7. É seguro 8. Não há nada no mercado que faça o que o ScanAPI faz