Статьи

Ускоренный курс по непрерывному тестированию с Sismo

Сообщество PHP приняло культуру тестирования сравнительно недавно. Несмотря на некоторые споры о том, как этого добиться, никто не может утверждать, что ваш код полностью покрыт тестами. В этой статье мы рассмотрим инструмент, который поможет вам в основной части культуры тестирования, называемой непрерывным тестированием . Как описано в Википедии:

Непрерывное тестирование — это процесс выполнения автоматических тестов в рамках конвейера доставки программного обеспечения для получения немедленной обратной связи о бизнес-рисках, связанных с кандидатом на выпуск программного обеспечения.

Sismo — это небольшой компонент, который вы можете легко интегрировать в свои проекты, чтобы упростить процесс непрерывного тестирования. Основной задачей Sismo является запуск ваших тестов и отправка вам уведомлений о статусе. Это все!

плакат

Как установить

Проект Sismo доступен на GitHub и содержит скрипт compile который вы можете запустить, чтобы сгенерировать один файл с именем sismo.php .

Другой способ — загрузить файл прямо с веб-сайта проекта и добавить его в свой проект.

Конфигурирование Sismo

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

 // tests/sismo-config.php $projects = array ( ) ; $projects [ ] = new Sismo \ Project ( '500px API (master branch)' , __DIR__ . '/../' ) ; return $projects ; 

Теперь мы запускаем sismo.php из командной строки.

 php sismo . php build -- config - file = 'tests/config.php' # The --verbose option will tell you what the command is doing. php sismo . php build -- config - file = 'tests/config.php' -- verbose 

Если вы не укажете файл config.php в команде, Sismo будет искать его в каталоге пользователя ~/.sismo/config.php . Вы также можете указать это с помощью переменной окружения, которую вы можете установить с помощью командной строки:

 export SISMO_CONFIG_PATH = "tests/config.php" 

Путь к данным — это место, где Sismo временно сохраняет проекты для запуска тестов. Вы можете использовать опцию --data-path непосредственно в команде или использовать SISMO_DATA_PATH среды SISMO_DATA_PATH чтобы обновить ее.

 php sismo . php build -- config - file = 'tests/config.php' -- data - path = '.sismo/data' -- verbose 

Сисмо билд
Сисмо сборка многословная

Если вы работаете над новой функцией или создаете патч для ошибки, вы можете указать Sismo, в какой ветви выполнить команду.

 // tests/config.php $projects = array ( ) ; $pxProject = new Sismo \ Project ( '500px API (master branch)' , __DIR__ . '/../' ) ; $pxProject - > setBranch ( 'master' ) ; $projects [ ] = $pxProject ; return $projects ; 

По умолчанию Sismo запускает команду phpunit , но вы можете изменить ее, используя метод setCommand при настройке вашего проекта. Вы также можете указать оператор bash, потому что он будет напрямую выполняться на терминале.

 // tests/config.php $pxProject - > setCommand ( './vendors.sh; phpunit' ) ; 

В нашем случае у нас есть проект на нашей локальной машине, но Sismo поддерживает проекты, размещенные на GitHub, Bitbucket и SSH (удаленно).

 // tests/config.php $projects = array ( ) ; $pxProject = new Sismo \ GithubProject ( '500px API (master branch)' , 'whyounes/500pxAPI_Test' ) ; $pxProject - > setBranch ( 'master' ) ; $projects [ ] = $pxProject ; return $projects ; 

Проект GitHub

Использование уведомителей

В Sismo есть список уведомителей, которые вы можете использовать для уведомления о статусе сборки. Наиболее распространенный способ — по электронной почте, но тот же пример применяется для IRC, GitHub и т. Д.

 // tests/config.php $projects = array ( ) ; $mailNotifier = new Sismo \ Notifier \ MailNotifier ( '[email protected]' ) ; $pxProject = new Sismo \ Project ( '500px API (master branch)' , __DIR__ . "/.." ) ; $pxProject - > setBranch ( 'master' ) ; $pxProject - > addNotifier ( $mailNotifier ) ; $projects [ ] = $pxProject ; return $projects ; 

