При переходе к автоматизированному тестированию в 1С разработчики часто сталкиваются с терминологической и методологической путаницей. Когда ставится задача «проверить открытие формы, заполнение полей пользователем, ввод на основании и проведение документа», классический подход модульного тестирования (unit-тестов) оказывается неэффективным. Разберем подробно, почему возникает эта сложность, как разделить уровни проверки и какие проверенные инструменты использовать для решения каждой задачи.
Проанализируем базовое различие между двумя подходами к автоматизации:
Попытка тестировать экранные формы через классические библиотеки модульного тестирования (такие как первоначальный xUnitFor1C) вызывает затруднения, поскольку они рассчитаны на вызов процедур программного кода, а не на управление элементами управления формы. Для тестирования интерфейса применяются иные решения.
Наиболее зрелым и общепринятым инструментом для проверки сценариев взаимодействия с пользователем в среде 1С является Vanessa Automation (эволюционное развитие идей Vanessa Behavior). Этот фреймворк реализует подход BDD (Behavior-Driven Development), при котором сценарии составляются на человекопонятном языке Gherkin.
Инструмент подключается к клиенту тестирования платформы и эмулирует действия оператора. Посмотрим на типовой сценарий BDD для проверки заполнения и проведения документа:
Функционал: Проведение документа Реализация товаров и услуг
Сценарий: Создание и успешное проведение документа
И Я открываю навигационную панель
И Я выбираю пункт меню "Продажи" "Реализация товаров и услуг"
И В открывшемся окне я нажимаю кнопку с именем "ФормаСоздать"
Тогда открылось окно "Реализация товаров и услуг (создание)"
И Я в поле с именем "Контрагент" ввожу текст "ООО Покупатель"
И В таблице "Товары" я нажимаю кнопку "Добавить"
И В таблице "Товары" в поле "Номенклатура" я выбираю значение "Товар 1"
И В таблице "Товары" в поле "Количество" я ввожу текст "10"
И В таблице "Товары" в поле "Цена" я ввожу текст "100"
И Я нажимаю кнопку с именем "ФормаПровестиИЗакрыть"
Тогда окно "Реализация товаров и услуг (создание)" закрылось
Преимущества данного подхода:
Платформа 1С:Предприятие 8 включает встроенный механизм автоматизированного тестирования. Архитектура построена на взаимодействии двух клиентских сеансов:
/TestManager. В нем исполняется программный код проверки и происходит управление целевым приложением./TestClient. Это приложение, в интерфейсе которого воспроизводятся клики, ввод значений и навигация.Для программного управления интерфейсом платформа предоставляет специализированные типы: ТестируемоеПриложение, ТестируемаяФорма, ТестируемоеПолеФормы, ТестируемаяТаблицаФормы. Посмотрим, как выглядит программный код теста на встроенном языке:
Клиент = Новый ТестируемоеПриложение;
Клиент.УстановитьСоединение();
Окно = Клиент.ПолучитьГлавноеОкно();
КомандаСоздать = Окно.НайтиОбъект(Тип("ТестируемаяКнопка"), "ФормаДокументРеализацияСоздать");
КомандаСоздать.Нажать();
ФормаДокумента = Клиент.ПолучитьАктивноеОкно();
ПолеКлиент = ФормаДокумента.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Контрагент");
ПолеКлиент.ВвестиТекст("ООО Покупатель");
КнопкаПровести = ФормаДокумента.НайтиОбъект(Тип("ТестируемаяКнопка"), "ФормаПровести");
КнопкаПровести.Нажать();
Клиент.РазорватьСоединение();
Необходимо учитывать важные ограничения штатного менеджера тестирования:
ТестируемоеПриложение невозможно.Если цель состоит в проверке корректности заполнения реквизитов, расчета сумм, механизма ввода на основании и формирования движений в регистрах, открывать экранную форму не требуется. Для этого применяются современные модульные фреймворки (например, YAxUnit).
Бизнес-логика проверяется непосредственно через программные объекты. Разберем по шагам, как проверить проведение документа и ввод на основании программным путем:
// Пример проверки проведения и заполнения на основании
Процедура Тест_СозданиеИПроведениеНакладной() Экспорт
НачатьТранзакцию();
Попытка
// Шаг 1: Создаем и заполняем документ-основание
Заказ = Документы.ЗаказПокупателя.СоздатьДокумент();
Заказ.Дата = ТекущаяДатаСеанса();
Заказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ТестовыйКлиент");
Заказ.Записать(РежимЗаписиДокумента.Проведение);
// Шаг 2: Проверяем ввод на основании
Накладная = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
Накладная.Заполнить(Заказ.Ссылка);
// Шаг 3: Проверяем реквизиты после заполнения
ЮТТест.ПроверитьРавенство(Накладная.Контрагент, Заказ.Контрагент);
ЮТТест.ПроверитьБольше(Накладная.Товары.Количество(), 0);
// Шаг 4: Проверяем проведение
Накладная.Записать(РежимЗаписиДокумента.Проведение);
// Шаг 5: Проверяем движения по регистру
НаборДвижений = РегистрыНакопления.ОстаткиТоваров.СоздатьНаборЗаписей();
НаборДвижений.Отбор.Регистратор.Установить(Накладная.Ссылка);
НаборДвижений.Прочитать();
ЮТТест.ПроверитьБольше(НаборДвижений.Количество(), 0);
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
// Откатываем изменения, чтобы не засорять базу тестовыми данными
ОтменитьТранзакцию();
КонецПроцедуры
При тестировании операций записи и проведения документов ключевой задачей становится поддержание чистоты информационной базы:
НачатьТранзакцию() в начале и ОтменитьТранзакцию() в блоке завершения. Все созданные документы и проводки исчезают без следа.