Slide 1

Slide 1 text

Como testar e documentar REST APIs com ScanAPI Caravana Cloud - Jun 2021 Camila Maia

Slide 2

Slide 2 text

Esta apresentação está disponível em: speakerdeck.com/cmaiacd

Slide 3

Slide 3 text

Quem sou eu? - Desenvolvedora Backend - 10+ anos xp 👵 - Python 🐍 e Ruby 💎 - OpenSource e Comunidades ❤ - Organização de eventos: Pyjamas, EuroPython, Python Brasil….

Slide 4

Slide 4 text

- Primeiro perfil aprovado no programa de Sponsors para quem reside no Brasil 󰎙 Quem sou eu?

Slide 5

Slide 5 text

Testes Automatizados 🤖

Slide 6

Slide 6 text

● São rotinas que verificam o funcionamento do seu código ● Substituem os teste manuais ● Economizam seu tempo ● Não apenas identificam problemas, eles os evitam ● Ajudam no trabalho em equipe ● Garantem código de qualidade e robusto Testes O quê são?

Slide 7

Slide 7 text

Testes ● Alguns testes podem se aplicar pequenos detalhes do sistema. Um método de modelo específico retorna valores conforme o esperado? ● Outros examinam a operação geral do sistema Uma sequência de entradas do usuário no site produz o resultado desejado? ● Existem os que avaliam a comunicação entre sistemas Os diferentes tipos

Slide 8

Slide 8 text

Motivação

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Motivação Erros de integração 💥 API de Terceiros API interna (Backend) Frontend

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

/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 😤

Slide 13

Slide 13 text

Motivação Dificuldade em recriar o cenário 😤

Slide 14

Slide 14 text

Motivação Erros de integração 💥 API de Terceiros API interna (Backend) Frontend

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

● 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ê é?

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Como funciona? ● Python ● $ pip install scanapi Exemplo: PokéAPI

Slide 20

Slide 20 text

# 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

Slide 21

Slide 21 text

Como funciona? Executar... Exemplo: PokéAPI

Slide 22

Slide 22 text

Documentação 📄

Slide 23

Slide 23 text

● import requests ● response = requests.get("https://pokeapi.co/api/v2/pokemon/") ● dir(response) ● response.status_code ● response.headers ● response.elapsed.total_seconds() ● response.json() https://requests.readthedocs.io Python requests

Slide 24

Slide 24 text

... 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? Testes de Integração ✅

Slide 25

Slide 25 text

Testes de Integração ✅

Slide 26

Slide 26 text

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 ⛓

Slide 27

Slide 27 text

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}

Slide 28

Slide 28 text

Encadeamento ⛓

Slide 29

Slide 29 text

Como funciona? E tem mais 🎉 - Especificação também é aceita em JSON - Especificação em vários arquivos - Delay entre requests - Relatórios Customizados - VS Code Plugin

Slide 30

Slide 30 text

scanapi.dev 🌐

Slide 31

Slide 31 text

scanapi/examples

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

GitHub - https://github.com/scanapi Twitter - @ScanAPI_ Discord - discord.scanapi.dev Comunicação Bora trocar uma ideia! 🗣

Slide 34

Slide 34 text

github.com/scanapi ⭐

Slide 35

Slide 35 text

Bora usar!

Slide 36

Slide 36 text

E compartilhar! 🚀

Slide 37

Slide 37 text

MUITO OBRIGADA! @cmaiacd camilamaia 󰠁 cmaiacd.com