Автоматизированное тестирование - процесс, представляющий собой имитацию интерактивных действий пользователя и проверку результатов этих действий, официальная информация на сайте 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", но на момент написания статьи я рекомендую использовать его в ознакомительных целях, т.к. механизм довольно новый и возможно, еще не до конца отлажен разработчиками.
Все комментарии и дополнения по тексту статьи я с радостью жду в комментариях!