Автоматизированное тестирование в 8.3
В данной статье будет рассмотрен новый механизм системы "1С:Предприятие 8" поддерживаемый начиная с платформы версии 8.3.
Механизм позволяет легко и быстро создавать различные сценарии тестирования, без необходимости написания сложных процедур и функций для имитации действий пользователя.
- Описание
- Подробнее
Описание
Автоматизированное тестирование — процесс, представляющий собой имитацию интерактивных действий пользователя и проверку результатов этих действий, официальная информация на сайте 1С: http://v8.1c.ru/overview/Term_000000816.htm
Начиная с версии 8.3 платформа позволяет записать действия пользователя (переход по интерфейсу, нажатие кнопок, ввод текста в поля ввода и т.п.) и сохранить все действия в XML файл для дальнейшего использования при тестировании. Основное назначение данного механизма — сценарное тестирование, но думаю, что при большом желании можно устроить нагрузочное тестирование или использовать механизм при оптимизации системы (анализ ожидания на блокировках, поиск дедлоков и т.п.). Ниже я более подробно опишу настройку тестов.
Я не буду переписывать информацию с сайта 1С, а сразу перейду к описанию настройки теста. Перед созданием теста необходимо записать действия пользователя, для чего необходимо запустить предприятие в режиме записи действий пользователя из конфигуратора:

