Каталог решений - Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки

Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки

Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки

В наличии

Третья часть цикла публикаций, посвященных Vanessa-ADD и автоматизации тестирования. Переходим к практике.

Категория:

Описание

 

Пример №1.  Присоединяемые файлы. Работа со структурой Контекст. Выполнение произвольного кода.

Пример №2.  Интеграционный механизм. Распределенная информационная база УТ 11. Подключение к двум разным базам.

Пример №3.  Проверка движений документа через форму списка. Шаг открытия произвольной формы.

 

 

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

 

Теперь мы переходим к практике создания сценариев и рассмотрим несколько сквозных примеров на основе шагов встроенной в Vanessa-ADD библиотеки. Как и ранее, чтобы быть ближе к реальным практическим задачам, сценарии будем создавать для “Управление торговлей 11.4”. Задействованы во многом будут механизмы БСП, поэтому их должно быть легко адаптировать для других конфигураций на основе БСП.

Изначально в планах было привести здесь несколько простых сценариев, а уже в следующий раз перейти к сложным. Но был риск, что на такое постепенное погружение в тему просто не хватит времени. Поэтому розовые очки придётся снять уже здесь ))  Прошу не делать вывод на основе приводимых примеров о чрезмерной сложности Vanessa-ADD для практического применения. Рассматриваемые примеры будут искусственно усложнены в учебных целях и в ходе их рассмотрения будет подробно разобрано максимально возможное количество библиотечных шагов, возможных ошибок и даже немного внутренности Vanessa-ADD. В большинстве случаев реальные сценарии будут получаться проще, а часть наиболее сложных решений можно заменить на создание собственных шагов, о которых пойдёт речь в следующей публикации.

Приведенные примеры можно рассматривать как основу для своих сценариев. Чтобы упростить чтение, все тексты сценариев, кроме окончательных, содержат лишние отступы у шагов выполнения произвольного кода и шагов перехода к строкам таблиц. Vanessa-ADD не сможет корректно работать с такими текстами. Поэтому за образцы лучше брать окончательные варианты сценариев, которые приведены в конце каждого примера. Все содержащиеся в них шаги оформлены так, что Vanessa-ADD сможет их исполнить.

 

Особое внимание уделите примерам работы со структурами “Контекст” и “КонтекстСохраняемый”. В опубликованных в сети вебинарах мало информации по работе с ними. Также мало примеров на github. В то же время с ними придётся много работать, если вы хотите писать стабильные сценарии, не зависящие от времени их выполнения. (Сейчас январь 2019 года и мне недавно пришлось адаптировать несколько сценариев только потому, что в них были явно вбиты даты 2018 года, вместо того, чтобы использовать относительные даты и работу через структуру “Контекст”).

Также, если возникнут вопросы по каким-либо из примененных шагов — задавайте их в комментариях.

 

 

 

Присоединяемые файлы. Выполнение произвольного кода. Работа со структурой Контекст.

 

 


На примере этого сценария мы разберем следующие вопросы:

1.  Как сделать так, чтобы при открытии диалога выбора файла был выбран какой-либо файл и этот диалог закрылся автоматически?

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

3.  Как сделать сохранение прикрепленного файла на диск и проверить его наличие, чтобы убедиться в том, что прикрепленный ранее файл доступен для дальнейшей работы?

4.  Как сохранить значения полей формы в специальную структуру “Контекст” и использовать в следующих шагах?

5.  Как вызвать исполнение произвольного кода из нашего сценария не создавая никаких внешних обработок?

6.  Как проверить результат асинхронных методов платформы?


 

 

Представим, что мы находимся в роли заказчика — менеджера по закупкам или  аналитика-консультанта. Как вам больше нравится ))

Команда разработки должна реализовать нам замечательную функцию — возможность прикреплять файлы к документам закупки "Приобретение товаров и услуг" в нашей системе “Управление торговлей 11.4”. Конечно же мы хотим убедиться, что этот функционал будет работать правильно как после его реализации, так и в будущем. Для этого мы решаем создать исполняемую спецификацию на языке Gherkin.

В результате предварительного обсуждения задачи с разработчиками мы узнаем, что файлы прикрепляются только к записанным в базу данных документам, так как должны быть связаны с уже существующем объектом в базе. Кроме того в БСП уже есть нужный механизм и достаточно подключить к нему новые документы. Мы решаем, что после реализации будем проверять наиболее общий случай — прикрепление файлов к новому документу. Также нам нужно не просто прикрепить файл, но и получить возможность использовать его в будущем. То есть наоборот, сохранять на диск.

