O que é Headless Browser e porque você testador deve saber sobre
Autor: Elias Nogueira | Publicado: 2013-09-04T08:33:00-03:00


O que é Headless Browser
Do início, qualquer browser web tem que ser capaz de fazer três coisas:

Dado um endereço, acessar uma página html
Renderizar o conteúdo em DOM, executar scripts dentro da tag script, e torná-lo disponível na página
Renderizar o DOM em um conteúdo visual

Um browser que somente faz o primeiro item é chamado de "text-based" 
Um browser que cobre os três itens são os browsers que conhecemos atualment 
Um headless browser cobre os dois primeiros itens

Logo, headless browser um browser web sem uma interface gráfica, ou seja, não conseguimos ver o conteúdo da página na nossa tela, mas este browser consegue executar qualquer ação sobre a URL desejada.



Para que ele serve?
Basicamente para duas coisas: como crawler e como um browser para testes mais rápidos.



Browser para testes mais rápidos?
A crescente utilização de headless browsers é a capacidade de executarmos testes de uma maneira muito mais rápida do que um browser com interface gráfica.
Ele se torna mais rápido por não necessitar carregar alguns conteúdos visuais, como aplicar estilos visuais em elementos e carregamento de imagens.

Eles podem ser utilizados para executar a sua suíte de automação por completo, mas o maior ganho em ter scripts de teste executando em um headless browser é velocidade com que temos um feedback.

Pense em um sistema de Integração Contínua, a cada comportamento (commit, tempo, versão, etc...) um sistema de CI faz todo um processo (compilação, testes unitários e/ou integração, deploy e testes de aceitação). Neste processo um dos últimos (se não o último) são os testes de aceitação (aquele que abre um browser web e executa todas as ações), mas executar estes testes diariamente em um ambiente de CI toma muito tempo para nos dar um feedback que necessitamos.

O que algumas pessoas costumam fazer é separar uma pequena parte dos scripts mais importantes (smoke ou sanity) com ferramentas conhecidas (Selenium, Watir, Robot Framework), mas estes ainda tomam um tempo precioso na execução por abrirem um browser real e executarem uma série de ações.

Outras pessoas, e isso vem se tornando popular, criam ou atualizam scripts para executarem sobre headless browser. Isso nos dá um enorme ganho de execução nestes testes mais importantes e um feedback mais rápido se algum comportamento que será visualizado pelo usuário não estiver ok.



Quais headless browsers podemos utilizar?
Há uma séria de headless browser disponíveis. A grande maioria delas (e as melhores) são inclusive open source. Uma grande parte dela é construida sobre o WebKit e é escrita (tanto o código do browser quanto o script para executar o teste) em JavaScript.
Abaixo vou listar apenas alguns, e mais populares:

PhantomJS
CasperJS
SlimerJS (Gecko) 
HtmlUnit
ZombieJS


Um ponto interessante é que o Selenium/WebDriver pode executar testes em dois dos mais populares headless browsers:

HtmlUnit através do HtmlUnitDriver
PhantomJS através do GhostDriver




Onde posso ver um exemplo?
Aqui mesmo no SemBugs existe um post de uma apresentação minha no Web Test Meeting sobre como usar o básico do CasperJS.
O vídeo possui um pouco mais de 1h.


Apresentação sobre CasperJS no Test Web Meeting




Observação
Os possíveis termos que você testador pode não conhecer contém links para a sua descrição.
É totalmente recomendado que você leia também cada item com um link ;)

Abraços!