maximilianoalves / karate-graphql

Projeto de exemplo para implementação de testes para API's GraphQL utilizando o Karate DSL.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Karate + GraphQL

Projeto de exemplo para implementação de testes para API's GraphQL utilizando o Karate DSL.

Ferramentas utilizadas:

Recursos utilizados no projeto

  • KARATE
    • url
    • def
    • read
    • request
    • method
    • status
    • match
    • response
    • print
    • text (mais importante neste contexto)
  • JAVA
    • Faker
    • JUnit4

Estrutura de pastas

.
├── src
│   └── test
│       └── java
│           ├── pokeapi
│           │   ├── java
│           │   │   ├── BaseRunner.java
│           │   │   └── PokemonFaker.java
|           |   ├── queries
|           |   |   ├── charmander-pokemon-only-name.graphql
|           |   |   ├── pikachu-pokemon-and-attacks.graphql
|           |   |   ├── pokemon-and-attacks-by-name.graphql
|           |   |   ├── pokemon-full-data.graphql
│           │   │   └── pokemon-only-name-by-id.graphql
│           │   ├── PokeApiTest.java
│           │   ├── Pokemon.feature
│           │   ├── pokemon-contract.json
│           │   └── pokemon-full-data-contract.json
│           ├── karate-config.js
│           └── logback-test.xml
├── README.md
└── pom.xml

Considerando este contexto, onde o objetivo é testar uma API GraphQL, os principais arquivos e pacotes são: Pokemon.feature e queries (onde encontramos todas as consultas).

No arquivo Pokemon.feature temos a implementação dos testes, assim como as devidas validações de status, contrato e regras de negócio. Veja um exemplo:

  Scenario Outline: Validar pokemon <pokemon_nome>
    Given def query = read('classpath:pokeapi/queries/pokemon-and-attacks-by-name.graphql')
    And def variables = { name: '<pokemon_nome>' }
    And request { query: '#(query)', variables: '#(variables)' }
    When method post
    Then status 200
    And match $.data.pokemon.name == '<pokemon_nome>'
    * print 'response:', response

    Examples:
    |pokemon_nome|
    |Pikachu     |
    |Charmander  |
    |Squirtle    |
    |Charizard   |

Como visto no exemplo acima, para permitir o reaproveitamento de código, salvamos as queries em arquivos externos e referenciamos estes durante o teste utilizando os comandos def & read. No exemplo, o arquivo com a query é o pokemon-and-attacks-by-name.graphql:

query PokemonAndAttacks($name: String) {
    pokemon(name: $name) {
        id
        number
        name
        attacks {
            special {
                name
                type
                damage
            }
        }
    }
}

Nos demais arquivos temos implementações auxiliares, como: funções comuns para execução e geração de relatórios, geração de nomes de pokemons de forma aleatória, contrato de api utilizado para asserções durante o teste e arquivos de configurações do Karate DSL.


About

Projeto de exemplo para implementação de testes para API's GraphQL utilizando o Karate DSL.


Languages

Language:Gherkin 69.7%Language:Java 25.0%Language:JavaScript 5.3%