Мы работаем без ордерной схемы, товаров в пути и неотфактурованных поставок, поэтому в нашем документообороте поступление товаров и приобретение товаров отражается одним и тем же документом.

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

 

Функционал: Прикрепление файлов к документам закупок



Я как менеджер по закупкам

Хочу иметь возможность прикреплять скан-копии первичных документов к документам в базе 1С и извлекать их из документов в базе 1С

Чтобы снизить затраты времени на пересылку бумажных документов внутри компании.



Контекст:

        Дано На локальном диске компьютера пользователя существует файл СканПоступления.pdf

        И  На локальном диске компьютера пользователя нет файла СканПоступления_СохраненныйИзДокумента.pdf

        И  Я запускаю сеанс 1С для проверки работы с прикрепленными файлами

   

Сценарий:  Прикрепление файлов к новому документу приобретения товаров и услуг.

   

        Тогда я создаю новый документ “Приобретение товаров и услуг”

        И  я пытаюсь прикрепить к нему файл СканПоступления.pdf



        Тогда система сообщает о необходимости предварительно записать документ

        И  я соглашаюсь выполнить запись документа



        Тогда открывается диалог выбора файла

        И  в нем я выбираю файл СканПоступления.pdf

       

        Тогда файл становится доступен для выбора в списке прикрепленных к документу файлов

        И  я закрываю документ приобретения товаров



        И я заново открываю документ приобретения

        И в списке прикрепленных файлов по прежнему доступен для выбора ранее прикрепленный файл



        Тогда  я сохраняю этот файл на диск компьютера пользователя под именем СканПоступления_СохраненныйИзДокумента.pdf

        И  на диске действительно появляется сохраненный файл

 

 


 

Теперь мы будем выступать в роли разработчиков.

Мы подключаем документ “Приобретение товаров и услуг” к подсистеме БСП “Работа с файлами”. Конечно же соблюдая все правила указанные в документации для нашей версии БСП https://its.1c.ru/db/bsp244doc#content:1833:1. И проверяем функционал на соответствие спецификации.

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

Пусть каталог в котором мы работаем с нашими спецификациями  — это  C:\data\features. Для работы с этим сценарием создадим в нем подкаталог "Присоединенные файлы" , в нем разместим наш прикрепляемый файл СканПоступления.pdf, играющий роль скана первичного документа.

 

Тогда наши действия по записи поведения будут выглядеть следующим образом:

 

Последовательность наших действий во время записи была похожа на поведение пользователя, но всё же мы выполняли ряд лишних действий, чтобы упростить автоматическую запись нужных действий. А именно :

 

1)   Избавляемся от зависимости от других сценариев

 

При создании документа приобретения товаров при выборе хозяйственной операции мы сначала нажимаем на кнопку “По хоз.операциям” а потом “По видам документов”. Это сделано для того, чтобы в нашем сценарии автоматически появился шаг

И я нажимаю на кнопку ‘По видам документов’

и нам не пришлось бы набирать его вручную. Этот шаг нужен чтобы сделать наш сценарий максимально независимым от других — если в каких-то других сценариях происходит создание документа закупки и нажимается кнопка “По хоз.операциям” то система запомнит этот выбор и в нашем сценарии мы могли бы получить ошибку при попытке развернуть нужную нам строку — её бы просто не оказалось в окне выбора типа документа.  Не нужный нам  шаг нажатия на кнопку “По хоз.операциям” мы затем удалим.

 

 

2)   Избавляемся от необходимости ручного набора шагов

 

После прикрепления нужного нам файла мы добавили еще один файл, а затем снова выбрали в списке нужный нам файл. Зачем? Это необходимо чтобы в списке файлов появилось две строки и мы могли автоматически записать шаг

 

И в таблице "Список" я перехожу к строке:

                | ‘Дата изменения’     | ‘Наименование’    |

                | ‘19.01.2019 0:43:50’ | ‘СканПоступления’ |

 

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

 

И в таблице "Список" я перехожу к строке:

                | ‘Наименование’    |

                | ‘СканПоступления’ |

 

Точно также поступим со всеми прочими шагами выбора строки — в них оставим только важные для нас колонки.

 

 

