Установка PHPUnit и Selenium

Настройка тестов

Статья описывает настройку окружения для функциональных тестов на PHP.
Например, такой типичный тест может:

  • Открыть URL http://example.org/mypage в браузере
  • Проверить, что на странице 20 картинок
  • Нажать на вторую ссылку в навигации
  • Проверить, что на новой странице также 20 картинок
  • Закрыть браузер

А также произвести сложные выборки из DOM, вставить в поля формы текст и перейти по истории назад и вперёд.

Вот как это может выглядеть, на примере тестирования модуля для альплагеря Туюк-Су, который я разрабатывал:

Установка PHPUnit

PHPUnit — наиболее популярный фреймворк для юнит-тестирования в PHP.

Установить в проект PHPUnit:

(официальная документация по установке)

Установка Selenium

Selenium Server — это инструмент, который позволяет писать автоматизированные тесты UI веб-приложений или сайтов. Запущенный тест выглядит как браузер, который сам нажимает кнопки, ходит по ссылкам и сверяет, что отображается на странице с тем, что должно отображаться по заданному сценарию.

  • Скачать с официального сайта последнюю версию selenium-server-standalone-<version>.jar
  • Положить .jar-файл в /usr/local/bin (или куда удобно, я храню в /opt/ с полным названием, включая версию, и делаю ссылку в /usr/local/bin с коротким именем) 
  • Перед тестами запускать сервер командой java -jar /usr/local/bin/selenium-server-standalone[-<version>].jar.
    Опция --port позволяет указать порт, на котором сервер будет слушать соединения (по-умолчанию 4444). Опция полезна для решения конфликтов с веб-драйверами, которые могут по-умолчанию слушать тот же 444-й порт.

Для того, чтобы Selenium мог запускать различные браузеры, нужно установить отдельные адаптеры для каждого.

geckodriver — это адаптер для взаимодействия Selenium и браузеров на основе движка Gecko, на котором работает фаерфокс.

  • Скачать с официального репозитория последнюю версию для нужной платформы.
  • Положить geckodriver в любой из каталогов PATH (Например, /usr/local/bin), чтобы исполняемый файл был доступен для сервера селениума.

ChromeDriver — адаптер для браузеров на основе Chromium, а значит, и хрома.

Настройка и запуск

Установить PHPUnit в директорию с проектом:

Настроить конфиг PHPUnit phpunit.xml (тесты будут храниться в Test/Selenium/)

Перед тестами запустить сервер Selenium:

Стандартный тест должен наследовать класс PHPUnit_Extensions_Selenium2TestCase и реализовывать метод setUp(), в котором настраивается соединение с Selenium.

Тесты запускаются командой:

Можно добавить команду в composer.json, чтобы не печатать каждый раз аргументы:

 

Примеры кода, туториалы