Создание пользовательских уведомителей

Чтобы создать наш собственный уведомитель, нам нужно расширить абстрактный класс Sismo\Notifier\Notifier и определить метод Sismo\Notifier\Notifier . Мы собираемся создать уведомитель для Slack, который будет уведомлять нашу команду в чате о статусе сборки.

После клонирования репозитория Sismo из GitHub вы найдете папку в пространстве имен Sismo куда участники могут добавлять свои собственные уведомители.

Чтобы отправить сообщение в Slack, нам нужен токен, имя канала и необязательное имя пользователя. Вы можете проверить документацию для списка доступных параметров.

 class SlackNotifier extends Notifier { protected $token ; protected $channel ; protected $username ; protected $apiEndpoint = "https://slack.com/api/chat.postMessage" ; protected $messageFormat = "%author% - %name% - %message% - %status%" ; /** * Constructor. * * @param string $token * @param string $channel * @param string $username */ public function __construct ( $token , $channel , $username = null ) { $this - > token = $token ; $this - > channel = $channel ; $this - > username = $username ; } public function notify ( Commit $commit ) { return $this - > sendMessage ( $commit ) ; } } 

Метод notify получит Commit содержащий все подробности о протестированном коммите. Мы также можем использовать метод формата Notifier@format для форматирования сообщения фиксации с использованием атрибута messageFormat .

 class SlackNotifier extends Notifier {  //... /** * Format commit message using the message format * @param Commit $commit * @return string */ protected function getCommitMessage ( $commit ) { $message = $this - > format ( $this - > messageFormat , $commit ) ; return $message ; } /** * Push message to Slack * @param Commit $commit * @return bool|string The response message, or false if an error occured. */ protected function sendMessage ( $commit ) { $curlData = [ "token" = > $this - > token , "channel" = > $this - > channel , "username" = > $this - > username ? : "Sismo Bot" , "text" = > $this - > getCommitMessage ( $commit ) ] ; $url = $this - > apiEndpoint . "?" . http_build_query ( $curlData ) ; $output = file_get_contents ( $url ) ; return $output ; } } 

Хранение информации о сборке

Sismo хранит всю тестовую информацию в базе данных SQLite, которую мы можем найти в папке данных. Мы можем использовать его для отладки или проверки, если что-то пошло не так с приложением во время тестирования.

Сисмо Д.Б.

Мы также можем запустить встроенный PHP-сервер php sismo.php run localhost:9000 для просмотра наших проектов и создания статусов.

Использование Git Hooks

Полезный трюк, который может немного автоматизировать процесс, — это подключить Sismo непосредственно к нашему процессу Git и запускать его всякий раз, когда мы фиксируем новые изменения. Git hooks — это скрипты, хранящиеся в каталоге .git/hooks . Мы будем использовать хук post-commit для запуска Sismo. Вы можете прочитать больше о Git-хуках здесь , здесь и здесь .

 #!/bin/bash rootDir = $ ( git rev - parse -- show - toplevel ) export SISMO_CONFIG_PATH = " $rootDir /tests/config.php" cd $rootDir php sismo . php build -- verbose 

Переменная rootDir содержит корневой путь к нашему проекту, и мы используем его для установки SISMO_CONFIG_PATH среды SISMO_CONFIG_PATH как мы упоминали ранее. Это оно! Скрипт будет запускаться после каждого коммита.

Вывод

Сисмо делает одну вещь, и делает это хорошо. В этой статье мы увидели, как мы можем интегрировать его с нашим циклом разработки и как настроить систему уведомлений. Если вы уже использовали Sismo, сообщите нам свой опыт работы с ним! Если у вас есть какие-либо вопросы или комментарии, не забудьте опубликовать их ниже, и я сделаю все возможное, чтобы ответить на них!