3)   Проверяем существование файла применяя лишь библиотечные шаги

 

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

Это как раз и была проверка наличия файла. Как мы увидим далее Vanessa-ADD ограничена в выполнении файловых операций и у нее нет шага “На диске есть файл …..”  Однако добавив шаги, прикрепления файла к документу как раз сможем убедиться в его наличии. Если файла не окажется то наш сценарий будет выдавать ошибки следующего вида :

 

 

 

 

Итак, в результате записи мы получаем первый набросок сценария, который нам предстоит доработать :

 


#language: ru

Функционал: <описание фичи>



Как <Роль>

Я хочу <описание функционала>

Чтобы <бизнес-эффект>



Контекст:

        Дано Я запускаю сценарий открытия TestClient или подключаю уже существующий



Сценарий: <описание сценария>



        И В командном интерфейсе я выбираю 'Закупки' 'Документы закупки (все)'

        Тогда открылось окно 'Документы закупки (все)'

        И в таблице "СписокДокументыЗакупки" я нажимаю на кнопку с именем 'Создать_ДокументЧерезФормуВыбора'

        Тогда открылось окно 'Создание документа по хозяйственной операции'

        И я нажимаю на кнопку 'По хоз. операциям'

        И я нажимаю на кнопку 'По видам документов'

        И в таблице "ДеревоПоДокументам" я разворачиваю строку:

                | 'Представление'                                                                                        |

                | 'Приобретение товаров и услуг                                                                        ' |

        И в таблице "ДеревоПоДокументам" я перехожу к строке:

                | 'Представление'        |

                | 'Закупка у поставщика' |

        И в таблице "ДеревоПоДокументам" я выбираю текущую строку

        И Я закрываю окно 'Создание документа по хозяйственной операции'

        Тогда открылось окно 'Приобретение товаров и услуг (создание)'

        И В текущем окне я нажимаю кнопку командного интерфейса 'Файлы'

        Тогда открылось окно '1С:Предприятие'

        И я нажимаю на кнопку 'OK'

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И В текущем окне я нажимаю кнопку командного интерфейса 'Файлы'

        И я нажимаю на кнопку 'Файл с диска...'

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И я нажимаю на кнопку 'Файл с диска...'

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И в таблице "Список" я перехожу к строке:

                | 'Дата изменения'     | 'Наименование'    |

                | '19.01.2019 0:43:50' | 'СканПоступления' |

        И в таблице "Список" я активизирую поле "Наименование"

        И Я закрываю окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        Тогда открылось окно 'Документы закупки (все)'

        И в таблице "СписокДокументыЗакупки" я перехожу к строке:

                | 'Валюта' | 'Вид документа'                                      | 'Дата'                | 'Номер'       | 'Организация' | 'Склад'                    |

                | 'RUB'    | 'Приобретение товаров и услуг, Закупка у поставщика' | '19.01.2019 20:02:36' | 'СБЦБ-000033' | 'Стройснаб'   | 'Оптовый неордерный склад' |

        И в таблице "СписокДокументыЗакупки" я выбираю текущую строку

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И В текущем окне я нажимаю кнопку командного интерфейса 'Файлы'

        И в таблице "Список" я активизирую поле "Наименование"

        И в таблице "Список" я перехожу к строке:

                | 'Дата изменения'     | 'Наименование'  |

                | '19.01.2019 0:41:40' | 'Первая запись' |

        И в таблице "Список" я перехожу к строке:

                | 'Дата изменения'     | 'Наименование'    |

                | '19.01.2019 0:43:50' | 'СканПоступления' |

        И я выбираю пункт контекстного меню с именем 'СписокКонтекстноеМенюСохранитьКак' на элементе формы с именем "Список"

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И я нажимаю на кнопку 'Файл с диска...'

        Тогда открылось окно 'Приобретение товаров и услуг СБЦБ-000033 от *'

        И в таблице "Список" я перехожу к строке:

                | 'Дата изменения'     | 'Наименование'  |

                | '19.01.2019 0:41:40' | 'Первая запись' |

        И в таблице "Список" я перехожу к строке:

                | 'Дата изменения'     | 'Наименование'                           |

                | '19.01.2019 0:43:50' | 'СканПоступления_СохраненныйИзДокумента' |

        

 

Что в нем потребуется еще доработать вдобавок к сказанному выше?

 

4)   Запустим тест-клиент от правильного пользователя — менеджера по продажам, вместо текущего

