Тестер позволяет выгружать и загружать сценарии в файловую систему.

Поддерживается инкрементальная выгрузка/загрузка.

Обработки по выгрузке и загрузке доступны в меню быстрых функций, а также через акселераторы Ctrl+Shift+B (выгрузка), Ctrl+Shift+L (загрузка)

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

Для конфигурации ERP2, было создано депо https://github.com/grumagargler/ERP2

Функции выгрузки/загрузки могут быть полезны для обмена тестами или создания единых хранилищ тестов для типовых конфигураций.

Интеграция

Под интеграцией понимается возможность Тестера реагировать на внешние запросы сервисов github.com, gitlab.com и других. В качестве примера, будет рассмотрен автоматический запуск процесса тестирования после помещения в git-репозиторий очередных изменений (т.е. запуск тестов после push-request в терминах git).

Итак, нам понадобится рабочий git-репозиторий и настроенный в нем webhook. В качестве примера будем использовать публичный репозиторий самого тестера https://github.com/grumagargler/tester.edt (создание webhook-а для gitlab выполняется аналогично).

Создание в EDT проекта, подключение его к удаленному git-репозиторию, детальная настройка github-профиля, событий и их свойств выходит за рамки этого раздела

Добавление webhook

Для создания webhook-а нужно войти в меню Settings / Webhooks и добавить новую запись. Вот пример уже готовой настройки:

На картинке, в поле Payload URL указан адрес, по которому github будет выполнять post-запросы при помещении в репозиторий очередных изменений (состав событий и их свойства могут быть настроены на стороне github дополнительно). Доступный из-вне веб-сервис тестера должен быть в формате https://<сайт>/<публикация>/hs/Hook.

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

Следующий шаг – публикация сервиса на стороне тестера, так, чтобы он был доступен из-вне github-у. Несмотря на то, что публикация со стороны платформы 1С выполняется стандартно, из конфигуратора, настройки авторизации заслуживают отдельного внимания.

Для того, чтобы github выполнил post-запрос, ему нужно будет авторизироваться в вашей базе тестера. Существует несколько вариантов авторизации, но в рамках данного раздела будет рассмотрен наиболее простой, с использованием отдельной папки с публикацией и настройками vrd-файла.

Пример такой настройки в картинках для IIS:

Таким образом, мы создаем отдельную публикацию, исключительно для сервиса hook с прописанными пользователем и паролем. Обратите внимание, что мы отключили при этом доступ в саму информационную базу, enable=”false”.

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

Создание сценария (тест-метода) который будет отвечать на уведомления github-а

После того, как в github добавлен webhook, и на стороне тестера опубликован сервис, осталось определить логику обработки этих уведомлений.

Для этого, в тестере нужно создать сценарий-метод и указать его в качестве обработчика, обслуживающего post-запросы.

Вот как это реализовано в демо-базе тестера:

Затем, нужно созданный и помещенный внутрь тестера сценарий, указать в качестве обработчика, как показано на картинке:

Для полноты иллюстрации, приведу полный код сценария Тестер.ОбработчикВебЗапроса (последнюю версию теста всегда можно найти в публичном репозитории общих тестов https://github.com/grumagargler/CommonTests)

// Тест-метод обработки внешних запросов системы управления
// версиями: github.com, gitlab.com и другие. Этот сценарий установлен
// в настройках системы как ответственный за обслуживание запросов
// веб-сервиса Hook.

// Получаем данные внешнего запроса
данные = данныеЗапроса ( _ );

// В зависимости от идентификатора тестируемой конфигурации
// организуем логику тестирования
проект = данные.Приложение;
если ( проект = "ERP2" ) тогда
    // Создаем задание для запуска тестов ERP2.
    // Подробнее о работе метода СоздатьЗадание см. в документации
    СоздатьЗадание ( "Тестер", "ЗапуститьERP2тесты", проект, , , данные.Комментарий );
иначе
    вызватьисключение "Запрос на обновление " + проект + " не был обработан";
конецесли;

&НаСервере
Функция данныеЗапроса ( Параметры )

    // Получим внешний запрос в виде структуры
    п = Conversion.FromJSON ( Параметры.Body );
    данные = новый Структура ( "Сервис, Приложение, Комментарий" );
    сервис = кто ( Параметры );
    данные.Сервис = сервис;
    // В зависимости от используемого сервиса, делаем разбор переданных параметров
    если ( сервис = gitlab () ) тогда
        // gitlab в самом запросе содержит информацию о помещениях.
        // Детали см. в документации:
        // https://gitlab.com/help/user/project/integrations/webhooks
        заметки = новый Массив ();
        для каждого помещение из п.commits цикл
            заметки.Добавить ( помещение.author.name + ": " );
            для каждого запись из СтрРазделить ( помещение.message, Chars.LF ) цикл
                если ( не ПустаяСтрока ( запись ) ) тогда
                    заметки.Добавить ( запись + ";" );
                конецесли;
            конеццикла;
        конеццикла;
        данные.Комментарий = СтрСоединить ( заметки );
        данные.Приложение = п.project.name;
    иначеесли ( сервис = github () ) тогда
        // github не передает в запросе информацию о помещениях.
        // для их получения нужно использовать web-api (выходит за рамки этого сценария)
        // Детали см. в документации:
        // https://developer.github.com/webhooks/
        данные.Комментарий = п.sender.login;
        данные.Приложение = п.repository.name;
    конецесли;
    возврат данные;

КонецФункции

&НаСервере
Функция github ()

    возврат "github";

КонецФункции

&НаСервере
Функция gitlab ()

    возврат "gitlab";

КонецФункции

&НаСервере
Функция кто ( Параметры )

    заголовок = Параметры.Headers;
    // По переданному заголовку определяем источник запроса
    если ( заголовок.Получить ( "X-GitHub-Event" ) <> неопределено ) тогда
        возврат github ();
    иначеесли ( заголовок.Получить ( "X-Gitlab-Event" ) <> неопределено ) тогда
        возврат gitlab ();
    иначе
        вызватьисключение "Неопознанный запрос на обновление: " + Conversion.ToJSON ( Параметры.Body );
    конецесли;

КонецФункции

Тестирование работы webhook-а

Для тестирования отработки уведомлений, можно использовать встроенные в github/gitlab средства отсылки тестовых запросов, например: