log

taiar

Testes De Aceitação No Codeigniter Com PHPUnit E Selenium

No meu primeiro artigo sobre testes no Codeigniter, abordei como faríamos para utilizar o PHPUnit para testes unitários no framework. O PHPUnit tem uma extensão que possibilita a integração com o Selenium RC, um servidor escrito em Java que consegue interagir com o Browser e executar testes como um usuário o faria. Meu objetivo aqui, como no primeiro artigo não é explorar o assunto de testes mas como integrar Codeigniter + PHPUnit + Selenium para fazer testes de aceitação. Para mais informações sobre os testes, veja as referências no final do artigo.

Como base para esta integração, vamos utilizar a aplicação que desenvolvemos no primeiro artigo, portanto, comece por lá! Considerando que você tem um sistema com as mesmas condições descritas lá, vamos inlcuir no projeto a extensão do PHPUnit para trabalhar com o Selenium. No arquivo composer.json, inclua a chave para baixar o componente:

{
  ...
  "require-dev": {
    ...
    "phpunit/phpunit": "4.1.*",
    "phpunit/phpunit-selenium": ">=1.2"
    ...
  }
  ...
}

e instale com o comando:

composer.phar update

Em seguida, baixe o Selenium RC Server. É um arquivo .jar único que poder ser obtido aqui. O Selenium webdriver usa como browser padrão o Firefox então você precisará tê-lo instalado. Você pode usar outro browser baixando outro webdriver mas nesse artigo utilizaremos o padrão. Para executar o servidor, na pasta onde seu arquivo se encontra:

java -jar selenium-server-standalone-2.*.*.jar

Certifique-se de que sua aplicação Codeigniter também esteja rodando corretamente em algum webserver.

DICA

À partir de alguma versão do PHP, ele vem com um webserver built-in que é bem prático para ambientes de desenvolvimento (evitando que você tenha que configurar um Apache ou Nginx apenas para desenvolver localmente). Vou usar essa funcionalidade aqui indo à pasta que contém a minha aplicação Codeingiter pela linha de comando e executando:

php -S localhost:8888

Ao acessar o browser, sua aplicação deve funcionar normalmente como em qualquer um dos servidores citados anteriormente. Até arquivos .htaccess do Apache são suportados por padrão o que pode faz essa funcionalidade ser compatível com a maioria dos projetos que temos atualmente. Na continuação desse artigo, executarei como descrito a minha aplicação (funciona normalmente se você utilizar outro método).

Voltando…

Vamos agora escrever um teste de exemplo que utilizará o Selenium webdriver. Neste teste iremos:

  1. Acessar a aplicação no atrvés do Firefox;
  2. Verificar se o título da página que iremos acessar é igual a “Welcome to CodeIgniter”, ou seja, a página inicial padrão do Codeigniter.

Eis o código do arquivo /tests/SeleniumTest.php:

<?php
class SeleniumTest extends PHPUnit_Extensions_Selenium2TestCase
{
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost:8888/');
    }

    public function testTitle()
    {
        $this->url('http://localhost:8888/');
        $this->assertEquals('Welcome to CodeIgniter', $this->title());
    }

}

Após criar o arquivo, execute o PHPUnit como fizemos anteriormente:

./vendor/bin/phpunit

O resultado obtido deve ser parecido com:

taiar@guestxor:~/dev/ci$ ./vendor/bin/phpunit
PHPUnit 4.1.3 by Sebastian Bergmann.

Configuration read from /home/taiar/dev/ci/phpunit.xml.dist

..

Time: 6.33 seconds, Memory: 4.00Mb

OK (2 tests, 2 assertions)

Foram executados dois testes pois o primeiro era o teste unitário que criei no meu primeiro artigo. Como no artigo anterior, não abordarei aqui a teoria e todas as grandes vantagens por trás desses testes mas é recomendável estudo e aprofundamento no assunto. Como referência, deixo este link exemplificando diversas funções de verificação do PHPUnit Selenium e recomendo a leitura de todo o arquivo de exemplo afim de entender melhor as possibilidades que este servidor fornece.

Referências