Instalando as bibliotecas necessárias
Índice
O i-Educar utiliza bibliotecas e softwares livres para a criação e execução de testes unitários e funcionais. Esse guia assume o uso de Linux ou sistemas Unix.
PHPUnit
O PHPUnit é um framework da família xUnit de frameworks de testes. Foi desenvolvido para possibilitar o suporte de TDD em projetos que utilizam a linguagem de programação PHP. A escolha do PHPUnit se deu por possuir uma documentação abrangente e pela diversa quantidade de funcionalidades como a integração com ambientes de integração contínua, geração de métricas de cobertura de testes, execução de testes Selenium, entre outras.
O i-Educar utiliza a última versão estável do PHPUnit, a 3.4. A instalação do PHPUnit é bastante simples através do PEAR (PHP Extension and Application Repository).
# pear channel-discover pear.phpunit.de # pear install phpunit/PHPUnit
Pronto! Isso é tudo que é necessário para instalar o PHPUnit. Após instalado, você deverá ter registrado no seu path o comando phpunit ao qual lhe possibilitará executar os testes unitários e funcionais criados para o i-Educar:
$ phpunit
Caso o comando não esteja disponível em seu terminal, adicione-o ao seu path (geralmente esse script estará em /usr/bin/phpunit.
vfsStream
vfsStream é um stream wrapper que permite a criação de testes que executam comandos de criação de arquivos e diretórios no filesystem, já que cria um filesystem virtual. É muito útil pois evita que os testes criem de fato arquivos e diretórios, tornando os testes unitários lentos de executar.
# pear channel-discover pear.php-tools.net # pear install pat/vfsStream-alpha
O uso do vfsStream no i-Educar pode ser observado na classe de testes tests/Utils/FileStreamTest.
Checkpoint
Após instalar o PHPUnit e o vfsStream, execute os seguintes comandos para executar os testes unitários do i-Educar:
$ cd /var/www/ieducar/ $ phpunit tests/unit/AllTests.php
Após executar o comando, deverá aparecer um resultado como o seguinte:
http://farm3.static.flickr.com/2499/3981741855_549262cc1d_o.png
Selenium
O Selenium é um software para a criação e execução de testes funcionais. Ele funciona ao executar testes pré-gravados em um navegador web, o que é ótimo para o teste de casos de uso. É dividido em algumas ferramentas, sendo que, dessas, são usados o Selenium IDE e o Selenium Remote Control (RC).
Selenium IDE
O Selenium IDE é uma extension para o Firefox que possibilita a gravação de testes, edição e execução de testes no navegador. Uma das grandes utilidades do Selenium IDE é a possibilidade de exportar um caso de teste gravado para várias linguagens de programação diferentes, entre elas, o PHP.
Para instalar o Selenium IDE, é necessário, antes de tudo, ter o navegador web Firefox instalado. Após isso, visite a página de download oficial do projeto Selenium e clique no link Download que está ao lado do nome Selenium IDE (na época desse escrito, a versão era a 1.0.2). Reinicie o Firefox após a instalação e vá até o menu Ferramentas > Selenium IDE para acessar a IDE.
Leia a documentação oficial para aprender como gravar e executar testes Selenium.
Selenium Remote Control
O Selenium Remote Control é um servidor que permite a execução de testes Selenium em múltiplos navegadores web. Usaremos o RC para executar os testes funcionais das classes PHPUnit. O pré-requisito do Selenium RC é ter o Java instalado.
Na verdade, nenhuma instalação é necessária pois o RC é um JAR executável que possui o servidor Jetty integrado. Faça o download do JAR na página de download oficial do projeto Selenium, através do link Download que está ao lado do nome Selenium RC (na época desse escrito, a versão era a 1.0.1. Uma sugestão para isso é baixar o jar para /opt:
$ cd /opt $ wget http://release.seleniumhq.org/selenium-remote-control/1.0.1/selenium-remote-control-1.0.1-dist.zip $ unzip selenium-remote-control-1.0.1-dist.zip
Após o download, execute o jar:
$ java -jar /opt/selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar -interactive
O parâmetro -interactive serve para iniciar o Selenium em modo interativo. Ao executar o comando anterior, você deverá ter o seguinte em seu terminal:
22:12:56.268 INFO - Java: Apple Inc. 11.3-b02-83 22:12:56.270 INFO - OS: Mac OS X 10.5.8 x86_64 22:12:56.271 INFO - v1.0-beta-2 [2571], with Core v1.0-beta-2 [2330] 22:12:56.387 INFO - Version Jetty/5.1.x 22:12:56.388 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 22:12:56.389 INFO - Started HttpContext[/selenium-server,/selenium-server] 22:12:56.390 INFO - Started HttpContext[/,/] 22:12:56.402 INFO - Started SocketListener on 0.0.0.0:4444 22:12:56.402 INFO - Started org.mortbay.jetty.Server@24148662 Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http://www.yahoo.com)
Como teste, cole o seguinte comando na sessão interativa do Selenium RC:
cmd=getNewBrowserSession&cmd=open&1=*firefox&2=http://www.softwarepublico.gov.br
O comando anterior irá criar uma nova sessão de testes no navegador Firefox e abrirá o endereço http://www.softwarepublico.gov.br. Isso ocorrerá muito rapidamente para ver o site do Portal do Software Público. No entanto, será possível observar a seguinte janela aberta no seu desktop:
http://farm3.static.flickr.com/2579/3981707481_3c1e1ef62d_o.jpg
Os passos seguintes não são estritamente necessários mas a leitura deles poderá lhe ajudar a evitar problemas que podem causar dor de cabeça para iniciantes:
Notas para usuários Debian
Nas versões mais recentes do Debian, o Firefox fora substituído por um derivado do projeto Debian chamado Iceweasel. Como o Selenium procura pelo Firefox por padrão, é necessário algum trabalho adicional para antes de iniciar o servidor RC e de executar os testes. Para isso, utilize o parâmetro -DfirefoxDefaultPath e informe o caminho do Iceweasel no filesystem:
# java -jar /opt/selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar -DfirefoxDefaultPath=/usr/lib/iceweasel/firefox-bin
Perfil Firefox separado para testes
Se você instala extensões Firefox, poderá achar a inicialização do navegador para testes muito lenta em sessões Selenium. Para melhorar a performance durante a execução dos testes no Firefox, crie um perfil Firefox separado. No Linux, isso pode ser feito utilizando o comando firefox -profileManager:
# firefox -profileManager
Uma janela como a seguinte irá aparecer em seu desktop:
http://farm3.static.flickr.com/2476/3982606210_28d9a6c800_o.png
Clique em novo e dê o nome Selenium para o seu novo perfil. Salve o perfil em um diretório chamado Selenium no home de seu usuário (assim fica fácil copiar o perfil para outros computadores). Assim, você deverá ter o seguinte diretório no seu home:
$ ls ~/Selenium/IceweaselProfile blocklist.xml chrome extensions foxyproxy.xml permissions.sqlite selenium-ide-scripts xpti.dat bookmarkbackups compatibility.ini extensions.cache key3.db places.sqlite signons3.txt XUL.mfasl bookmarks.html compreg.dat extensions.ini localstore.rdf pluginreg.dat urlclassifier3.sqlite ybookmarks.sqlite Cache content-prefs.sqlite extensions.rdf mimeTypes.rdf prefs.js urlclassifierkey3.txt ybookmarks@yahoo.log cert8.db cookies.sqlite favoriteTags.txt minidumps search.sqlite webappsstore.sqlite cert_override.txt downloads.sqlite formhistory.sqlite OfflineCache secmod.db XPC.mfasl
Feito isso, inicialize o Selenium RC com o parâmetro adicional -firefoxProfileTemplate:
$ java -jar /opt/selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar -firefoxProfileTemplate "/home/example/Selenium/IceweaselProfile"
Ao executar os testes funcionais, esse profile separado será utilizado. Mais informações sobre os profiles do Firefox na documentação de suporte da Mozilla.
Proxy
Caso a rede em que trabalhe tenha um proxy e você precise executar os testes funcionais em uma instalação i-Educar que esteja em um servidor web de sua rede ou até mesmo na Internet, você pode passar as suas credenciais de autenticação no proxy usando os parâmetros -Dhttp.proxyHost, -Dhttp.proxyPort, -Dhttp.proxyUser e -Dhttp.proxyPassword:
java -jar /opt/selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128 -Dhttp.proxyUser=proxy_username -Dhttp.proxyPassword=proxy_password
Script de inicialização
Para facilitar a inicialização do Selenium RC Server, crie um script chamado dev_selenium em /usr/bin com o seguinte conteúdo:
#!/bin/bash java -jar /opt/selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar -firefoxProfileTemplate "/home/example/Selenium/IceweaselProfile" -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128 -Dhttp.proxyUser=proxy_username -Dhttp.proxyPassword=proxy_password -interactive -DfirefoxDefaultPath=/usr/lib/iceweasel/firefox-bin
Nota: remova os parâmetros que sejam desnecessários para o seu uso. Por exemplo: caso não utilize um proxy, remova os parâmetros relacionados ou, caso seja usuário Ubuntu, remova o parâmetro firefoxDefaultPath.
Salve o arquivo e dê permissão de execução:
# chmod +x /usr/bin/dev_selenium
Para inicializar o serviço, bastará usar o seguinte comando:
$ dev_selenium
Dessa forma você pode esquecer que os parâmetros supracitados existem, sobrando mais tempo para o que realmente importa!
Checkpoint
Após instalar o Selenium RC, execute os seguintes comandos para executar todos os testes funcionais do i-Educar:
$ cd /var/www/ieducar $ phpunit tests/functional/AllTests.php
Esses testes demoram um pouco mais para executar do que os testes unitários. Durante a execução dos testes, a janela do Firefox será aberta e fechada algumas vezes; isso ocorre porque o PHPUnit isola cada caso de teste em uma sessão de testes Selenium.
