História de usuário é uma descrição resumida de alguma funcionalidade do sistema sob o ponto de vista do usuário. Cada história deve ter valor de negócio na visão do cliente e é uma pequena parte da funcionalidade, não necessariamente uma especificação completa, o que minimiza a necessidade de uma extensa documentação.
A história de usuário é escrita pelo próprio cliente e, também, serve para conduzir a criação de teste de aceitação, o qual tem o propósito de avaliar a qualidade externa do produto e, na medida do possível, a qualidade de uso e experiência do usuário. A automatização dos testes de aceitação é criada para certificar de que a história foi implementada corretamente.
Nesse exemplo é preciso a instalação do NodeJS e do Node Package Manager (NPM), que podem ser baixados no site oficial. O NPM é necessário para instalar o CucumberJS, o PhantomJS e o WD, digitando o seguinte script no terminal:
npm install -g cucumber phantomjs
npm install wd
O NodeJS possui dois tipos de dependências: global e local. Quando é global, a dependência passa ser executável, tornando possível a utilização da dependência através da linha de comando. Já as dependências locais são instaladas no diretório corrente, dentro de um diretório chamado node_modules.
O primeiro script, que utiliza o parâmetro -g, instala o CucumberJS e o PhantomJS como dependências globais. O CucumberJS é uma implementação JavaScript para interpretar uma linguagem chamada Gherkin, a qual permite escrever funcionalidades e especificações em texto simples. Já o PhantomJS é um WebKit headless totalmente em JavaScript e possui suporte rápido e nativo para vários padrões web como manipulação de DOM, seletores CSS, JSON, Canvas e SVG.
O segundo script instala o WD como dependência local, um cliente NodeJS para facilitar o acesso à API do Selenium 2, o qual suporta métodos como: fazer requisições GET e POST, clicar no botão VOLTAR do navegador, redimensionar e mover a janela do navegador, submeter formulário, digitar texto, selecionar um elemento DOM, clicar e mover um elemento DOM selecionado, etc.
Após a instalação das dependências, vamos criar um arquivo com a especificação da história de usuário e o teste de aceitação. Algo bem simples. Suficiente para exemplificar a implementação desse tipo de teste utilizando JavaScript.
Ao criar o arquivo de especificação, vamos criar mais dois arquivos: um com as configurações do WebDriver e o outro com as definições de cada passo do teste de aceitação. Em seguida, é preciso, em um outro terminal, rodar o PhantomJS em modo WebDriver, digitando o seguinte comando:
phantomjs --webdriver=localhost:8910
Com o PhantomJS rodando em segundo plano, basta rodar o CucumberJS passando como argumento o arquivo com a história de usuário e o teste de aceitação. O parâmetro --require serve para especificar o arquivo com as definições de cada passo do teste de aceitação. E o parâmetro --format é para alterar a formatação do resultado dos testes. Abaixo, o script e uma ilustração do resultado obtido:
cucumber.js apenas-um-exemplo.feature --require step-definitions.js --format pretty
Esse exemplo contempla de forma bem simples a implementação de teste de aceitação utilizando JavaScript. Essa abordagem também pode utilizar diferentes tipos de navegadores, mas isso ficará para uma próxima discussão. Muito obrigado.