PHPStorm: Запускаем тесты на удаленной машине с возможностью отладки

11 Jul 2018

2018-07-11-21:10:29_373x236Не секрет, что современные среды разработки полны полезного функционала, освоение которого позволяет поднять продуктивность разработки до невероятных высот.

Сегодня мы реализуем возможность запуска тестов на проекте в каком-либо контейнере (докер, вагрант, удаленное железо), просмотре их выполнения и возможности анализа результатов. И все это не переключаясь на отдельную консоль.

Почему это удобно? Я уже неоднократно ссылался на удобство контейнеров поскольку они обеспечивают повторяемость окружения, скорость развертывания рабочего проекта и схожесть окружений у всех разработчиков в команде.

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

Дано:

Надо:

Интеграция тестов

1 - настраиваем удаленный интерпретатор PHP

[gallery ids=”2456,2457” type=”rectangular”]

При выборе удаленного интерпретатора автоматически будут подключены настройки маппинга директорий. Если этого не случилось, то придется вручную прописать соответствие путей на удаленной машине каталогам на локальной системе (пункт path mappings).

В этом же разделе можно указать include path если есть такая необходимость (например подключить pear).

2 - Настраиваем конфигурацию тестового фреймворка.

Необходимо выбрать интерпретатор, указать путь до исполняемого файла и выбрать корректный маппинг,

Обратите внимание на то, что все пути указываются как пути на удаленном хосте.

2018-07-11-20:24:22_1184x513

3 - Задаем run configuration для запуска тестов.

2018-07-11-20:22:38_1120x727

4 - Запускаем из меню run.

Здесь кроется одно большое но: на момент написания данной заметки интеграция codeception испытывает некоторые сложности при работе с сессиями и кукисами. Подробнее об этом можете почитать в описании бага на гитхабе. Там же есть и возможные пути решения.

Отладка тестов

Самое интересное во всем этом - возможность отлаживать код непосредственно во время запуска тестов никуда не переключаясь.

5 - Задаем скрипт, который организует коннект к девелоперской машине

Чуть ранее мы уже рассматривали, как выполнять отладку скриптов командной строки. Напишем маленький хелпер и разместим его с правами на запуск где-нибудь на тестовом стенде.

#!/usr/bin/env sh

IP=`echo $SSH_CLIENT | awk '{print $1}'`  
echo #IP  
PHP='/usr/bin/env php -d 'xdebug.remote\_host=${IP}' -d 'xdebug.remote\_autostart=1''  
$PHP "$@"

6 - Добавляем .phpstorm_helpers в маппинг

Пре первом запуске тестов IDE складывает в домашний каталог пользователя специальный набор интеграционных скриптов. Если не добавить его в include path, то мы не сможем выполнить отладку: система будет ругаться на то, что соответствия файлов не найдены.

Для этого мы копируем директорию .phpstorm_helpers в корень проекта (исключаем его в .gitignore) и настраиваем сервер

Заходи в раздел настройки серверов и создаем новый. В котором обязательно включаем path mapping, а затем прописываем соответствия каталогов локального и удаленного. При этом не забываем про .phpstorm_helpers. Иначе не будет работать.

2018-07-11-21:04:49_1180x846

7 - Меняем удаленный интерпретатор на наш скрипт

В настройках php указываем скрипт, который мы написали ранее как экзешник.

2018-07-11-21:07:50_870x389

Теперь у вас есть не только удобный механизм исполнения тестов, но еще и возможность их отладки.

Литература