Функціональне тестування

Перед прочитанням даного розділу рекомендується прочитати документацію по 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.

Be the first person to leave a comment

Please to leave your comment.