Skip to content

Сценарные тесты сценарии в виде связанных и последовательных шагов

Artur Ayukhanov edited this page Sep 9, 2016 · 5 revisions

Начиная с версии 4.0, появилась возможность использовать полноценные сценарные тесты.

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

Для реализации подобного поведения шаги/тесты одного сценария объединяем в модуле (модуле обработки или модуле формы) одного файла-обработки тестирования (внешней или встроенной).

  • В одном модуле может быть несколько тестовых сценариев.

  • Тесты всегда будут запускаться в том порядке, который задан при добавлении тестов в методе ЗаполнитьНаборТестов

  • Для добавления нового сценария нужно использовать метод НаборТестов.НачатьГруппу(ПредставлениеГруппы, Истина)

  • Для метода начала тестового сценария нужно использовать первый тест из тест.набора, добавляемый после начала группы (через метод НаборТестов.Добавить(ИмяМетода, Параметры, ПредставлениеМетода = "") или НаборТестов.Добавить(ИмяМетода, ПредставлениеМетода = "")

  • Для метода завершения тестового сценария (например, для освобождения ресурсов) нужно использовать метод ДобавитьДеструктор(ИмяМетода, ПредставлениеМетода = "").

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

Контекст сценария

Для сценарных тестов становится возможным использование контекста сценария.

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

2 метода работы с контекстом:

  • процедура КонтекстЯдра.СохранитьКонтекст(НовыйКонтекст)

    • устанавливает новое значение контекста для сценария
    • параметр НовыйКонтекст - значение нового контекста. Тип - произвольный.
  • функция КонтекстЯдра.ПолучитьКонтекст()

    • возвращает значение контекста сценария

Использование методов работы с контекстом запрещено при использовании несценарных тестов.

Пример простого тестового сценария с использованием контекста

Перем КонтекстЯдра;
Перем Ожидаем;

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");
КонецПроцедуры

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
	НаборТестов.НачатьГруппу("Сценарные тесты с вызовом деструктора группы", Истина);
	НаборТестов.Добавить("КонструкторСценария", "Начало сценария");
	НаборТестов.Добавить("ТестДолжен_ПроверитьЖурналВыполнения", "Проверяю журнал выполнения шагов");
	НаборТестов.ДобавитьДеструктор("ДеструкторСценария", "Обязательное завершение сценария");

КонецПроцедуры

// { Сценарный тест
Процедура КонструкторСценария() Экспорт
	ЖурналВыполнения = "КонструкторСценария;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры

Процедура ТестДолжен_ПроверитьЖурналВыполнения() Экспорт
	ЖурналВыполнения = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(ЖурналВыполнения, "ТестДолжен_ПроверитьЖурналВыполнения").Равно("КонструкторСценария;");
	ЖурналВыполнения = ЖурналВыполнения + "ПроверитьЖурналВыполнения;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры

Процедура ДеструкторСценария() Экспорт
	ЖурналВыполнения = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(ЖурналВыполнения, "ДеструкторСценария").Равно("КонструкторСценария;ПроверитьЖурналВыполнения;");
	ЖурналВыполнения = ЖурналВыполнения + "ДеструкторСценария;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры
// } 

Пример тестового сценария с параметризированными тестами

Перем КонтекстЯдра;
Перем Ожидаем;

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");
КонецПроцедуры

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
	НаборТестов.НачатьГруппу("Тестовый сценарий с параметризированными тестами", Истина);
	НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст", НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст");
	Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром");
	Тест.Параметры.Добавить(12);
	НаборТестов.ДобавитьДеструктор("ДеструкторСценария", "Обязательное завершение сценария");
КонецПроцедуры

// { Тестовый сценарий с параметризированными тестами
Процедура ТестДолжен_СохранитьРезультатСложенияВКонтекст(Знач1, Знач2) Экспорт
	КонтекстЯдра.СохранитьКонтекст(Знач1 + Знач2);
КонецПроцедуры

Процедура ТестДолжен_СравнитьКонтекстСоСвоимПараметром(Результат) Экспорт
	Контекст = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(Контекст).Равно(Результат);
КонецПроцедуры

Процедура ДеструкторСценария() Экспорт
	//Что-то делаем
КонецПроцедуры
// } 
Clone this wiki locally