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

TDC São Paulo 2020: ScanAPI Automatização de Testes de Integração para a sua API

TDC São Paulo 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/sampaonline/trilha-api

Camila Maia

August 26, 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 São Paulo
    Agosto 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 e EuroPython

    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: /
    https://pokeapi.co/api/v2/pokemon
    https://pokeapi.co/api/v2/pokemon/

    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. Biblioteca requests
    Um pouco de Python
    23
    Python Requests: https://requests.readthedocs.io

    View Slide

  24. Biblioteca requests
    Um pouco de Python
    24
    Python Requests: https://requests.readthedocs.io

    View Slide

  25. Como funciona?
    Testes de Integração ✅
    25
    ...
    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_equals_to_1048
    assert: ${{ response.json()["count"] == 1048 }}

    View Slide

  26. 26

    View Slide

  27. Como funciona?
    Encadeamento ⛓
    27
    - 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

  28. Como funciona?
    Encadeamento ⛓
    28
    requests:
    - 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

  29. 29

    View Slide

  30. Adicionando ScanAPI ao seu projeto
    30

    View Slide

  31. Adicionando ScanAPI ao seu projeto
    31

    View Slide

  32. Adicionando ScanAPI ao seu projeto
    32

    View Slide

  33. # my-project/.circleci/config.yml
    ...
    scanapi:
    docker:
    - image: camilamaia/scanapi:2.0.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
    33
    - build-push:
    name: build-push-staging
    env: staging
    requires:
    - scanapi
    filters:
    branches:
    only:
    - master
    workflows:
    version: 2
    main:
    jobs:
    - scanapi:
    filters:
    branches:
    only:
    - master

    View Slide

  34. Como funciona?
    E tem mais
    34
    - 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
    - Templates Customizados
    - Visual Studio Code Plugin

    View Slide

  35. Posso usar?
    Com certeza!
    35

    View Slide

  36. scanapi.dev
    36

    View Slide

  37. Próximos passos
    E o futuro?
    37
    - Outros métodos HTTP (além de GET, POST, PUT, PATCH,
    DELETE)
    - Documentação + Tutoriais
    - Website
    - GitHub Action
    E se….
    - OpenAPI

    View Slide

  38. Por que colaborar com a ScanAPI?
    Chega junto!
    38
    - Todas as áreas: automação, backend, front, design
    - Python
    - Entender como uma lib funciona
    - Cobertura de testes > 90%
    - Automação
    - spectrum.chat/scanapi

    View Slide

  39. Por que colaborar com a ScanAPI?
    Chega junto!
    39
    How Open Source Changed My Life with Max Stoiber

    View Slide

  40. github.com/scanapi ⭐
    40

    View Slide

  41. Live SpaceDevs
    41
    Link Direto
    Domingo às 15 horas
    twitch.tv/spacedevs

    View Slide

  42. Estamos contratando!
    Loadsmart
    42
    Link Direto

    View Slide

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

    View Slide