Conhecendo o Hodman
Autor: Sarah Pimentel | Publicado: 2014-12-16T20:46:00-02:00






Obrigada Galani por me empurrar o Desafio Agile Testers :) Eu tava mesmo enrolando para dar uma olhada no Hodman e assim eu arranjei uma desculpa para não procrastinar muito. 



Recentemente o Felipe Knorr compartilhou um artigo falando sobre um framework de testes usando Selenium e Javascript. O framework é composto pelo Hodman, uma biblioteca de selenium que inclui page objects, o Kobold, uma ferramenta para comparar screenshots entre uma versão e outra do software, especialmente útil para testes de regressão, e o Preceptor, com o intuito de orquestrar a execução dos testes em paralelo, sequencialmente ou uma mistura dos dois, gerando um único report dos resultados e cobertura.



Esse artigo tem como foco o Hodman apenas.



Pré requisito: 

. Node instalado

. Um servidor Selenium rodando (no meu caso, usando a porta 4444)



Crie uma pasta para esse exemplo, e no terminal, digite:

npm init



Vão surgir algumas perguntas. O que você não souber responder ainda, pode simplesmente pressionar enter até o fim. Após esse procedimento, terá um arquivo chamado package.json na sua pasta.



Abra o arquivo e adicione no fim duas dependências: o cabbie e o hodman. Se você foi preguiçosa como eu e simplesmente saiu apertando enter pra quase tudo, o seu arquivo deve estar mais ou menos assim:



https://gist.github.com/sarahpimentel/904d012e670508cc3f93



É muito importante colocar essas dependências nesse arquivo. Nas minhas primeiras tentativas, eu simplesmente instalei a versão disponível no npm do Hodman e o Cabbie com e muita coisa deu errado. A versão do Cabbie no npm atualmente é a 0.0.9, cuja última atualização foi em Abril/2014. O último commit no projeto é de Outubro/2014. A última versão do Hodman é a 0.9.5. Essas linhas garantem que você vai estar usando o código do HEAD de ambos os projetos.



E o que é esse Cabbie? É um webdriver, também escrito em Javascript. No momento, o Hodman utiliza somente essa opção. Caso você se interesse em desenvolver um adaptador para outro webdriver, basta acessar o projeto, abrir um issue e submeter o código.



O arquivo de exemplo é bem simples:



https://gist.github.com/sarahpimentel/82ea0d486f95ddd50764



Configurações e inicialização



As primeiras instruções são configurações do driver. E depois temos a página do Google que é uma extensão da classe PageObject. Os seletores da página são definidos na inicialização da página e caso os seletores mudem, esse é o único local em que será necessário efetuar mudanças. Também é importante salientar também que o único seletor usado no momento é o css. No código, esses seletores são as classes dos objetos que eu pretendo avaliar. No fim, o comando addLoadSelectors. Nele, eu indico um seletor para ser usado para verificar se a página já foi carregada corretamente.



Métodos



Adicione então todos os métodos necessários para o seu teste nessa página. Vamos executar uma pesquisa no Google, então os métodos são:

performSearch, que recebe o termo a ser pesquisado, preenche o campo da pesquisa (setSearchTerm) após certificar-se de que não há nenhum outro valor no campo (clearSearchInput), submete a pesquisa e espera pela página de resultados.



URL



BASE é a URL principal da página. Por exemplo, http://www.amazon.com. O resto da URL é formado com o atributo abaixo.



URL é o complemento da URL BASE citada acima. Nesse caso, não precisei complementar a URL, então usei apenas ‘/’. Se no exemplo da amazon, dado acima, eu quisesse acessar uma página específica, por exemplo, a seção de brinquedos da amazon, o valor desse campo seria ‘/toys’.

Apesar de parecer opcional, se esse parâmetro não for informado, você receberá um erro como esse:



&lt;caminho do projeto&gt;/node_modules/hodman/node_modules/preceptor-core/lib/utils.js:133

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if ((result.substr(-1) === glue) || (arg.substr(0, 1) === glue)

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^

TypeError: Cannot call method 'substr' of undefined



EXPECTED_URL é uma expressão que será avaliada para determinar se o script chegou à página certa. Nesse caso, eu optei por colocar apenas o pedaço principal da URL, já que ao acessar o Google, a URL pode mudar um pouco. Sem esse parâmetro é provável que você encontre o erro: 



Error: Waited for an event, but timed-out. Message:Waited for url that matches 'https://www.google.de/'.



Assert



O Hodman não tem métodos que permitam fazer assert, portanto é necessário importar algum módulo que tenha essa capacidade. Para simplificar, importei o assert. Pelo que vi em uma apresentação sobre esse framework, o Yahoo está usando Mocha para os testes e Chai para realizar os asserts.



Opinião



Mastigadinho assim, o framework parece bem simples. Eu acabei por demorar bem mais do que eu esperava para chegar nesse exemplo. Acho que ainda falta desenvolver melhor a documentação e alguns tratamentos de erros. Tem muito potencial, mas ainda é pouco maduro. O projeto é aberto, portanto quem se interessar, é só baixar e melhora-lo. Se ficou curioso, dá uma olhada na captura de imagem e quem sabe, já segue dando uma olhada no Kobold, faz uma análise e publica um post. :)