Rodando seus testes com Frisby.js em um ambiente de CI - Parte 2: Jenkins e dicas sobre Frisby.js

No post anterior (parte 1), vimos como utilizar o Grunt em um projeto. Tudo que aprendemos está em um projeto no GitHub, o qual servirá de base para este post.

Neste post, vamos ver como colocar nosso projeto com Grunt e Frisby.js para rodar no Jenkins. No final, vou dar umas dicas relevantes sobre Frisby.js, de coisas que aprendi após utilizá-lo em um projeto recente.

IMPORTANTE

Este post presume que você saiba o básico sobre Jenkins: configurações gerais, instalação e configuração de plugins, criação e execução de jobs, etc.. Caso você tenha alguma dúvida sobre Jenkins, basta ler o post "Configurando Jenkins para um projeto com GhostDriver e Gradle", no qual explico tudo isso de forma bem didática. :)


Configurando o projeto no Jenkins

 

NodeJS plugin

Como o nosso projeto roda em cima da plataforma Node.js, vamos precisar instalar um plugin do Node no Jenkins.

  • Acesse a opção "Gerenciar Jenkins" no lado esquerdo da página principal e, em seguida, a opção "Gerenciar Plugins"
  • Selecione a aba "Disponíveis" e digite na busca "nodejs"
  • Será exibido o plugin "NodeJS plugin", selecione-o e clique no botão "Baixar agora, instalar e depois reiniciar" (vide imagem abaixo)

node plugin


Configurando o plugin

O próximo passo é configurar o plugin recém-instalado. Para isso:

  • Acesse a opção "Gerenciar Jenkins", no lado esquerdo da página principal e, em seguida, a opção "Configurar o sistema"
  • Encontre a seção "NodeJS" e clique no botão "Adicionar NodeJS"

Nessa parte, você tem duas opções: OU informa o diretório da instalação do Node.js (caso já esteja instalado na máquina que roda o Jenkins), OU pede para o Jenkins instalar automaticamente. Uma limitação da versão atual do plugin é que o auto-instalador funciona apenas em distros do Linux (o suporte para OS X e Windows ainda está em andamento).

Para nosso exemplo, vou usar uma instalação prévia do Node.js, e também vou assumir que você leu o post da parte 1 e já possui o grunt-cli instalado. Com isso, basta colocarmos o diretório da instalação do Node.js e dar um nome para a instalação, vide imagem abaixo:

config node plugin

Agora, estamos prontos para criar e configurar um job para rodar os testes do nosso projeto.


Criando e configurando um novo job

Para criar um novo job, selecione a opção "Novo Item" no lado esquerdo da página principal. Dê um nome para o job, selecione a opção "Construir um projeto de software free-style" e clique em OK.

Na tela seguinte, procure a seção "Gerenciamento de código fonte", selecione "Git" e informe a URL do repositório do projeto. Vamos informar a URL do repositório do projeto de exemplo, que é https://github.com/stefanteixeira/exemplo-frisbyjs-grunt.git

Na seção "Ambiente de build", selecione a opção "Provide Node & npm bin/ folder to PATH" e selecione a instalação do Node.js que configuramos anteriormente:

build env node

Essa opção serve para adicionar a instalação do Node à variável PATH.

Na seção "Build", clique no botão "Adicionar passo no build" e selecione a opção "Executar shell". Na caixa de texto, vamos informar os comandos necessários para fazer o build do nosso projeto. Precisamos de dois comandos:

  • npm install - esse comando irá instalar as dependências do nosso projeto, descritas no arquivo package.json
  • grunt - esse comando irá executar a task default do arquivo do grunt (Gruntfile.js). No caso, irá executar os testes do Frisby.js usando o jasmine-node.

A configuração ficará da seguinte forma:

build exec npm grunt

A última coisa que iremos fazer é publicar os relatórios de execução dos testes, gerados pelo jasmine. No arquivo Gruntfile.js, na task jasmine-node, existe um campo onde configuramos o diretório onde serão salvos os relatórios. No nosso caso, estão sendo salvos em build/reports/jasmine.

Com isso, vá até a seção "Ações pós-builds", clique no botão "Add post-build action" e selecione a opção "Publicar relatório de testes do JUnit". No campo "Relatório XML de teste", informe "build/reports/jasmine/*.xml", para que todos os relatórios sejam obtidos:

post build jasmine reports

Pronto! Podemos salvar e executar o job :)


Executando o job

Depois de ter salvo as configurações, basta clicar na opção "Construir agora", do lado esquerdo da tela. Aparecerá um build em execução na caixa "Histórico de builds". Caso tudo dê certo, quando você estiver na tela do build, será exibida uma opção "Resultado de testes". Clicando nela, podemos ver o relatório dos testes que foram executados:

frisby test result


Dicas sobre Frisby.js

Para terminar o post, quero compartilhar duas dicas úteis quando forem desenvolver testes com o Frisby.js:

  • globalSetup

Um recurso muito útil, descrito no README do GitHub do Frisby.js, é a função globalSetup(). Essa função permite definirmos valores que precisamos enviar em todos os requests, como por exemplo, valores de autenticação. No projeto em que usei, todos os requests precisam de 4 campos no header, e o globalSetup ajudou a reduzir código duplicado.

  • inspectBody() e inspectJSON()

Quando nossos testes falham e queremos "debugar", um ótimo começo é usar as funções inspectBody() ou inspectJSON(). A inspectJSON() vai exibir no console o JSON de resposta, enquanto a inspectBody() vai exibir a resposta inteira, sem ser necessariamente JSON.

Importante: caso algum endpoint da sua API retorne status 204 (No Content), NÃO use a função inspectJSON()! Mas por quê? Como o nome diz, quando um status 204 é retornado, não recebemos nenhum JSON de resposta. Caso você coloque um inspectBody(), verá que é retornado "undefined". Com isso, se você colocar um inspectJSON(), o Frisby.js tentará transformar "undefined" em um JSON, o que causará uma exceção. ;)


E é isso! Qualquer dúvida/crítica/sugestão, entrem em contato ou comentem. Não deixem de dar uma olhada nos links abaixo, na parte de referências. Para saberem mais sobre testes em APIs REST, confiram a série "Como você anda testando sua API REST?", no blog do Frederico Moreira.
Até o próximo post! :D


Referências

https://github.com/vlucas/frisby
http://ptmccarthy.github.io/2014/06/28/rest-testing-with-frisby/
http://stefanteixeira.com.br/2014/12/04/rodando-seus-testes-com-frisby-js-em-um-ambiente-de-ci-parte-1-introducao-ao-grunt/
http://keeptesting.com.br/2014/09/09/testando-suas-apis-com-frisby-js/
http://www.fredmoreira.com/2014/11/como-voce-anda-testando-sua-api-rest.html
http://www.fredmoreira.com/2014/12/como-voce-anda-testando-sua-api-rest2.html


Sobre o autor: Stefan Teixeira trabalha como QA Engineer e, desde o final de 2014, tem se aventurado no mundo DevOps. É Bacharel em Ciência da Computação pela UFRJ e MBA em Garantia de Qualidade de Software pela Escola Politécnica da UFRJ. Entusiasta de Testes Automatizados (e de tudo que possa ser automatizado!), Agile Testing e da cultura DevOps.

Contatos: stefanfk@gmail.com | Twitter | LinkedIn


comments powered by Disqus