Кратко, 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 имеет дополнительные методы. Полную документацию по методам можно прочитать здесь. Вывод. Такой способ тестирования увеличивает эффективность разработки. И уменьшает время, затраченное на тестирование приложения. После написания теста тестировщику достаточно запустить тест и ждать результата.