Каталог решений - Автоматизированное тестирование в 8.3

Автоматизированное тестирование в 8.3

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

Все комментарии и дополнения по тексту статьи я с радостью жду в комментариях!

 

 

has been added to your cart:
Оформление заказа