Antes de ler esta seção, é recomendável que você primeiro leia a documentação do Selenium e a documentação do PHPUnit. Nós resumimos a seguir os princípios básicos de escrita de testes funcionais no Yii:
Como nos testes unitários, um teste funcional é escrito em termos de uma
classe XyzTest
que estende de CWebTestCase, onde Xyz
representa a
classe que está sendo testada. Uma vez que
PHPUnit_Extensions_SeleniumTestCase
é a classe-mãe de CWebTestCase,
podemos usar todos os métodos herdados desta classe.
A classe do teste funcional é salva num arquivo PHP chamado XyzTest.php
.
Por convenção, o arquivo do teste funcional pode ser armazenado no diretório
protected/tests/functional
.
A classe de teste contém principalmente um conjunto de métodos de teste
chamados como testAbc
, onde Abc
geralmente é o nome de uma funcionalidade
que será testada. Por exemplo, para testar a funcionalidade de login, podemos
ter um método de teste chamado testLogin
.
Um método de teste geralmente contém uma série de declarações que emitirão comandos para o Selenium RC interagir com a aplicação Web que está sendo testada. Também contém declarações de asserção para verificar que a aplicação Web responde conforme o esperado.
Antes de explicarmos como escrever um teste funcional, observaremos o arquivo
WebTestCase.php
gerado pelo comando yiic webapp
. Este arquivo define a
classe WebTestCase
que pode servir como a classe-mãe de todas as classes de
testes funcionais.
define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
class WebTestCase extends CWebTestCase
{
/**
* Configura antes que cada método de teste seja executado.
* Define principalmente a URL base da aplicação de testes.
*/
protected function setUp()
{
parent::setUp();
$this->setBrowserUrl(TEST_BASE_URL);
}
......
}
A classe WebTestCase
define principalmente a URL base de todas as páginas que
serão testadas. Mais adiante, nos métodos de teste, podemos usar URLs relativas
para especificar quais páginas serão testadas.
Também devemos prestar atenção se usamos na URL base de testes o arquivo
index-test.php
como script de entrada ao invés de index.php
. A única
diferença entre index-test.php
e index.php
é que o primeiro usa a
configuração de aplicação test.php
enquanto o segundo usa main.php
.
Agora descrevemos como testar a funcionalidade de mostrar um post no exemplo de blog. Primeiro escrevemos a classe de teste como segue, observando que ela estende da classe-mãe que acabamos de mostrar:
class PostTest extends WebTestCase
{
public $fixtures=array(
'posts'=>'Post',
);
public function testShow()
{
$this->open('post/1');
// verifica se o título do post de exemplo existe
$this->assertTextPresent($this->posts['sample1']['title']);
// verifica se o formulário de comentários existe
$this->assertTextPresent('Leave a Comment');
}
......
}
Como ao escrever classes de testes unitários, nós declaramos as fixtures que
serão usadas por este teste. Aqui indicamos que a fixture Post
deve ser usada.
No método de teste testShow
, primeiros instruimos o Selenium RC a acessar a
URL post/1
. Observe que esta é uma URL relativa, e que a URL completa é
formada adicionando-a à URL base que configuramos na classe-mãe (ou seja,
http://localhost/yii/demos/blog/index-test.php/post/1
). Então verificamos que
podemos encontrar o título do post sample1
na página da Web atual. E nós
também verificamos que a página contém o texto Leave a Comment
(deixe um
comentário).
Dica: Antes de rodar os testes funcionais, o servidor do Selenium-RC deve estar iniciado. Isso pode ser feito executando-se o comando
java -jar selenium-server.jar
dentro do diretório de instalação do servidor do Selenium.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.