Лучшие практики по написанию автоматических тестов¶
Тест-клиенты¶
-
Шаг для подключения тест-клиента
Дано Я подключаю клиент тестирования с параметрами: | 'Имя' | 'Логин' | 'Пароль' | 'Дополнительные параметры строки запуска' | | 'Администратор' | 'Администратор' | '' | '/CРежимОтладки' |
-
Для подготовки пользователей используйте шаги из библиотеки по созданию групп доступа и пользователей. Например:
И Я создаю группу доступа "Базовый профиль" с профилем "Базовый профиль" И Я создаю группу доступа "Планирование разруба" с профилем "Планирование разруба" И Я создаю пользователя "Планирование разруба" с профилями "Базовый профиль;Планирование разруба"
-
Если тест-клиент больше не нужен - его нужно закрыть, кроме администратора. Но если нужен, то закрывать не нужно, т.к. запуск тест-клиента занимает до 20 секунд
-
Шаг для закрытия тест-клиента
И я закрываю TestClient "Планирование разруба"
Шаги¶
-
Шаг начинается с ключевого слова:
Допустим
,Дано
,Пусть
- шаг устанавливает начальные настройкиКогда
,И
,К тому же
,Также
- шаг выполняет действиеТо
,Затем
,Тогда
- шаг проверяет результат
В начале шага можно использовать любое ключевое слово и это не будет синтаксической ошибкой. Различные шаги позволяют - более удобно читать текст и различать поведения:
Ваша программа не работает
иВаша программа работает, но неправильно
. Первое легко ловится и правится, т.к. выскакивает ошибка. Второе может годами оставаться в системе и никак себя не выдавать, поэтому это ошибки более серьезные. -
Шаги можно сгруппировать. Написать любой текст, а следующие шаги в группировке писать с отступом.
Пример
И Я ввожу комментарий "Создание простой партии" * я добавляю сырье # Это группировка. Вместо "* я добавляю сырье" можно писать любой текст И в таблице "Сырье" я нажимаю на кнопку с именем 'СырьеДобавить' # шаг с отступом И в таблице "Сырье" я нажимаю кнопку выбора у реквизита с именем "СырьеЗаписьСкладскогоЖурнала" Тогда открылось окно 'Меркурий: Журнал продукции' * я устанавливаю отбор журналу продукции # Группировка И Я указываю отборы по датам в списке записей журнала # Экспортный шаг с отступом Тогда открылось окно 'Меркурий: Журнал продукции' И я меняю значение переключателя 'ОтборТолькоВНаличии' на 'Только в наличии' И я нажимаю кнопку выбора у поля "ОтборТипПродукции" И из выпадающего списка "ОтборТипПродукции" я выбираю по строке 'пищевые продукты' И из выпадающего списка "ОтборПродукция" я выбираю по строке 'молоко и молочная продукция' И из выпадающего списка "ОтборВидПродукции" я выбираю по строке 'молоко сырое' И из выпадающего списка "ОтборНаименованиеПродукции" я выбираю по строке 'молоко сырое Глазов' И в поле 'ОтборМаркировка' я ввожу текст '22' И в поле 'ОтборИдентификаторПартии' я ввожу текст '321123' И из выпадающего списка "ОтборВладелец" я выбираю по строке 'ОАО \"МИЛКОМ\"' И из выпадающего списка "ОтборПроизводитель" я выбираю по строке 'ОАО \"Милком\" Сарапул' И в таблице "Список" я перехожу к строке: # Это НЕ группировка, а шаг | 'ИД' | 'Наименование' | 'Объем' | 'Срок годности' | | '321123' | 'молоко сырое Глазов 2 /3 кг' | '2, кг' | '$$ОкончаниеСрокаГодности$$' | И в таблице "Список" я выбираю текущую строку
-
Для правильной работы группировок нужно весь фиче-файл форматировать либо табами, либо пробелами. Правильнее табами. VA поругается, если в фиче-файле есть и табы и пробелы.
- Группировку нужно начинать со "*", чтобы было понятно, что это группировка
- Любую повторяющуюся операцию нужно выносить или в экспортные фичи (должно лежать в этом же каталоге или в подкаталогах текущей папки, иначе не найдет) или в библиотеку. Это позволяет потом править в одном месте изменение теста и такой сценарий проще найти.
-
Вместо пауз лучше использовать асинхронные шаги. Асинхронными называются шаги, которые выполняются в течение какого-то времени. Например, проверка значения поля с использованием асинхронного шага будет выглядеть следующим образом:
И в таблице "ИмяТаблицы" у поля "Заголовок элемента" я жду значения "Значение" в течение 20 секунд
И я жду закрытия окна 'Профиль групп доступа (создание)' в течение 20 секунд
И я жду открытия окна "Пользователи" в течение 20 секунд
И я жду доступности элемента "Действует с" в течение 20 секунд
И я жду когда в табличном документе "ОтчетТабличныйДокумент" заполнится ячейка "R12C3" в течение 20 секунд
Затем я жду, что в сообщениях пользователю будет подстрока "не заполнено" в течение 10 секунд
Поля¶
- Выбирать значение в поле лучше всего шагом
И из выпадающего списка "Поле" я выбираю по строке 'Значение'
. Чтобы этот шаг записался кнопконажималкой - нужно в поле ввести текст полностью и нажать Ентер. - Открывать форму выбора у элемента нужно только в том случае, если это основной пользовательский сценарий работы с этим полем.
- Создавать новые элементы при выборе можно только тогда, когда это основной пользовательский сценарий. Во всех остальных случаях данные для выбора уже должны быть созданы.
- Это ускоряет и упрощает сценарий
- Это разделяет проверки на создание НСИ и провери функционала. Упасть создание НСИ в случае ошибки должно при проверке НСИ, а не при проверке документа.
- Тест-клиент очень не любит много открытых вложенных окон и если сценарий открывает элемент, в нем открывает форму выбора, в нем создает новый элемент, в нем открывает новую форму и в нем опять создает новый элемент - тест-клиент теряет окно и все падает.
- Выбирать даты нужно через ввод значения, а не через выбор в календаре.
И в таблице "Продукция" в поле с именем 'ПродукцияДатаОкончанияСрокаГодности' я ввожу текст '$$ОкончаниеСрокаГодности$$'
- Для установки флага использовать шаг
И я устанавливаю флаг "Заголовок флага"
. Для снятияИ я снимаю флаг "Заголовок флага"
. Автоподставляемый шагИ я изменяю флаг "Заголовок флага"
меняет значение флага и если флаг стоит не в нужном положении - будет ошибка. - Окончание ввода полей нужно завершать шагом
И я перехожу к следующему реквизиту
. Иначе не сработают обработчики изменения у последнего поля. - Для получения шагов, проверяющих значения в полях, удобно использовать команду "Получить состояние всей формы" на закладке "Работа с UI" в подменю "Форма". Или комбинация команд "Запомнить состояние формы TestClient" и "Получить изменения формы". Лишнее или непостоянное, типа даты документа или его номера, можно скорректировать вручную. .
-
Проверка, что элемент, который скрыт через функциональные опции, условное оформление или видимость группы, не видим:
И поле с именем "ИмяПоля" существует Затем Проверяю шаги на Исключение: |'И в поле с именем "ИмяПоля" я ввожу текст "Текст"'|
-
Если значение гиперссылки постоянно меняется, то можно открывать гиперссылку по порядковому номеру:
И у поля "Заголовок поля" я нажимаю гиперссылку 0
Значения¶
- Учитывайте, что тест может выполнятся как один, так и в рамках прогона всех тестов по конфигурации. Тест может выполнятся на границе дня ночью. Может выполнятся повторно.
- Не используйте в качестве значений для выбора/подстановки автогенерируемые системой значения - номер и дата документа, код справочника и аналоги. Заменяйте эти значения на * и используйте сравнение по шаблону
-
Символ
*
интерпретируется как произвольный набор символов в шагах. Некоторые шаги сразу поддерживают символ*
, например:И я нажимаю на кнопку "Провести и закр*"
И я меняю значение переключателя 'Заголовок элемента' на 'Значение переключателя(*)' по шаблону
-
Для работы с локальными переменными используются шаги в которых переменная оборачивается в символ $:
И я запоминаю имя текущего поля как "$ИмяПеременной$" И в поле с именем "ИмяПоля" ввожу значение переменной "$ИмяПеременной$"
-
Для работы с глобальными переменными используются шаги в которых переменная оборачивается в символы $$:
И я запоминаю имя текущего поля как "$$ИмяПеременной$$" И в поле с именем "ИмяПоля" ввожу значение переменной "$$ИмяПеременной$$"
-
Для сохранения в переменную произвольного выражения используется шаг:
И Я запоминаю значение выражения 'Выражение' в переменную "ИмяПеременной"
Таблицы¶
-
Для проверки таблиц нужно использовать следующие шаги, а не прокликивание строк:
И таблица "ИмяТаблицы" содержит строки: |"ИмяКолонки1"|"ИмяКолонки2"| |"Значение1" |"Значение2" | Тогда в таблице "ИмяТаблицы" количество строк "равно" N
И таблица "ИмяТаблицы" стала равной: |"ИмяКолонки1"|"ИмяКолонки2"| |"Значение1" |"Значение2" |
-
Окончание ввода строки нужно завершить шагом
И в таблице "Таблица" я завершаю редактирование строки
. Чтобы отработали обработчики. - Убирайте незначительные колонки из таблицы - пустые колонки, номера строк.
-
Скрываайте звездочками переменые данные - номера документов, коды справочников, даты. Но тогда нужно использовать вариант шагов с шаблоном
И таблица "ИмяТаблицы" стала равной по шаблону: | ИмяКолонки1 | ИмяКолонки2 | | Значение1 | Значение2 |
И таблица "ИмяТаблицы" содержит строки из макета "ИмяМакета" по шаблону
-
Добавлять несколько строк в таблицу можно специальным шагом. Это проще читается и сопровождается. Но не накликивается.
И я заполняю таблицу "ИмяТаблицы" данными | 'ИмяКолонки1' | 'ИмяКолонки2' | | 'Значение1' | 'Значение2' |
-
При выборе значения из таблицы значений необходимо дописать искусственный шаг перехода к нужной строке, чтобы не возникало ошибки, когда строки в таблице меняются местами:
И в таблице "ИмяТаблицы" я перехожу к строке: | 'ИмяКолонки' | | 'ЗначениеКолонки' |
Табличные документы¶
-
Большие табличные документы лучше проверять через макет, используя шаг:
Дано табличный документ "ИмяРеквизита" равен макету "ИмяМакета" по шаблону
-
При проверке отчетов, если отчет до формирования был пустой, то дополнительные проверки не нужны. Если отчет уже сформирован, тогда нужно ждать окончания его переформирования, для этого использовать шаг:
И я жду, что в табличном документе "ИмяРеквизита" ячейка "АдресЯчейки" станет равна "Значение" в течение 20 секунд
Окна¶
-
При открытии окон обязательно проверять, что открылось новое окно с помощью шага:
Тогда открылось окно "ИмяОкна"
И я жду открытия окна "ИмяОкна" в течение 20 секунд
-
Аналогично при закрытии окна нужно проверять, что оно закрылось:
И я жду закрытия окна "ИмяОкна" в течение 20 секунд
-
Команды в командном интерфейсе нажимать за один шаг, а не за два. Между шагами может обновится интерфейс и тест упадет.
И В панели разделов я выбираю 'Нормативно-справочная информация' И В панели функций я выбираю 'Номенклатура'
И В командном интерфейсе я выбираю 'Нормативно-справочная информация' 'Номенклатура'
Динамически добавленные элементы¶
- Поля должны иметь воспроизводимые имена. Если открыть одну и ту же форму, ничего не меняя в системе - то все имена полей должны быть такими же. Не должно быть полей с именем на основе уникального идентификатора.
-
Поля, которые строятся на основе дат - должны содержать эти даты в имени.
Тогда в таблице "ДеревоОтгрузок" поле с именем "ДеревоОтгрузокПлан_190204" имеет значение "300"
-
Поля, которые строятся по справочникам - должны содержать код справочника в имени. При создании такого справочника нужно принудительно устанавливать код на что-то уникальное.
Пример из ценообразования
Если в вид цен устанавливать код = 2 - может возникнуть ситуация, когда какие-то тесты до нашего так же создавали виды цен и код "2" уже занят. Поэтому код нужно устанавливать сильно с запасом.
И я разворачиваю группу "Подробное описание" И в поле 'Код' я ввожу текст '0' Тогда открылось окно '1С:Предприятие' И я нажимаю на кнопку 'Да' Тогда открылось окно 'Вид цены (создание) *' И в поле 'Код' я ввожу текст '113' И я нажимаю на кнопку 'Записать и закрыть'
И в таблице "ДеревоЦен" в поле с именем "ДеревоЦенНоваяЦена_113" я ввожу текст '100,00' И в таблице "ДеревоЦен" в поле с именем "ДеревоЦенНоваяЦена_114" я ввожу текст '80,00' И в таблице "ДеревоЦен" в поле с именем "ДеревоЦенНоваяЦена_115" я ввожу текст '110,00' И в таблице "ДеревоЦен" я завершаю редактирование строки
Документы¶
- Проведение документов лучше проверять через "Провести и закрыть", проверить, что форма закрылась, и потом открыть документ заново. Если использовать "Провести", то управление менеджеру может перейти раньше, чем проведение будет выполнено.
- Движения документов нужно проверять через отчеты.
- При переходе к документу нельзя обращаться к номеру документа, он может изменится. Нужно выбирать документ на основе тех значений на которые смотрит обычный пользователь: тип, ответственный, комментарий, важные поля шапки итп.
Файлы¶
-
Шаг выбора файла надо вызывать до того, как появился диалог выбора файлов.
И я буду выбирать внешний файл "ИмяФайла"
Сценарий: Планирование переработки. Загрузка заказов И В командном интерфейсе я выбираю 'Исполнение заказов клиентов' 'Заказы клиентов' Тогда открылось окно 'Заказы клиентов' И я нажимаю на кнопку 'Загрузить заказы из файла' Тогда открылось окно 'Загрузка заказов клиента из файла' И я меняю значение переключателя 'Вариант загрузки' на 'Из внешнего файла' И я перехожу к закладке "Страница вариант загрузка из файла" Тогда открылось окно 'Загрузка заказов клиента из файла' И Я буду читать файл "Заказы.csv" И я нажимаю на кнопку 'Загрузить таблицу из файла...' И я жду открытия окна 'Заказы клиентов' в течение 60 секунд И Я закрываю окно 'Заказы клиентов' # Этот сценарий расположен в библиотеке Сценарий: Я буду читать файл "ИмяФайла" И Я запоминаю значение выражения 'ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла( Ванесса.ПолучитьСостояниеVanessaAutomation().ТекущаяФича.ПолныйПуть ).Путь + "\"' в переменную "КаталогТеста" И я буду выбирать внешний файл "$КаталогТеста$""ИмяФайла"
-
Нужные файлы для теста должны лежать в той же папке. Рядом с фичей.