Автоматизированное тестирование в 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\bin1cv8.exe ENTERPRISE /F /N Администратор /TESTMANAGER«);
ЗапуститьСистему(«C:Program Files (x86)1cv8\bin1cv8.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», но на момент написания статьи я рекомендую использовать его в ознакомительных целях, т.к. механизм довольно новый и возможно, еще не до конца отлажен разработчиками. 

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

 

 

45 Comments

  1. speshuric

    Шаг далеко вперёд по сравнению со сценарным тестированием из ЦУПа

    Reply
  2. M.Shalimov

    (1) speshuric, по информации с «Экспертского» тренинга проходившего на прошлой неделе, в скором времени ЗАО «1С» выпустит обновленное сценарное тестирование входящее в ЦУП предоставляющее больше возможностей. Не исключено, что данный механизм будет в нем задействован.

    Reply
  3. speshuric

    (2) Спасибо, я в курсе. 1С в общем-то сразу позиционировала этот механизм, как замену костылям из сценарного тестирования. И я даже с полгода назад смотрел, как там и что реализовано, но на тот момент была куча нереализованных моментов, если я правильно помню. Вам спасибо за краткий how-to с которого можно начать большинству разработчиков.

    Reply
  4. StaticUnsafe

    Радует что платформа развивается.

    Reply
  5. M.Shalimov

    (5) headMade, КИП — отдельное решение, описанный в статье механизм — механизм платформы 8.3. Кроме платформы и тестируемой базы больше ничего не нужно.

    Reply
  6. pumbaE

    А интерпретация результатов тестирования где?

    Информация о том что из 230 тестов упало 2 теста, о том что согласно последнему тестированию у нас появилось две регрессии, о том что программист Иванов поместил в хранилище такое, что поломало другие тесты…

    Насколько вижу в users, появилось «1С: Сценарное тестирование 8 3.0.1.35 28.02.14», кто уже щупал подскажите, как CI можно применять? Как происходить связь с хранилищем, настройки полного запуска тестов или минимального набора поддерживаются? Запуск без модификации конфигурации возможнет, экспорт результатов тестов в junit?

    Reply
  7. M.Shalimov

    (7) pumbaE, В данной статье я описал только процесс настройки тестирования и предложил варианты его использования. Интерпретация результатов (как и новое сценарное тестирование) выходит за рамки данной статьи, но в ближайшее время я буду продолжать решать задачи тестирования в которых пощупаю на практике новое сценарное тестирование и напишу отдельную статью, если конечно меня никто не опередит:)

    Reply
  8. artbear

    (0)

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

    Механизм уже не очень новый и для целей тестирования вполне можно использовать.

    Но к нему все равно есть вопросы. Не все удобно и просто 🙁

    В открытом доступе нет примеров подобных сценариев для типовых конфигураций (я вообще не слышал о таких тестах).

    В конце 2012 или начале 2013 г. общался на партнерской конференции 1С и разработчики сценарного тестирования в кулуарах сообщили мне, что им неизвестно о подобных автоматических тестах для типовых конфигураций 1С.

    Для тестового фреймворка https://github.com/xUnitFor1C/xUnitFor1C уже есть готовые шаблоны для написания и автоматического выполнения сценарных тестов 8.3 и получения результатов тестирования.

    Этот фреймворк уже используется в т.н. «ночных» сборках и прогоне автоматических тестов.

    Например, у нашей системы на базе УТ 11 у нас свыше 500 автоматических юнит-тестов и сценарных тестов. автосборка и прогон тестов выполняется несколько раз в сутки.

    Reply
  9. lustin

    (9) artbear, Уже 500 ? Молодцы мужики. Я тут всем говорю что около 200.

    Reply
  10. pumbaE

    (8)

    пощупаю на практике новое сценарное тестирование и напишу отдельную статью

    буду только рад увидеть обзор «нового» сценарного тестирования.

    Может тогда обратите внимание:

    1. Как там производиться тестирование web интерфейса интересно.

    2. Насколько связаны сценарное тестирование с разработкой/хранилищем и другими различными системами баг-трекинга(возможно ли автоматом запускать сценарное тестирование, при каждом помещении в хранилище, возможно ли информировать разработчиков о провалившихся тестах, с diff изменений, которые привели к поломке тестовых сценариев).

    3. Связано ли с «Автоматизированная проверка конфигураций», есть ли единая точка, где можно увидеть пульс проекта (результаты тестов, результаты проверки конфигурации, результаты нагрузочного тестирования, code-review исходного кода конфигурации).

    p.s.: имхо, 1С надо растить культуру тестирования(автоматического).

    Reply
  11. pumbaE

    (10) lustin, ну так не за один же день накапливаются у меня в среднем в месяц плюс 20-50 тестов добавляется, ну а сколько переписывается уже устал считать 🙂

    Reply
  12. M.Shalimov

    (11) pumbaE, Хорошо, учту!

    Reply
  13. artbear

    (11) На все вопросы ИМХО ответ один — нету ничего подобного 🙂 🙁

    Reply
  14. M.Shalimov

    (14) artbear, по работе с хранилищем, вполне вероятно, ничего не добавили (все таки это платформа, а не конфигурация) а вот в целом механизмы тестирования будет интересно рассмотреть.

    Reply
  15. KillHunter

    Я так понимаю все изменения связаны с использованием веб-интерфейса, хотя по большому счету он для основной массы просто навсего не нужен!

    Reply
  16. M.Shalimov

    (16) KillHunter, Не веб интерфейса а управляемого приложения ( в т.ч. веб морда). УУ нужно всем, многие типовые уже управляемы и в скором времени управляемыми станут все. Переход с УПП на ERP20 только вопрос времени, вспомните зарю 7.7.

    Reply
  17. pumbaE
    ( в т.ч. веб морда)

    хм, не видел возможности реального тестирования веб-морды… Так что бы с firefox или chromium запустить, разве что selenium, но пока правил конвертации еще никто не делал http://www.screencast.com/t/RMoppLTOMz

    Reply
  18. M.Shalimov

    (18) pumbaE, Не использовал, но в описанном методе есть возможность запуска теста через веб.

    Reply
  19. Сисой

    (17) Вы за всех так уверенно не говорите.

    Большинство крупных контор, поверивших в 8-ку и вложивших миллионы долларов в КИС на ее базе, кроют 1С матом за полную несовместимость новых и старых типовых.

    Вот объясните мне, почему компания должна потратить еще полмиллиона долларов, если НИКАКИХ преимуществ при этом она не получит (все задачи УЖЕ решены), а багов и глюков будет немеряно.

    Используемые продукты: БП, ЗУП, УПП, Консолидация.

    При этом не переходить на УФ нельзя — регламентированный учет требует обновлений.

    Ах да, можно еще даунгрейд на 7.7 сделать. Лицензии остались.

    Reply
  20. M.Shalimov

    (20) Сисой, Я не утверждаю, что нужно срочно всем выкладывать миллионы и переходить на новую систему. Есть ряд организаций, которые работают на 7.7 и их все устраивает. Но, прогресс не стоит на месте и информационные системы развиваются, так же развивается и бизнес у которого появляются новые требования к ИС и зачастую эти требования уже реализованы в новых версиях типовых.

    Как Вы думаете 1С выходит на рынок среднего и крупного бизнеса? Одного желания тут мало, бизнес развивается и будучи небольшим предприятием автоматизировавшим свой учет на 1С бизнес вырастает и хочет продолжать использовать привычный ему софт, отсюда и основные требования к производительности и параллельности.

    В фирме 1С тоже не дураки работают, которые ради нескольких сотен тысяч с клиента заставят всех переходить на ERP 2.0, все понимают что множество организаций работают под УПП и не могут быстро перейти на новую систему (а это в любом случае не быстро). Нуралиев не дурак и снимать с поддержки УПП вряд ли будут.

    Reply
  21. pumbaE

    (21) ну вот не верю, я что имея доступ к исходникам «очень» трудно было сделать тестирование и для толстых форм, а так скорей политическое решение тестирование только для управляемых.

    Reply
  22. M.Shalimov

    (22) pumbaE, Этот вопрос лучше задать в фирму «1С», рассуждения о том что можно было бы им сделать выходят за рамки данной статьи.

    Reply
  23. speshuric

    (22) А с другой стороны, да, у них исходники есть, но отношение к тестированию мягко говоря «не TDDшное». Я всё время ворчу на 1С-ную арифметику, потому что она не имеет заявленных четких границ, из-за этого сложно предсказать результат зачастую. Причем не только для прикладного программиста, но и для разработчика платформы. Почему это плохо? Нет четкой границы, нет и не будет граничных тестов. Вот, например, ЧислоПрописью:

    Сообщить(ЧислоПрописью(-1000000000000000, «»));

    выводится «-Одна тысяча 00». а для

    Сообщить(ЧислоПрописью(-1000000000001000, «»));

    выводится «-Одна тысяча одна тысяча 00». Причем для больших положительных чисел проверку не забыли — исключение вываливается. На самом деле аналогичная ситуация почти везде в платформе — и работа с большими (2+ ГБ) объектами, и в системных полях ввода, да много где. Ошибки такие, конечно, исправляются (по мере нахождения), но системного «прочесывания» даже базовых объектов в общем-то нет. Причем, даже баг-репорты даже прекрасно оформленные в 1С слать через v8 дело достаточно неблагодарное (а вот через партнерский доступ проще) — фиг пробьёшь первую линию.

    Так что пусть хотя бы в управляемых делают. Авось постепенно пройдут per aspera ad astra.

    Reply
  24. worker1c

    Менеджер подключается к клиенту, при запуске сценария, сгенерированного обработкой из 1С ошибка:

    {Форма.Форма.Форма(81)}: Значение не является значением объектного типа (Нажать)
    ОкноПриложенияОсновноеКомандныйИнтерфейсКнопкаКомандногоИнте­рфейсаКлиенты.Нажать();

    Код:

    ОкноПриложенияОсновное = Неопределено;
    КлиентсткиеОкнаТестируемогоПриложения = ТестовоеПриложение.ПолучитьПодчиненныеОбъекты();
    Для Каждого ТестируемоеОкно Из КлиентсткиеОкнаТестируемогоПриложения Цикл
    Если ТестируемоеОкно.Основное Тогда
    ОкноПриложенияОсновное = ТестируемоеОкно;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    ОкноПриложенияОсновноеКомандныйИнтерфейс = ОкноПриложенияОсновное.ПолучитьКомандныйИнтерфейс();
    ОкноПриложенияОсновноеКомандныйИнтерфейсКнопкаКомандногоИнте­рфейсаПродажи = ОкноПриложенияОсновноеКомандныйИнтерфейс.НайтиОбъект(Тип(«ТестируемаяКнопкаКомандногоИнтерфейса»), «Продажи»);
    ОкноПриложенияОсновноеКомандныйИнтерфейсКнопкаКомандногоИнте­рфейсаПродажи.Нажать();
    
    ОкноПриложенияОсновноеКомандныйИнтерфейсКнопкаКомандногоИнте­рфейсаКлиенты = ОкноПриложенияОсновноеКомандныйИнтерфейс.НайтиОбъект(Тип(«ТестируемаяКнопкаКомандногоИнтерфейса»), «Клиенты»);
    ОкноПриложенияОсновноеКомандныйИнтерфейсКнопкаКомандногоИнте­рфейсаКлиенты.Нажать();

    Показать

    Платформа 8.3.4.408. Кто-нубудь сталкивался? Проверено на разных серверах, базах.

    Reply
  25. M.Shalimov

    (25) worker1c, Судя по коду система не находит кнопки «Клиенты» в подсистеме «Продажи».

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

    Попробуйте переформировать код обработки.

    Reply
  26. lustin

    (11) pumbaE, докладываю предварительно и коротко перед сном 😉

    1. не найдено, web клиент не держит открыто порта для проброса вызовов тестов.

    2. все через специализированную конфигурацию написанную на самом 1С. Наблюдаются попытки состыковать это с СППР.

    3. code-review в специализированной конфигурации не нашел — даже такой сущности или ее аналога. Не говоря уже об остальных.

    тестирование проводил на чужой площадке с временным доступом по TeamViewer — у людей у кого ЦУП куплен.

    Так что результаты не окончательные и финального понимания не возникло. Особенно не удалось понять как методически закладывается любимая тема Артура при создании и затем очистке тестовых данных.

    Reply
  27. pumbaE

    Подкорректировал обработку UILogToScript.epf , с возможностью сразу формировать внешнюю обработку, имхо удобней получилось, чему 1С, не надо копировать, вставить и т.д.

    Reply
  28. M.Shalimov

    (28) pumbaE, Можете выложить ее, а я у себя в публикации добавлю ссылку.

    З.ы. в 1С планировали это сделать:)

    Reply
  29. pumbaE

    (29) там v8unpack используется. Думаете 1С может пользоваться не «православным» инструментом?

    https://github.com/xUnitFor1C/xUnitFor1C/tree/feature/104-UILogToScriptUnitTest/%D0%93%D0%A3%D0%98_%D0%A2%D0%B5%D1%81%­D1%82%D1%8B_8_3

    Reply
  30. M.Shalimov

    (30) pumbaE, Я просто доношу информацию из уст представителей фирмы «1С»:)

    Reply
  31. abryazgin

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

    У нас один менеджер управляет действиями на нескольких клиентах, но делает это последовательно.

    Могу ли я как-то запустить тест, чтобы последовательность процедур выполнялась одновременно на клиенте 1 и клиенте 2?

    Через фоновые задания не параллелится, так как это клиентские действия…

    Reply
  32. pumbaE

    (32) abryazgin, это не предназначено для нагрузочного тестирования, для нагрузочного пользуйтесь тест центром.

    Reply
  33. abryazgin

    (33) pumbaE, вы имеете ввиду это http://v8.1c.ru/expert/tc/tc_overview.htm?

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

    Например [1] переход по произвольной ссылке (Ctrl+F11) сохраняет только открытие окна поиска и нажатие кнопки поиск, ввод текста или его вставка из буфера не фиксируется.

    Например [2] нажатие на кнопку добавить договор в поле выбора договора в документе тоже не фиксируется при записи сценария.

    Смотрел на платформе 8.3.5.1460 (что было под рукой).

    Reply
  34. M.Shalimov

    (34) abryazgin, С тест-центром все верно. Именно его нужно использовать для нагрузочного тестирования. Рассмотренный вариант подходит для функционального.

    По косякам, лучше попробуйте платформу 8.3.6 свежего релиза, рассматриваемая Вами уже довольно устарела.

    Reply
  35. Boson

    Добрый день, может кто-нибудь знает возможно ли настроить Конфу Сценарного Тестирования на работу с тонким клиентом через web соединение по протоколу HTTP?

    Reply
  36. tormozit

    Хочу новую статью или обновления этой.

    Reply
  37. gavril

    Возможно ли запустить в принципе с ключем /TESTCLIENT и в толстом клиенте?.

    Куда будет писать журнал?

    Так ничего не получилось из вышеперечисленного.

    Reply
  38. st4rk

    Для обычных форм есть решение?

    Reply
  39. DimaP

    Кто-нибудь на практике использует автоматизированное тестирование от 1С?

    Какие результаты?

    С какими проблемами столкнулись?

    Reply
  40. Cyberhawk

    Внешняя обработка UILogToScript, что лежит на ИТС, не умеет преобразовывать интерактивные действия по выбору значений из выпадающих меню (метод управляемой формы «ПоказатьВыборИзМеню»).

    В типовых конфигурациях, например, это выпадающее меню можно увидеть в группе «Контактная информация» форм объектов (например, при нажатии кнопки «Добавить» предлагается выбрать тип добавляемой контактной информации — «Электронная почта», «Телефон» и т.д.).

    Reply
  41. Cyberhawk

    (41)

    Текст ошибки выглядит следующим образом: {ВнешняяОбработка.UILogToScript.МодульОбъекта(511)}: Неопознанный узел executeChoiceFromMenu:

    Raise NStr(«en = ‘Unknown node ‘; ru = ‘Неопознанный узел ‘») + Reader.Name + «: » + Reader.Value;

    Для ее исправления нужно в методе «ConvertCommand» в конструкцию «Если» добавить еще одну ветку:

     ElsIf Reader.Name = «executeChoiceFromMenu» Then
    Presentation = «»;
    While Reader.ReadAttribute() Do
    If Reader.Name = «presentation» Then
    Presentation = Reader.Value;
    Else
    Raise NStr(«en = ‘Unknown attribute ‘; ru = ‘Неопознанный атрибут ‘») + Reader.Name + «: » + Reader.Value;
    EndIf;
    EndDo;
    AddLine(Writer, VariableName + ? (ScriptVariant = «en», «.ExecuteChoiceFromMenu(«»», «.ВыполнитьВыборИзМеню(«»») + DoubleQuotationMarks(Presentation) + «»»);», True);
    LastProcessedCommand = ? (ScriptVariant = «en», «ExecuteChoiceFromMenu», «ВыполнитьВыборИзМеню»);
    Reader.Read();
    

    Показать

    Reply
  42. Cyberhawk

    Обнаружена еще одна ошибка в обработке UILogToScript, на этот раз в создаваемом этой обработкой коде сценария на встроенном языке 1С.

    Ошибка имеет вид «Переменная не определена (ОкноПриложения…CommandInterface)» и проявляется, если:

    1) в сценарии присутствует взаимодействие пользователя с панелью навигации формы

    и

    2) такое взаимодействие не является самым первым действием в этой форме

    Т.е. если пользователь в сценарии нажимает на кнопку панели навигации формы объекта (например, переходит из формы документа в какой-нибудь связанный справочник или регистр) и первое такое нажатие не является самым первым действием в форме (после ее открытия), то формируемый обработкой UILogToScript программный код всегда будет выдавать ошибку компиляции.

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

    Т.е. после открытия формы нужно первым делом повзаимодействовать с панелью навигации формы (вызвать любую ее команду), а затем уже выполнять привычные для сценария действия (заполнение реквизитов, нажатие кнопок и т.д.).

    Вариант, не требующий изменения сценария, заключается в доработке обработки UILogToScript и будет приведен ниже.

    Reply
  43. Cyberhawk

    (43)

    В методе «ConvertWindowCommandInterface» достаточно вызов метода «AddLine» вынести из условия, в котором этот вызов присутствует. Например, расположить сразу после условия (хотя можно и до).

    Негативным моментом здесь будет являться то, что если в сценарии присутствует несколько интерактивных взаимодействий пользователя с панелью навигации (в рамках одной и той же формы), то в сформированном обработкой UILogToScript программном коде будет повторяться инициализация переменной, хранящей командный интерфейс формы (будут повторяться вызовы метода «ПолучитьКомандныйИнтерфейс» перед каждый взаимодействием пользователя с панелью навигации формы).

    Кажется, что «защититься» от такого избыточного поведения не так просто, как может поначалу показаться: например, если реализовывать кэш, то стоит следить не только за добавлением в него признака, что командный интерфейс формы проинициализирован, но и учитывать, что одна и та же форма может открываться многократно. Поэтому в этом направлении доработку обработки осуществлять не стал.

    Reply
  44. artbear

    (44) Спасибо за выполненный анализ

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *