Karate DSL – Automatizando testes de API de forma simples

Já imaginou poder desenvolver seus testes de API utilizando a sintaxe do Cucumber?

Recentemente tive a oportunidade de utilizar o Karatê DSL para automatizar os testes de API em um projeto na CWI.  Neste post vou contar como foi a minha experiência utilizando esta DSL desenvolvida em Java com a missão de simplificar o desenvolvimento de testes automatizados de APIs REST e SOAP.

Sobre o Karatê DSL

O Karatê é uma DSL para desenvolvimento de testes automatizados de APIs REST e SOAP, desenvolvido com Java e Cucumber. Ela foi disponibilizada recentemente (a pouco mais de um ano) e possui uma lista bem completa de funcionalidades.

A arquitetura é extremamente simples, o que facilita o desenvolvimento de novos testes. Inclusive, é possível descrever grande parte dos testes utilizando os steps definidos na DSL, sem a necessidade de adicionar código extra em Java.

karate-architecture-intuit

Arquitetura Karatê DSL by Intuit

Basicamente, o projeto contém os seguintes arquivos:

  • Features – Arquivos com a descrição e implementação dos testes.
  • Runners – Arquivos com a configuração para executar os testes.
  • karate-config.js – Arquivo com a configurações gerais do projeto, ex.: ambientes
  • logback-test.xml – Arquivo com a configuração das informações de log de execução, gerados durante a execução de cada teste

Após a execução dos testes, é gerado um relatório em html com o resultado e informações detalhadas dos testes. Veja um exemplo aqui .

Recursos e alguns diferenciais

Como diferencial em relação a outras ferramentas (Postman, REST Assured, SOAP UI), podemos destacar:

  • Facilidade de descrever os testes, que são escritos em um arquivo de texto (feature).
  • Suporte nativo para REST e SOAP
  • Facilidade de execução dos testes utilizando Maven ou Gradle

Além disso, é possível destacar os seguintes recursos da ferramenta:

  • Não é obrigatório saber Java, ou seja, pessoas “não-técnicas” podem escrever os testes
  • Os scripts são arquivos de texto, e não exigem compilador ou IDE específica
  • A sintaxe tem suporte nativo para  expressões com JSON (JsonPath) e XML (Xpath)
  • Permite uso de js para construir funções auxiliares para os testes, caso necessário
  • E muitos outros.

Outras funcionalidades interessantes

Hands-on

Se você prefere algo mais direto ao ponto, clone este exemplo no meu git.

Se quiser construir do zero, siga o setup na documentação do repositório, nesta seção.

Exemplo: REST


Background:

* url "https://swapi.co/api"

Scenario: Crie um teste de API que retorne todos os planetas do SW. Valide que TODO o retorno está de acordo com o esperado.
    Given path 'planets'
    When method get
    Then status 200
    * def json = read('planetas.json') //retorno salvo em um arquivo externo
    And match json == response

Exemplo: SOAP


Background:

Scenario: Validar retorno do payload
    Given request read('payload.xml')
    When soap action 'http://tempuri.org/Add'
    Then status 200
    And match /Envelope/Body/AddResponse/AddResult == 5
    And print 'response: ', response

 

 

Com isso, concluo que minha experiência com o Karatê DSL foi bem bacana. Um ponto de destaque foi a facilidade de escrever os testes e a “liberdade” de não precisar escrever mais e mais classes de código Java pra fazer coisas simples. O reporte gerado em html também é muito elegante, e mostra todas as informações do teste (steps, logs, requests, response, etc.). O feedback do time em relação à simplicidade da arquitetura também foi positivo. A comunidade é bem ativa no Github do projeto e frequentemente implementam melhorias na DSL. Ah, e o owner do projeto – Congrats, Peter Thomas – responde a galera com frequência, tanto no git quanto nos fóruns de dúvidas. 🙂

E você, já utilizou o Karatê? Como foi a experiência?

— Samuel Lucas

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s