Тестирование web-приложений с использованием Selenium и PHPUnit

Кратко, Selenium — это инструмент для тестирования web-приложений. Он позволяет тестировать сайт “от лица пользователя” на уровне операций браузера, таких как клики, ожидание загрузки, поиск элементов на странице. Selenium устанавливается как http-сервер, написанный на java, который умеет управлять браузером и делать в нем различные действия.

Для тестирования приложений, написанных на PHP, нам понадобится установить Selenium на сервере, Selenium IDE в качестве дополнения Firefox, PHPUnit, дополнения к Selenium IDE для автоматической генерации кода теста.

Установка Selenium-сервера. На официальной странице загрузок скачиваем Selenium Server в виде jar архива. На момент написания статьи это версия 2.24.1. После запуска сервер будет находиться на 4444-м порту.

java -jar selenium-server-standalone-2.24.1.jar

Установка Selenium IDE. Скачиваем и устанавливаем дополнение для Firefox. На момент написания статьи Selenium IDE имеет версию 1.8.1. Также скачиваем и устанавливаем аддон для генерации PHP-кода, который называется PHP Formatters. Этот аддон будет добавлен в Selenium IDE и позволит сохранить тест в нужном формате ( PHPUnit, Testing_Selenium ). Selenium IDE работает по следующему принципу: вы открываете приложение в Firefox, запускаете Selenium IDE ( Tools -> Selenium IDE или Ctrl+Alt+S ), выполняете на странице какие-либо действия ( клики, переходы, заполнения и отправка форм ), сохраняете результат в виде PHPUnit_Extensions_SeleniumTestCase класса. Установка PHPUnit, PHPUnit_Selenium и Testing_Selenium. Тесты, сгенерированные при помощи Selenium IDE, будут запускаться через PHPUnit. Эти тесты будут наследованы от PHPUnit_Extensions_SeleniumTestCase.

pear upgrade --force PEAR
pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear channel-discover components.ez.no
pear install --alldeps phpunit/PHPUnit
pear install phpunit/PHPUnit_Selenium
pear channel-discover saucelabs.github.com/pear
pear install Testing_Selenium-beta

Пример тестирования. Протестируем страницу авторизации GitHub. Для этого зайдем на главную страницу, запустим Selenium IDE, пройдем по ссылке “Sign In”, введем некорректное имя пользователя и пароль и нажмем кнопку. На экране должно появиться сообщение “Incorrect username or password.”. Теперь сгенерируем для этого PHPUnit тест ( в окне Selenium IDE File -> Export Test Case As -> PHP(PHPUnit) ). Selenium IDE сгенерирует класс, который мы сохраним под именем GithubTest.php. Теперь изменим немного наш класс, добавив проверку на сообщение об ошибке, изменив название класса и название метода.

class GithubTest extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox');
        $this->setBrowserUrl('http://github.com');
    }

    public function testLogin()
    {
        $this->open('/');
        $this->click('link=Sign in');
        $this->waitForPageToLoad('30000');
        $this->type('id=login_field', '####');
        $this->type('id=password', '####');
        $this->click('name=commit');
        $this->waitForPageToLoad('30000');
        $this->assertTrue($this->isElementPresent('//div[contains(., \'Incorrect username or password.\')]'));
    }
}

Теперь самое интересное. Запускаем наш тест.

phpunit GithubTest.php

Откроется 2 окна Firefox, в одном будет запущено наше приложение, во втором будет отображаться журнал событий. Далее в консоль будет выведен результат теста.

PHPUnit 3.6.11 by Sebastian Bergmann
Time: 33 seconds, Memory: 10.25Mb
OK (1 test, 1 assertion).

В тестах, наследованных от PHPUnit_Extensions_SeleniumTestCase, доступны все методы и assert’ы PHPUnit. Но Selenium имеет дополнительные методы. Полную документацию по методам можно прочитать здесь. Вывод. Такой способ тестирования увеличивает эффективность разработки. И уменьшает время, затраченное на тестирование приложения. После написания теста тестировщику достаточно запустить тест и ждать результата.