terça-feira, 6 de novembro de 2007

Usando Selenium e PHP para testes de aceitação automatizados

Este é um guia rápido para você utilizar o Selenium e o SimpleTest em testes de aceitação automatizados.

Selenium é uma ferramenta para testar aplicações web pelo navegador de forma automatizada, exatamente como o usuário faria.

SimpleTest é uma ferramenta para estrutura de testes unitários automáticos, seguindo o padrão XUnit.

Suponho que você já tenha instalado um servidor WEB com PHP e PEAR rodando. Além de ter uma JRE configurada.

Vamos começar instalando o Selenium
Baixe o Selenium Remote Control no endereço http://www.openqa.org/selenium-rc/ e o descompacte.

Terá uma pasta selenium-server-0.9.2 (esta é a versão que peguei), eu a copiei próxima da raiz, mas você pode deixar aonde quiser.

O selenium-server.jar é o nosso principal arquivo, ele é que interpreta os comandos e aciona o navegador.

Para acionar o servidor basta usar o comando java -jar selenium-server.jar no prompt de comando.

Uma dica importante:
Ao iniciar o servidor pela primeira vez irá aparecer à janela do Firewall do Windows, perguntando se deseja manter o aplicativo bloqueado, permita o acesso. Caso tenha escolhido outra opção, encerre o java/javaw.exe no Gerenciador de Arquivos do Windows e inicie o selenium-server novamente e desse vez permita o acesso.

Beleza, agora que o selenium já está funcionado você pode testa-lo pelo prompt mesmo, encerre com Ctrl+C e inicie novamente agora em modo interativo com java -jar selenium-server.jar -interactive. O modo interativo permite que você envie comandos a serem interpretados pelo navegador.

Inicia uma sessão de navegador do Firefox, se preferir Internet Explorer use “iexplore”.
cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com

O prompt retorna a sessão em que o selenium vai conversar com o navegador. No meu caso 260113, substitua as chamadas daqui para frente pelo nº que aparecer aqui.
Got result: OK,260113 on session 260113

Abre o navegador com o endereço indicado.
cmd=open&1=http://www.google.com/webhp&sessionId=260113

Escreve a frase ola mundo na caixa de texto.
cmd=type&1=q&2=ola mundo&sessionId=260113

Clica no botão de pesquisa
cmd=click&1=btnG&sessionId=260113

Pega o título da página
cmd=getTitle&sessionId=260113

O resultado é o titulo da página
Got result: OK,ola mundo - Google Search on session 260113

Encerra a sessão e fecha o navegador
cmd=testComplete&sessionId=260113

Durante a execução dos comandos você pode reparar que uma janela do navegador é aberta e obedece aos comandos do servidor.

Nessa hora você me pergunta:
Ótimo, posso fazer o que fazia no navegador por meio de uma programinha e checar os resultados!!! Mas não tem um jeito mais fácil de fazer isso?
Claro que sim, vamos usar o selenium-cliente PHP e o SimpleTest para isso.

Copie a pasta selenium-php-client-driver-0.9.2 para o seu diretório www. Lá está o cliente selenium para php. Já temos um servidor para atender aos testes e agora mão a obra.
Corrija os caminhos do require_once antes de testar. Se precisar use a função set_include_path.

require_once"simpletest/simpletest.php";
require_once"simpletest/autorun.php";
require_once "Testing/Selenium.php";

class GoogleTest extends UnitTestCase{

private $selenium;

/**
* Metodo é executado antes de cada teste.
* Testing_Selenium e inicia a sessão.
*/
public function setUp(){
$this->selenium = new Testing_Selenium("*firefox", "http://www.google.com");
$this->selenium->start();
}


/**
* Metodo é executado após a execução de cada teste.
* Encerra a sessão.
*/
public function tearDown(){
$this->selenium->stop();
}


/**
* Testa uma busca no google.
* É aberto o navegador.
* Escreve a frase ola mundo na caixa de texto.
* Clica no botão de pesquisa.
* Aguarda o carregamento ou 10s.
* testa se o padrão /ola mundo/ está no titulo da página.
*/
public function testGoogle(){
$this->selenium->open("/");
$this->selenium->type("q", "ola mundo");
$this->selenium->click("btnG");
$this->selenium->waitForPageToLoad(10000);
$this->assertPattern("/ola mundo/",$this->selenium->getTitle());
}
}
?>

3 comentários:

Unknown disse...

olá, parabens pelo post mas estou com uma duvida

criei este arquivo para testes pelo selenium ide, exportei para php:

http://uzeh.webcindario.com/muaz.rar

tenho o selenium remote instalado



baixei o simple teste...


mas como faço para rodar os teste em php


o simpletest faz isso ou possoo fazer pelo selenium

Unknown disse...

Muito legal o seu post!

Unknown disse...

Muito legal o seu post!