Статьи

Запуск модульных тестов при развертывании на веб-сайтах Windows Azure

 

При развертывании приложения на веб-сайтах Windows Azure выполняется ряд шагов развертывания. Для проектов .NET запускается msbuild. Для приложений node.js список зависимостей восстанавливается. Для приложений PHP файлы копируются из системы управления исходным кодом в реальный веб-корень, который обслуживается публично. Не было бы здорово, если бы веб-сайты Windows Azure отказывались развертывать свежий исходный код всякий раз, когда модульные тесты не выполняются? В этом посте я покажу как.

Отказ от ответственности:   я использую PHP и PHPUnit здесь, но тот же подход может быть использован для node.js. .NET немного сложнее, так как большинство участников тестирования не поддерживаются песочницей Windows Azure Web Sites. Однако я уверен, что в ближайшем будущем эта проблема будет решена, и тот же метод может быть использован для приложений .NET.

Наш образец приложения

Прежде всего, давайте создадим простое приложение. Вот очень простой пример с использованием фреймворка Silex, который похож на фреймворки, такие как Sinatra и Nancy .

  <?php
  require_once(__DIR__ . '/../vendor/autoload.php');
  
  $app = new \Silex\Application();
  
  $app->get('/', function (\Silex\Application $app)  {
      return 'Hello, world!';
  });
  
 $app->run();

Далее мы можем создать несколько модульных тестов для этого приложения. Поскольку само наше приложение не так сложно для тестирования, давайте вместо этого создадим несколько фиктивных тестов:

  <?php
  namespace Jb\Tests;
  
  class SampleTest
      extends \PHPUnit_Framework_TestCase {
  
      public function testFoo() {
          $this->assertTrue(true);
      }
 
     public function testBar() {
         $this->assertTrue(true);
     }
 
     public function testBar2() {
         $this->assertTrue(true);
     }
 }

Как видно из нашей IDE, три модульных теста работают отлично.

Запуск PHPUnit в PhpStorm

Теперь давайте посмотрим, сможем ли мы подключить их к веб-сайтам Windows Azure…

Создание сценария развертывания веб-сайтов Windows Azure

Веб-сайты Windows Azure позволяют нам настраивать развертывание. Используя инструменты azure-cli , мы можем выполнить следующую команду:

Как видно на следующем снимке экрана, эта команда позволяет нам указать некоторые дополнительные параметры, такие как указание типа проекта (ASP.NET, PHP, node.js,…) или типа сценария (batch или bash).

образ

Выполнение этой команды делает две вещи: она создает файл .deployment, который сообщает веб-сайтам Windows Azure, какую команду следует запускать в процессе развертывания, и файл deploy.cmd (или deploy.sh, если вы выбрали сценарий bash), который содержит весь процесс развертывания. Давайте сначала посмотрим на файл .deployment :

 [config]
 command = bash deploy.sh

Это очень простой файл, который сообщает веб-сайтам Windows Azure вызвать сценарий deploy.sh с использованием bash в качестве оболочки. По умолчанию файл deploy.sh будет выглядеть так:

  #!/bin/bash
  
  # ----------------------
  # KUDU Deployment Script
  # ----------------------
  
  # Helpers
  # -------
  
 exitWithMessageOnError () {
   if [ ! $? -eq 0 ]; then
     echo "An error has occured during web site deployment."
     echo $1
     exit 1
   fi
 }
 
 # Prerequisites
 # -------------

Этот скрипт выполняет две вещи: устанавливает кучу переменных окружения, чтобы у нашего скрипта были все пути к хранилищу исходного кода, целевому корню веб-сайта и некоторым известным командам. Затем он запускает исполняемый файл KuduSync , помощник, который копирует файлы. из репозитория исходного кода в корень веб-сайта с использованием оптимизированного алгоритма, который копирует только файлы, которые были изменены. Для .NET будет выполнено третье действие: запуск msbuild для компиляции исходных кодов в двоичные файлы.

Прямо перед частью, которая гласит # Развертывание , мы можем добавить несколько дополнительных шагов для запуска модульных тестов. Мы можем вызвать исполняемый файл php.exe (расположенный на диске D: \ на веб-сайтах Windows Azure) и запустить phpunit.php, передав путь к тестовому файлу конфигурации:

##################################################################################################################################
  # Testing
  # -------
  
  echo Running PHPUnit tests.
  
  # 1. PHPUnit
  "D:\Program Files (x86)\PHP\v5.4\php.exe" -d auto_prepend_file="$DEPLOYMENT_SOURCE\\vendor\\autoload.php" "$DEPLOYMENT_SOURCE\\vendor\\phpunit\\phpunit\\phpunit.php" --configuration "$DEPLOYMENT_SOURCE\\app\\phpunit.xml"
  exitWithMessageOnError "PHPUnit tests failed"
 echo

Кроме того, мы также можем запускать другие команды, такие как выпуск обновления композитора , аналогично восстановлению пакета NuGet в мире .NET:

echo Download composer.
 curl -O https://getcomposer.org/composer.phar > /dev/null
 
 echo Run composer update.
 cd "$DEPLOYMENT_SOURCE"
 "D:\Program Files (x86)\PHP\v5.4\php.exe" composer.phar update --optimize-autoloader
 

Тестирование нашего сценария развертывания

Все, что осталось сделать, это зафиксировать и перенести наши изменения на веб-сайты Windows Azure. Если все идет хорошо, вывод команды git push должен содержать подробности запуска наших модульных тестов:

образ

Вот что происходит при сбое теста:

образ

Более того, портал веб-сайтов Windows Azure показывает нам, что последние источники были добавлены в репозиторий git, но не развернуты из-за неудачных тестов:

образ

Как видите, используя сценарии развертывания, мы можем настроить развертывание на веб-сайтах Windows Azure в соответствии с нашими потребностями. Мы можем запустить модульные тесты, получить исходный код из другого места и так далее. Наслаждайтесь!