Автоматизированное тестирование в 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 не будет опубликован. Обязательные поля помечены *