Как запускать сеанс под нужным пользователем мы уже изучали — достаточно применить шаг

Дано Я открыл сеанс TestClient от имени "Менеджер по продажам" с паролем "" или подключаю уже существующий

 

 

5)   Избавляемся от зависимости от номера документа в шагах проверки открытия формы

Мы видим, что зависим от номера документа в шагах вида Тогда открылось окно ‘Приобретение товаров и услуг СБЦБ-000033 от *’ , но в то же время эти шаги позволяют использовать символ звездочки и уже это делают. Нам достаточно просто убрать лишние символы номера, сделать шаг независимым от номера, присвоенного документу :

Тогда открылось окно ‘Приобретение товаров и услуг *’

 

 

6 )   Указываем пути к файлам

Мы можем заметить, что в сценарии мы нигде не указали какие именно файлы мы выбираем и под каким именем мы осуществляем сохранение файла. Нам как то нужно дополнить шаги И я нажимаю на кнопку ‘Файл с диска…’   и шаг И я выбираю пункт контекстного меню с именем ‘СписокКонтекстноеМенюСохранитьКак’ на элементе формы с именем "Список".  Нужно указать какой именно файл мы будем выбирать и под каким именем сохранять.

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

И Я буду выбирать внешний файл "Путь к файлу" 

 

Но есть одна тонкость. Мы не передаем имя файла в шаг нажатия на кнопку, приводящую к появлению диалогового окна выбора файла. Но и после появления диалога открытия файла очевидно уже поздно указывать, какой файл нам нужен — появится окно операционной системы, а не тест-клиента.  Технология работы с тест-клиентом (независимо от того применяем мы Vanessa-ADD или другой инструмент) требует указания файла, который мы будем выбирать, непосредственно ДО того как мы выполняем действия, приводящие к открытию диалогового окна выбора файла. Поэтому последовательность наших шагов должна оказаться следующей:

 

 

7)   Работаем со структурой “Контекст” чтобы получить независимость от номера документа

После записи документа и прикрепления к нему файлов, согласно спецификации мы должны закрыть этот документ, затем найти его в списке и открыть заново для проверки возможности сохранить файл на диск. Поиск происходит по номеру

 

        И в таблице "СписокДокументыЗакупки" я перехожу к строке:

                | ‘Дата’                          | ‘Номер’             |

                | ‘19.01.2019 20:02:36’ | ‘СБЦБ-000033’ |

 

Но ведь каждом выполнении сценария номер, присваиваемый документу платформой 1С, будет разным! Как поступить в этом случае?

Одним из вариантов является устанавливать номер документа вручную перед записью. Например набить в поле номер что-нибудь вроде 12345678911. И затем проводить поиск в списке по этому номеру. Вариант рабочий, но некрасивый. К тому же если одна и та же база используется для тестирования многократно это приведет к ошибкам связанных с дублями номеров. Мы воспользуемся более красивой возможностью — запомнить автоматически установленный номер документа и затем производить поиск по этому значению.

Посмотрим на описание библиотечного шага перехода к строке списка:

 

 

В описании говорится о возможности использовать Контекст и КонтекстСохраняемый для указания значений поиска.

 

Контекст  и КонтекстСохраняемый — это значения типа Структура и работать с ней можно как с обычной структурой, но нужно помнить, что она должна содержать только значения, которыми можно обмениваться между клиентом и сервером. Обе эти структуры хранятся на стороне тест-менеджера, но механизмы Vanessa-ADD позволяют записывать в них значения полей из форм тест-клиента.

 

В чем их отличия? Комментарии в исходном коде гласят :

 

  • Контекст — это структура, в которой хранится состояние сценария между выполнением шагов. Он очищается перед выполнением каждого сценария.
  • КонтекстСохраняемый — это структура, в которой можно хранить служебные данные между запусками сценариев. Он существует, пока открыта форма Vanessa-Behavior.

 

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

И    я запоминаю значение поля с именем "Номер" как "НомерДокумента"

 

Этот шаг добавит в структуру “Контекст” поле “НомерДокумента” (или изменит его значение, если оно уже было добавлено ранее) и установит значением этого поля номер документа. А далее, согласно описанию шага перехода к строке, заменим точное значение номера на значение из структуры “Контекст”. В итоге получим такие шаги :

 

 

 

