- Описание публичного интерфейса библиотеки
- Стандартная библиотека шагов
- API фреймворка
для использования в собственных фичах
Стандартные библиотечные шаги, подключаемые автоматически для любой фичи, находятся в каталоге features/lib
ВыполнениеКоманд.feature
- выполнение команд системы и запуск процессовФайловыеОперации.feature
- создание файлов/каталогов, их копирование, анализ содержимого файлов
Очень полезный функционал, упрощающий написание фич.
Происходит подмена строк или путей, если установлена соответствующая переменная/ключ в контексте.
Пример:
Дано Я сохраняю значение 356 в переменную "ПеременнаяДляУстановки"
Тогда Значение "ПеременнаяДляУстановки" равно 356
или
Дано Я создаю временный каталог и сохраняю его в переменной "СпециальныйКаталог"
Когда Я создаю файл "СпециальныйКаталог/ФайлСТекстом.txt" с текстом "текст178"
Тогда Файл "СпециальныйКаталог/ФайлСТекстом.txt" содержит "178"
Есть небольшие ограничения:
-
Если переданная строка используется как путь к каталогу или файлу, то замениться может только первая часть пути.
- Например,
СпециальныйКаталог/ФайлСТекстом.txt
будет подменено - а
Каталог1\СпециальныйКаталог/ФайлСТекстом.txt
уже не будет заменено
- Например,
-
Если переданная строка используется не как путь, тогда ищется полное соответствие строки и ключа контекста
- Например, если есть переменная контекста
СпециальнаяПеременная
- тогда строка
СпециальнаяПеременная
будет подменена на значение из контекста, - а строка
Текст СпециальнаяПеременная
уже не будет заменена.
- Например, если есть переменная контекста
Программное API описано в API подстановки переменных из контекста в строках и путях к файлам
Я выполняю команду "oscript"
я вижу в консоли вывод "Version"
я вижу в консоли вывод
я вижу в консоли вывод
| Usage |
| Special mode: oscript.exe <mode> |
я не вижу в консоли вывод "Несуществующая строка"
я не вижу в консоли вывод
я не вижу в консоли вывод
| Несуществующая строка |
| Несуществующая строка |
Вывод команды "oscript" содержит
Вывод команды "oscript" содержит
| Usage |
| Special mode: oscript.exe <mode> |
Тогда Вывод команды "oscript" не содержит
Тогда Вывод команды "oscript" не содержит
| Несуществующая строка 1 |
| Несуществующая строка 2 |
я вижу в консоли строку подобно "(\d+\.){3}\d+"
я не вижу в консоли строку подобно "(\d+\.){5}"
Я показываю вывод команды
Вывод команды "oscript" не содержит "КаталогПроекта"
Я сообщаю вывод команды "oscript"
Код возврата равен 0
Код возврата команды "oscript" равен 2
Я выполняю команду "oscript" с параметрами "-version"
Я выполняю команду "oscript" с параметрами "<КаталогПроекта>"
Я добавляю параметр "-version" для команды "oscript"
Когда Я добавляю параметры для команды "oscript"
Когда Я добавляю параметры для команды "oscript"
| -version |
-
Когда Я устанавливаю путь выполнения команды "МоеПриложение" как "КаталогПроекта/src/bdd.os"
-
Когда я завершаю работу приложения "НесуществующееПриложение13874.exe"
-
Дано Я очищаю параметры команды "oscript" в контексте
-
И я включаю отладку лога с именем "bdd.tests"
-
И я выключаю отладку лога с именем "bdd.tests"
-
И я включаю полную отладку логов пакетов OneScript
-
И я выключаю полную отладку логов пакетов OneScript
-
И Я сохраняю каталог проекта в контекст
-
Дано Я создаю временный каталог и сохраняю его в переменной "СпециальныйКаталог"
-
Допустим Я создаю временный каталог и сохраняю его в контекст
-
И Я устанавливаю временный каталог как рабочий каталог
-
И Я установил рабочий каталог как текущий каталог
-
И Я установил подкаталог "folder0" рабочего каталога как текущий каталог
-
И Я показываю текущий каталог
-
Тогда Я показываю каталог проекта
-
И Я показываю рабочий каталог
-
И Я создаю каталог "folder0/folder01" в рабочем каталоге
-
И Я создаю каталог "folder011" в подкаталоге "folder0/folder01" рабочего каталога
-
Когда Я создаю каталог "СпециальныйКаталог/folder0/folder01"
-
Когда Я создаю каталог "folder1/folder11" внутри каталога "СпециальныйКаталог"
-
Допустим Я создаю временный каталог и сохраняю его в контекст
-
Когда Я создаю файл "folder0/file01.txt" в рабочем каталоге
-
И Я создаю файл "file01" в подкаталоге "folder0/folder01" рабочего каталога
-
Когда Я создаю файл "СпециальныйКаталог/file01.txt"
-
Когда Я создаю файл "folder1/file11.txt" внутри каталога "СпециальныйКаталог"
-
Тогда Файл "СпециальныйКаталог/folder1/file11.txt" существует
-
Когда Я создаю файл "СпециальныйКаталог/ФайлСТекстом.txt" с текстом "текст178"
-
Тогда Файл "СпециальныйКаталог/ФайлСТекстом.txt" содержит "178"
-
Когда Я создаю файл "СпециальныйКаталог/ФайлСТекстом.txt" с текстом
-
Тогда я показываю текст файла "СпециальныйКаталог/ФайлСТекстом.txt"
-
И я показываю 2 строки файла "СпециальныйКаталог/ФайлСТекстом.txt"
-
Тогда Файл "folder0/file01.txt" содержит "Текст файла"
-
И Файл "folder0/file01.txt" не содержит "Не существующий текст"
-
Тогда Файл "folder0/file01.txt" в рабочем каталоге содержит "Текст файла"
-
И Файл "folder0/file01.txt" в рабочем каталоге не содержит "Не существующий текст"
Пример шагов:
Когда Я создаю файл "СпециальныйКаталог/ФайлСТекстом.txt" с текстом
"""
строка 1
строка 2
"""
Тогда я показываю текст файла "СпециальныйКаталог/ФайлСТекстом.txt"
И я показываю 2 строки файла "СпециальныйКаталог/ФайлСТекстом.txt"
Тогда Файл "СпециальныйКаталог/ФайлСТекстом.txt" содержит
"""
строка 1
строка 2
"""
-
Я копирую файл "xxx/file01.txt" в каталог "yyy/zzz"
-
Я копирую файл проекта "xxx/file01.txt" в каталог "yyy/zzz"
-
Я копирую каталог "xxx/nnn" в каталог "yyy/zzz"
-
Я копирую каталог проекта "xxx/nnn" в каталог "yyy/zzz"
-
- учитываются различные шаблонные переменные
- РабочийКаталог, КаталогПроекта или "." или любые специальные каталоги, ранее заданные
- текущий каталог можно не указывать
# пример копирования в текущий каталог - И Я копирую файл "РабочийКаталог/fixtures/ИмяФайла" в каталог "." # пример копирования в текущий каталог - И Я копирую файл проекта "fixtures/ИмяФайла" в каталог "ТекущийКаталог/ВложенныеКаталоги" # пример копирования в рабочий каталог - И Я копирую файл "СпециальныйКаталог/ИмяФайла" в каталог "РабочийКаталог" # пример копирования в специальный каталог - И Я копирую файл проекта "fixtures/ИмяФайла" в каталог "СпециальныйКаталог" # пример копирования в подкаталоги текущего каталога - И Я копирую файл "КаталогПроекта/fixtures/ИмяФайла" в каталог "./ВложенныеКаталоги"
- учитываются различные шаблонные переменные
-
Когда Я копирую файл "step_definitions/БезПараметров.os" из каталога "tests/fixtures" проекта в рабочий каталог
-
И Я копирую файл "fixtures/test-report.xml" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога
-
Когда Я копирую каталог "fixtures/step_definitions" из каталога "tests/fixtures" проекта в рабочий каталог
-
И Я копирую каталог "fixtures/step_definitions" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога
Когда Я удаляю каталог "СпециальныйКаталог/КаталогДляУдаления"
Когда Я удаляю файл "СпециальныйКаталог/ФайлДляУдаления.txt"
-
Тогда Каталог "СпециальныйКаталог/folder0" существует
- или
Тогда Каталог "СпециальныйКаталог/folder0/folder01" существует
- или
-
И Каталог "СпециальныйКаталог/folder0/folder01-unknown" не существует
-
Тогда Файл "СпециальныйКаталог/file01.txt" существует
-
И Файл "folder01/file01-unknown.txt" не существует
-
Тогда В рабочем каталоге существует каталог "folder0/folder01"
-
И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "folder011"
-
И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "*011"
-
Тогда Каталог "folder0" внутри каталога "СпециальныйКаталог" существует
- или
И Каталог "folder0/folder01" внутри каталога "СпециальныйКаталог" существует
- или
-
И Каталог "folder0/folder01-unknown" внутри каталога "СпециальныйКаталог" не существует
-
Тогда В рабочем каталоге существует файл "folder0/file01.txt"
- или
Тогда В рабочем каталоге существует файл "folder0/*01.txt"
- или
-
И В подкаталоге "folder0/folder01" рабочего каталога существует файл "file01"
- или
И В подкаталоге "folder0/folder01" рабочего каталога существует файл "*01"
- или
И Я установил рабочий каталог как текущий каталог
И Я установил подкаталог "folder0" рабочего каталога как текущий каталог
И Я восстановил предыдущий каталог
-
Дано Я сохраняю значение 356 в переменную "ПеременнаяДляУстановки"
-
Тогда Значение "ПеременнаяДляУстановки" равно 356
-
Когда Я сохраняю значение "ПеременнаяДляУстановки" в переменную "ВтораяПеременнаяДляЧтения"
-
Тогда Значение "ВтораяПеременнаяДляЧтения" равно 356
Тогда Значение "ПеременнаяДляЧтения" равно "123"
Тогда Значение "ТретьяПеременнаяДляЧтения" равно "123"
Важно: значения в переменных окружения всегда хранятся как строки, т.е. для любого значения выполняется приведение к строке.
-
Дано Я сохраняю значение 123 в переменную "ПеременнаяДляУстановки"
-
Когда Я устанавливаю переменную окружения "BDDVAR1" из переменной "ПеременнаяДляУстановки"
-
Тогда я получаю переменную окружения "BDDVAR1" в переменную "ПеременнаяДляЧтения"
-
И Я очищаю значение переменных окружения
И Я очищаю значение переменных окружения
|BDDVAR1|
Я пропускаю этот сценарий в Linux
Я пропускаю этот сценарий в Windows
-
я подготовил репозиторий и рабочий каталог проекта
фактически выполняются следующие шаги
Дано я выключаю отладку лога с именем "oscript.app.vanessa-runner"
И Я очищаю параметры команды "oscript" в контексте
И Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
И Я создаю каталог "build/out" в рабочем каталоге
И Я установил рабочий каталог как текущий каталог
И Я сохраняю каталог проекта в контекст
-
я подготовил рабочую базу проекта "./build/ib" по умолчанию
фактически выполняются следующие шаги
я подготовил репозиторий и рабочий каталог проекта
- шаг расшифрован вышеИ Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --ibconnection /F%1"
- где
%1
заменяется на путь к ИБ, указанный в параметре шага "./build/ib"
- где
Я очищаю параметры команды "oscript" в контексте
-
я инициализирую репозиторий git в рабочем каталоге
я собираю пакет во временном каталоге
я устанавливаю пакет из файла собранного пакета
я выполняю команду получения версии установленного пакета "oscript src\main.os version"
версия установленного пакета равна версии пакета из контекста
для использования в собственных шагах, реализованных в коде скрипта на языке OneScript
Для обмена информацией внутри кода реализации шагов можно использовать API контекста, предоставляемый продуктом.
Описание:
Процедура СохранитьВКонтекст(Ключ, Значение)
- сохранить значение по специальному ключуФункция ПолучитьИзКонтекста(Знач Ключ)
- возвращает значение по ключу
Пример кода:
//Я сохранил ключ "Ключ1" и значение 10 в программном контексте
Процедура ЯСохранилКлючИЗначениеВПрограммномКонтексте(Знач Ключ, Знач Значение) Экспорт
БДД.СохранитьВКонтекст(Ключ, Значение);
КонецПроцедуры
//я получаю ключ "Ключ1" и значение 10 из программного контекста
Процедура ЯПолучаюКлючИЗначениеИзПрограммногоКонтекста(Знач Ключ, Знач ОжидаемоеЗначение) Экспорт
НовоеЗначение = БДД.ПолучитьИзКонтекста(Ключ);
Ожидаем.Что(НовоеЗначение).Равно(ОжидаемоеЗначение);
КонецПроцедуры
Из кода скрипта-реализации шагов фичи можно вызывать любой известный и доступный шаг. При этом учитываются параметры, переданные в тексте шага
Сигнатура вызова: БДД.ВыполнитьШаг(Знач НаименованиеШагаСценария)
Пример кода:
НаименованиеШагаСценария = "я записываю """ШагСценария""" в файл журнала";
БДД.ВыполнитьШаг(НаименованиеШагаСценария);
Из кода скрипта-реализации шагов фичи можно узнать каталог текущего/проверяемого проекта в зависимости от условий запуска.
Возвращаемое значение:
- либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features,
- либо текущий каталог, если нету
Например, если файл фичи находится по пути c:\projects\myproject\features\core\my.feature
,
вернется значение c:\projects\myproject\
Сигнатура вызова: БДД.КаталогПроверяемогоПроекта()
Используется в библиотечном шаге Я сохраняю каталог проекта в контекст
.
// Подменяет переданное значение с учетом переменных контекста
//
// Например:
// если переменная контекста "МойКлюч" установлена в значение "МояСтрока"
// тогда при передаче значения "МойКлюч" в метод будет получено "МояСтрока"
// т.е. ЗначениеСУчетомПеременныхКонтекста("МойКлюч") = "МояСтрока"
//
// Если переменной контекста нет, возвращается переданное значение без изменения
//
// Важно: проверяется только полное совпадение строки и имени переменной контекста, частичное вхождение не проверяется!
//
// Параметры:
// Значение - Любой тип -
//
// Возвращаемое значение:
// Любой тип - результат выполнения
//
Функция ЗначениеСУчетомПеременныхКонтекста(Знач Значение) Экспорт
// Получить путь к файлу/каталогу с учетом подмены начального пути на переменные контекста
// Например:
// если переменная контекста "МойКлюч" установлена в значение "d:\myproject"
// тогда при передаче значения "МойКлюч/file.txt"
// будет получено "d:\myproject\МойКлюч/file.txt"
//
// Если переменной контекста нет или задан обычный путь файла, возвращается переданное значение без изменения
//
// Важно: подменяется только первый элемент пути, в середине и конце пути подмены не делается
//
// Финальные разделители строк устанавливаются в зависимости от ОС
//
// Параметры:
// Путь - Строка - путь к файлу или каталогу
//
// Возвращаемое значение:
// Строка - Итоговый путь
//
Функция ПолучитьПутьФайлаСУчетомПеременныхКонтекста(Знач Путь) Экспорт