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

    View Slide

  2. Motivação
    Tudo começou numa bela semana de firefighter…
    2

    View Slide

  3. Eu trabalho na...
    3

    View Slide

  4. 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...

    View Slide

  5. Motivação
    Tudo começou numa bela semana de firefighter…
    5

    View Slide

  6. Motivação
    Erros de integração
    6
    - Cliente mandando
    campos diferentes do
    esperado
    - Frontend recebendo
    campos diferentes do
    esperado

    View Slide

  7. Motivação
    Documentação desatualizada
    7
    - Endpoints e campos
    faltantes
    - Desinformação

    View Slide

  8. Motivação
    Dificuldade em recriar o cenário
    8
    /reservar/:id_do_assento
    id_do_voo?
    id_da_aeronave?
    id_do_passageiro?
    Aeronave está disponível?
    ????

    View Slide

  9. Motivação
    Dificuldade em recriar o cenário
    9

    View Slide

  10. View Slide

  11. 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

    View Slide

  12. PokéAPI: https://pokeapi.co
    $ http https://pokeapi.co/api/v2/pokemon/
    Como funciona?
    Exemplo: PokéAPI
    12

    View Slide

  13. 13

    View Slide

  14. 14

    View Slide

  15. Como funciona?
    Exemplo: PokéAPI
    15
    1. Instalar: pip
    2. Instalar: $ pip install scanapi

    View Slide

  16. 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

    View Slide

  17. Como funciona?
    Exemplo: PokéAPI
    17
    Rodar a ScanAPI: $ scanapi run scanapi.yaml

    View Slide

  18. Como funciona?
    Documentação
    18

    View Slide

  19. 19

    View Slide

  20. 20

    View Slide

  21. 21

    View Slide

  22. 22
    Até aqui...
    Não precisamos de nenhum
    conhecimento de Python

    View Slide

  23. 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 }}

    View Slide

  24. 24

    View Slide

  25. 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

    View Slide

  26. 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}

    View Slide

  27. 27

    View Slide

  28. 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

    View Slide

  29. Adicionando ScanAPI ao seu
    projeto
    29
    29
    29
    29
    - CI
    - GitHub Action

    View Slide

  30. Adicionando ScanAPI ao seu projeto
    30

    View Slide

  31. Adicionando ScanAPI ao seu projeto
    31
    Exemplo: CircleCI

    View Slide

  32. Adicionando ScanAPI ao seu projeto
    32
    Exemplo: CircleCI

    View Slide

  33. 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

    View Slide

  34. Adicionando ScanAPI ao seu projeto
    Exemplo: GitHub Action
    34

    View Slide

  35. # my_project/.github/workflows/scanapi.yml
    on:
    push:
    branches: [master]
    name: Run ScanAPI
    jobs:
    scanapi:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - name: Run automated API tests
    uses: scanapi/[email protected]
    with:
    scanapi_version: "==2.1.0"
    arguments: "run ./pokeapi/scanapi.yaml"
    - name: Upload scanapi-report.html
    uses: actions/[email protected]
    with:
    name: ScanAPI Report
    path: scanapi-report.html

    View Slide

  36. scanapi.dev
    36

    View Slide

  37. Comunicação
    Bora trocar uma ideia
    - GitHub Issues (por projeto)
    - Dashboards. Ex: Hacktoberfest
    - Spectrum (eventos, sprints...)
    37

    View Slide

  38. 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

    View Slide

  39. github.com/scanapi ⭐
    39

    View Slide

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

    View Slide