8)   Избавляемся от бесконечного ожидания поиска документа по номеру в большом списке документов

В небольшой базе данных действий описанных выше будет достаточно. Документ будет найден. Но если в нашей базе сотни тысяч документов то поиск документа по номеру может затянуться на долгое время, даже на многие часы. Это недостаток приема, который применяет Vanessa-ADD для поиска — перебор строк.

Методически верно выполнять сценарии на небольшой демо базе. Но это не всегда возможно. Часто программисты уже написали много кода с поиском по наименованиям, ГУИДам и понаделали других некрасивых вещей, заставляющих вести разработку и выполнять сценарии на копиях баз. Можно даже сказать, что так происходит на большинстве предприятий.

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

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

 

 

После добавления отбора по периоду поиск документа по номеру будет выполняться быстро. Но здесь мы опять видим абсолютное значение даты, в то время как мы не устанавливали её в документе принудительно вручную. Вариант с ручной установкой даты в документе является одним из допустимых. Но мы уже научились использовать структуру “Контекст”. Применим эти знания и здесь. К нашему шагу по запоминанию номера добавим шаг по запоминанию даты документа.  Для этого Нам нужен шаг

И    я запоминаю значение поля с именем "Дата" как "ДатаДокумента"

 

Внимательный читатель скажет: “а откуда мы взяли имя Дата, ведь на форме нет названия Дата вообще, там есть заголовок  от ?” 

И действительно, нам также мог бы подойти шаг

И    я запоминаю значение поля "от" как "ДатаДокумента"

Но к сожалению в форме документа приобретения товаров несколько таких полей и Vanessa-ADD не сможет корректно обработать такой шаг — при исполнении возникнут ошибки, сообщающие о неоднозначном результате поиска элемента формы по заголовку. В таких случаях нам нужно ориентироваться именно на имя элемента, а не заголовок. Для получения имени элемента можно использовать Конфигуратор. Но еще лучше использовать исследователь форм, о котором мы уже говорили в предыдущей публикации. Нам будет достаточно выделить поле с датой, чтобы узнать имя этого элемента :

 

 

Для установки же запомненного значения в качестве даты начала интервала документа нам достаточно заменить шаг И в поле ‘DateBegin’ я ввожу текст ‘19.01.2019’ на предназначенный для работы со структурой “Контекст” шаг  И в поле с именем "DateBegin" ввожу значение переменной "ДатаДокумента". Кстати, дату окончания интервала можно вообще указывать без ущерба для производительности сценария.  В итоге получим такие шаги:

 

 

 

9)  Проверяем, действительно ли система предупреждает о необходимости записать документ перед добавлением файлов

 

В новом документе мы нажимаем ссылку в панели навигации “Файлы” и после этого система сообщает о том, что документ необходимо записать. Но это ли мы проверяем в нашем сценарии?  Посмотрим на наши шаги :

        И В текущем окне я нажимаю кнопку командного интерфейса 'Файлы'

        Тогда открылось окно '1С:Предприятие'

        И я нажимаю на кнопку 'OK'

        Тогда открылось окно 'Приобретение товаров и услуг *'

Здесь нет ни слова о том, что за сообщение было в блокирующем окне с заголовком ‘1С:Предприятие’. Таким образом эти шаги просто проверяют появление какого-то системного окна, но ничего более. Можно конечно оставить сценарий и в таком виде, но мы же рассматриваем учебный пример и давайте научимся решать даже такую задачу, как проверка текста в системных окнах!  

В решении этой задачи нам опять же поможет исследователь форм и ещё один шаг из встроенной библиотеки.  Вот как можно поступить :

 

 

Что происходило во время записи? Мы вызвали системное окно, сообщающее о необходимости выполнить запись документа. Затем перешли в тест-менеджер и открыли исследователь форм. Этот инструмент позволяет посмотреть на внутренности не только форм, определенных в конфигураторе, но и в системных окнах 1С:Предприятия.

Мы узнаём, что в автоматически создаваемом системном окне нужное нам поле имеет имя “Поле1” а текст должен включать в себя слова "Данные еще не записаны". Таким образом мы можем добавить шаг, который позволяет нам убедиться, что платформа предлагает именно записать документ, а не выдаёт какое-то другое сообщение об ошибке или другой текст. Нужный нам шаг будет выглядеть следующим образом :  

И значение поля с именем "Поле1" содержит текст "Данные еще не записаны"

 

 

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