После чего в клиентском приложении станут доступны команды управления записью журнала.
![]()
При помощи данных команд можно начать/приостановить запись журнала, прервать запись (без сохранения) или прекратить запись с отображением XML текста содержащим информацию о пользовательских действиях, который потребуется для дальнейшей настройки.
После получения XML текста с информацией о действиях пользователя на его основании можно создавать обработку управления клиентским приложением, сотрудники фирмы «1С» пошли нам на встречу, и уже реализовали обработку преобразующую XML в программный код (ссылка на обработку с сайта ИТС: http://its.1c.ru/db/metod81#content:5014:1 ).

В работе с обработкой сложностей не должно возникнуть, рекомендую установить флаг для генерирования кода подключения к клиенту и установить значение переключателя «Преобразовывать» в «Текст». Далее копируем XML текст в поле «Журнал действий пользователя», выполняем команду «Преобразовать» и в текстовом поле «Сценарий» появится программный код для запуска тестирования, который в дальнейшем нам понадобится. Ниже рассмотрю основную процедуру выполняющую подключение к клиенту и запуск теста, в моем случае процедура называется «ТестовыйСценарий_06_03_2014».
&НаКлиенте
Процедура ТестовыйСценарий_06_03_2014()
//Создание объекта «ТестовоеПриложение» при помощи которого будет выполняться
//подключение к клиенту тестирования.
//Параметры:
// ИмяКомпьютера — Имя или IP адрес компьютера на отором запущено приложение клиента тестирования.
// Порт — Порт по которому будет выполняться подключение к клиенту тестирования. По умолчанию 1538,
// если необходимо на одном компьютере запускать несколько клиентов, их нужно разнести по разным портам.
// ИдентификаторКлиента — Идентификатор веб-клиента.
ТестовоеПриложение = Новый ТестируемоеПриложение();
//Далее выполняется попытка подключения к клиенту тестирования.
ВремяОкончанияОжидания = ТекущаяДата() + 60;
Подключен = Ложь;
ОписаниеОшибкиСоединения = «»;
Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл
Попытка
ТестовоеПриложение.УстановитьСоединение();
Подключен = Истина;
Прервать;
Исключение
ОписаниеОшибкиСоединения = ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
Если Не Подключен Тогда
ТестовоеПриложение = Неопределено;
Сообщить(«Не смогли установить соединение! » + Символы.ПС + ОписаниеОшибкиСоединения);
Возврат;
КонецЕсли;
//Если подключение к клиенту тестирования прошло успешно, запускаются управляющие процедуры
//имитирующие пользовательские действия.
ОкноПриложенияОсновноеКнопкаКомандногоИнтерфейсаПриходнаяНакладнаяНажать(ТестовоеПриложение);
ОкноПриложенияПриходнаяНакладнаяКнопкаСоздатьНажать(ТестовоеПриложение);
ОкноПриложенияПриходнаяНакладнаяСозданиеПолеНоменклатураВыбрать(ТестовоеПриложение);
ОкноПриложенияНоменклатураТаблицаСписокВыбрать(ТестовоеПриложение);
ОкноПриложенияПриходнаяНакладнаяСозданиеКнопкаПровестиИЗакрытьНажать(ТестовоеПриложение);
КонецПроцедуры
Далее, в самом простом варианте, необходимо создать новую обработку (не важно, внешняя или встроенная), добавить управляемую форму на которой разместить команду выполняющую процедуру подключения к клиенту и запуска тестового сценария.
&НаКлиенте
Процедура ЗапуститьСценарий(Команда)
ТестовыйСценарий_06_03_2014();
КонецПроцедуры
&НаКлиенте
Процедура ТестовыйСценарий_06_03_2014()
//…
КонецПроцедуры
Обращаю внимание, что если во время теста вводились числа больше 999 (количество, суммы и т.п.) при преобразовании в XML платформа автоматически не удаляет разделитель групп (по умолчанию неразрывный пробел) и его необходимо удалить в самих процедурах!
Для выполнения тестового сценария, необходимо как минимум два клиентских приложения, запущенных в режиме менеджера тестирования и в режиме клиента тестирования соответственно. Есть два варианта запуска приложений:
1. В параметрах конфигуратора (Сервис — Параметры) перейти на закладку «Запуск 1С:Предприятия», раскрыть вкладку «Дополнительно», в группе «Автоматизированное тестирование» выбрать необходимы режим запуска. Т.е. вручную запустить менеджер тестирования и необходимо количество клиентов, перед каждым запуском нужно выбрать необходимый режим и для клиентов указать различные порты (если клиент один, оставить порт по умолчанию).

2. Автоматически запускать менеджера и клиентов тестирования используя ключи «/TESTMANAGER» и «/TESTCLIENT» соответственно. Ниже приведен пример программного кода 1С для файлового варианта (необходимо изменить версию платформы, путь до информационной базы и если запускается более одного клиента тестирования указать порт).
ЗапуститьСистему(«C:\Program Files (x86)\1cv8\\bin\1cv8.exe ENTERPRISE /F /N Администратор /TESTMANAGER«);
ЗапуститьСистему(«C:\Program Files (x86)\1cv8\\bin\1cv8.exe ENTERPRISE /F /N Администратор /TESTCLIENT [-TPort]«);
Все действия по настройке теста закончены, осталось на менеджере тестирования запустить выполнение обработки. После подключения к клиенту тестирования менеджер передаст на выполнение команды и в окне клиентского приложения будут эмулироваться все действия пользователя, записанные при создании журнала действий пользователя.
Ниже, привожу пример простого программного кода по работе с двумя клиентами тестирования:
&НаКлиенте
Процедура ТестовыйСценарий_06_03_2014()
ТестовоеПриложение1 = Новый ТестируемоеПриложение();//Порт по умолчанию 1538
ТестовоеПриложение2 = Новый ТестируемоеПриложение(,1539);
ВремяОкончанияОжидания = ТекущаяДата() + 60;
Подключен = Ложь;
ОписаниеОшибкиСоединения = «»;
//Подключение к первому клиенту тестирования
Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл
Попытка
ТестовоеПриложение1.УстановитьСоединение();
Подключен = Истина;
Прервать;
Исключение
ОписаниеОшибкиСоединения = ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
ВремяОкончанияОжидания = ТекущаяДата() + 60;
//Подключение ко второму клиенту тестирования
Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл
Попытка
ТестовоеПриложение2.УстановитьСоединение();
Подключен = Истина;
Прервать;
Исключение
ОписаниеОшибкиСоединения = ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
Если Не Подключен Тогда
ТестовоеПриложение1 = Неопределено;
ТестовоеПриложение2 = Неопределено;
Сообщить(«Не смогли установить соединение! » + Символы.ПС + ОписаниеОшибкиСоединения);
Возврат;
КонецЕсли;
//Для каждого клиента скопируем процедуры тестирования.
ОкноПриложенияОсновноеКнопкаКомандногоИнтерфейсаПриходнаяНакладнаяНажать1(ТестовоеПриложение1);
ОкноПриложенияОсновноеКнопкаКомандногоИнтерфейсаПриходнаяНакладнаяНажать2(ТестовоеПриложение2);
ОкноПриложенияПриходнаяНакладнаяКнопкаСоздатьНажать1(ТестовоеПриложение1);
ОкноПриложенияПриходнаяНакладнаяКнопкаСоздатьНажать2(ТестовоеПриложение2);
ОкноПриложенияПриходнаяНакладнаяСозданиеПолеНоменклатураВыбрать1(ТестовоеПриложение1);
ОкноПриложенияПриходнаяНакладнаяСозданиеПолеНоменклатураВыбрать2(ТестовоеПриложение2);
ОкноПриложенияНоменклатураТаблицаСписокВыбрать1(ТестовоеПриложение1);
ОкноПриложенияНоменклатураТаблицаСписокВыбрать2(ТестовоеПриложение2);
ОкноПриложенияПриходнаяНакладнаяСозданиеКнопкаПровестиИЗакрытьНажать1(ТестовоеПриложение1);
ОкноПриложенияПриходнаяНакладнаяСозданиеКнопкаПровестиИЗакрытьНажать2(ТестовоеПриложение2);
КонецПроцедуры
В результате выполнения данной процедуры менеджер тестирования подключается ко всем инициализированным клиентам тестирования и параллельно запускает на них выполнение теста.
Я вижу следующие варианты использования данного механизма:
1. Вы сотрудник службы технической поддержки и при появлении у пользователя сложной проблемы Вы хотите посмотреть, что именно пользователь выполняет в системе.
Для решения подобной задачи, можно создать bat-файл для запуска системы в режиме клиента тестирования и использовать методы тестового приложения «НачатьЗаписьЖурналаДействийПользователя» и «ЗавершитьЗаписьЖурналаДействийПользователя» для получения журнала. Ниже привожу пример программного кода:
&НаКлиенте
Перем ТестовоеПриложение;
&НаКлиенте
Процедура Запустить(Команда)
ТестовоеПриложение = Новый ТестируемоеПриложение();
ВремяОкончанияОжидания = ТекущаяДата() + 60;
Подключен = Ложь;
ОписаниеОшибкиСоединения = «»;
Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл
Попытка
ТестовоеПриложение.УстановитьСоединение();
Подключен = Истина;
Прервать;
Исключение
ОписаниеОшибкиСоединения = ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
Если Не Подключен Тогда
ТестовоеПриложение = Неопределено;
Сообщить(«Не смогли установить соединение! » + Символы.ПС + ОписаниеОшибкиСоединения);
Возврат;
КонецЕсли;
ТестовоеПриложение.НачатьЗаписьЖурналаДействийПользователя();
КонецПроцедуры
&НаКлиенте
Процедура Остановить(Команда)
Сообщить(ТестовоеПриложение.ЗавершитьЗаписьЖурналаДействийПользователя());
КонецПроцедуры
В результате получится XML текст, который в дальнейшем может быть преобразован в обработку для повторения ошибки пользователя. После исправления ошибки данную обработку можно использовать для тестирования.
2. Не для кого не секрет, что при разработке новых возможностей системы зачастую появляются ошибки в ранее разработанном функционале. Для полноценного тестирования можно заранее создавать тестовые сценарии исправного функционала и выполнять их перед выпуском новых релизов.
3. Для разрешения проблем ожиданий на блокировках или дедлоков. Можно создать несколько тестов, которые явно приведут к проблеме производительности для дальнейшего расследования.
4. Проведение нагрузочного тестирования. Фирма 1С позиционирует функционал как механизм сценарного тестирования, но по большому счету не запрещает запускать большое количество клиентов тестирования. В обработчики можно вставить генераторы случайных чисел для разнородности вводимой информации. На момент написания статьи, мне не известны примеры подобного нагрузочного тестирования, при получении новой информации я обновлю публикацию.
Рассмотренный в статье механизм может существенно облегчить процесс разработки и тестирования бизнес приложений на базе платформы «1С:Предприятие 8», но на момент написания статьи я рекомендую использовать его в ознакомительных целях, т.к. механизм довольно новый и возможно, еще не до конца отлажен разработчиками.
Все комментарии и дополнения по тексту статьи я с радостью жду в комментариях!

