Перед прочтением даного раздела рекомендуется прочитать документацию по Selenium и документацию по PHPUnit. Дальше мы подытожим основные принципы написания функциональных тестов в Yii:
Как и модульный тест, функциональный тест пишется в классе XyzTest
,
наследующего класс CWebTestCase, где Xyz
— имя класса, подлежащего
тестированию. Мы можем использовать все методы класса
PHPUnit_Extensions_SeleniumTestCase
, потому что он является предком класса
CWebTestCase.
Класс функционального теста сохраняется в файле с именем XyzTest.php
. По
соглашению, файл функционального теста может храниться в директории
protected/tests/functional
.
Основное содержимое класса теста — набор тестовых методов с именами
testAbc
, где Abc
— часто имя тестируемой особенности. Например, для
тестирования особенности входа пользователя у нас есть метод testLogin
.
Тестовый метод обычно содержит последовательность выражений, которые будут являться командами проверки для Selenium RC, показывающей ход и результаты тестирования веб-приложения. В нем также содержатся выражения утверждений для проверки, что веб-приложение отвечает именно так, как ожидалось.
Перед описанием, как же писать функциональный тест, давайте глянем файл
WebTestCase.php
, сгенерированный командой yiic webapp
. Этот файл определяет
класс WebTestCase
, который может служить базовым для всех классов
функциональных тестов.
define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
class WebTestCase extends CWebTestCase
{
/**
* Метод выполняется перед запуском теста.
* В основном, устанавливает базовый URL тестируемого приложения.
*/
protected function setUp()
{
parent::setUp();
$this->setBrowserUrl(TEST_BASE_URL);
}
…
}
Класс WebTestCase
в основном устанавливает базовый URL тестируемых страниц.
Далее, в тестовых методах, мы можем использовать относительные URL для
определения тестируемых страниц.
Мы также должны обратить внимание, что согласно базового тестового URL в
качестве входной точки используется файл index-test.php
вместо файла
index.php
. Единственное различие между сценариями index-test.php
и
index.php
то, что в качестве файла конфигурации приложения первый использует
файл test.php
, а второй — файл main.php
.
Теперь мы опишем, как протестировать функцию отображения записи демо-блога. Сначала мы пишем тестовый класс, как показано ниже. Отметим, что тестовый класс наследует от базового класса, который мы только что описали:
class PostTest extends WebTestCase
{
public $fixtures=array(
'posts'=>'Post',
);
public function testShow()
{
$this->open('post/1');
// проверяем наличие заголовка некой записи
$this->assertTextPresent($this->posts['sample1']['title']);
// проверяем наличие формы комментария
$this->assertTextPresent('Leave a Comment');
}
…
}
Как и при написании класса модульного теста, мы объявляем фикстуры для
использования этим тестом. Здесь мы показываем, что должна использоваться
фикстура Post
. В тестирующем методе testShow
мы сначала поручаем
Selenium RC
открыть URL post/1
. Заметим, что это относительный URL, а
полный URL формируется путем добавления относительного к базовому URL (т.е.
http://localhost/yii/demos/blog/index-test.php/post/1
), который мы установили
в базовом классе. Затем мы проверяем, что можем найти заголовок записи
sample1
на данной странице. И мы также проверяем, что страница содержит текст
Leave a comment
.
Подсказка: Перед запуском функциональных тестов запустите сервер Selenium-RC. Сделать это можно командой
java -jar selenium-server.jar
, выполненной в директории, в которую установлен Selenium.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.