Skip to content

Commit

Permalink
Merge branch 'release/1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Sep 7, 2016
2 parents 78fe86d + 44fb9b6 commit 97f036a
Show file tree
Hide file tree
Showing 30 changed files with 1,122 additions and 355 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
exec-log.txt
exec.log
gen.log
tests/fixtures/test-report.xml
3 changes: 3 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"args": [
"${workspaceRoot}/src/bdd.os",
"${workspaceRoot}/features/core",
"-fail-fast",
"-out",
"${workspaceRoot}/exec.log"
],
Expand All @@ -57,6 +58,7 @@
"args": [
"${workspaceRoot}/src/bdd.os",
"${file}",
"-fail-fast",
"-out",
"${workspaceRoot}/exec.log"
],
Expand Down Expand Up @@ -91,6 +93,7 @@
"args": [
"${workspaceRoot}/src/bdd.os",
"${file}",
"-fail-fast",
"-verbose",
"on",
"-out",
Expand Down
26 changes: 25 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ oscript bdd.os <команда> <параметры команды> [ключи]
Параметры:
features-path - путь к файлам *.feature.
Можно указывать как каталоги, так и конкретные файлы.
-fail-fast - Немедленное завершение выполнения на первом же не пройденном сценарии
-name <ЧастьИмениСценария> - Выполнение сценариев, в имени которого есть указанная часть
-junit-out <путь-файла-отчета> - выводить отчет тестирования в формате JUnit.xml
gen <features-path> [ключи]
Создает заготовки шагов для указанных Gherkin-спецификаций
Expand Down Expand Up @@ -93,10 +98,29 @@ oscript bdd.os <команда> <параметры команды> [ключи]
КонецПроцедуры
```

# Программный контекст
# API фреймворка

Есть несколько вариантов использования API фреймворка из кода реализации шагов.

## Программный контекст

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

Описание:
+ `Процедура СохранитьВКонтекст(Ключ, Значение)` - сохранить значение по специальному ключу
+ `Функция ПолучитьИзКонтекста(Знач Ключ)` - возвращает значение по ключу

Пример кода указан выше, в разделе `Пример файла шагов`

## Программный вызов любого шага сценария

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

Сигнатура вызова: `БДД.ВыполнитьШаг(Знач НаименованиеШагаСценария)`

Пример кода:
```
НаименованиеШагаСценария = "я записываю """ШагСценария""" в файл журнала";
БДД.ВыполнитьШаг(НаименованиеШагаСценария);
```
60 changes: 60 additions & 0 deletions features/core/junit-xml.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# language: ru

Функционал: Получение отчетов в формате JUnit-xml
Как Разработчик
Я Хочу получать отчеты в формате JUnit.xml
Чтобы проверять поведение на специализированных CI-серверах

Контекст: Использование каталог тестовых фич
Допустим установил каталог проекта "tests\fixtures" как текущий
И удалил файл "./test-report.xml"

Сценарий: Получение отчета в формате JUnit-xml для успешного теста

Тогда проверка поведения фичи "БезПараметров" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 0
И файл "./test-report.xml" существует
И в файле "./test-report.xml" есть строка
"""
<testsuites name="1bdd" time="0" tests="1" failures="0" skipped="0">
<testsuite name="Пустой функционал">
<properties />
<testcase classname="Ничего не делаем" name="я ничего не делаю" status="passed" />
<testcase classname="Ничего не делаем" name="ничего не происходит" status="passed" />
</testsuite>
</testsuites>
"""

Сценарий: Получение отчета в формате JUnit-xml для падающего теста

Тогда проверка поведения фичи "ПадающийШаг" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 2
И файл "./test-report.xml" существует
И в файле "./test-report.xml" есть строка
"""
<testsuites name="1bdd" time="0" tests="1" failures="1" skipped="0">
<testsuite name="Выполнение фич">
<properties />
<testcase classname="После ошибочного шага следующие шаги сценария не выполняются" name="я запускаю падающий шаг с параметром &quot;Первый падающий шаг&quot;" status="failure">
<failure message="
"""
И в файле "./test-report.xml" есть строка
"""
tests\fixtures\step_definitions\ПадающийШаг.os / Ошибка в строке: 21 / ЯЗапускаюПадающийШагСПараметром-Первый падающий шаг} &#xD;&#
"""
И в файле "./test-report.xml" есть строка
"""
; ВызватьИсключение СтрШаблон(&quot;ЯЗапускаюПадающийШагСПараметром-%1&quot;, ПарамСтрока);&#xD;" />
"""

Сценарий: Получение отчета в формате JUnit-xml для нереализованного теста

Тогда проверка поведения фичи "НеРеализованныйШаг" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 1
И файл "./test-report.xml" существует
И в файле "./test-report.xml" есть строка
"""
<testsuites name="1bdd" time="0" tests="1" failures="0" skipped="1">
<testsuite name="Выполнение фич">
<properties />
<testcase classname="После нереализованного шага следующие шаги сценария не выполняются" name="я запускаю нереализованный шаг" status="skipped" />
</testsuite>
</testsuites>
"""
38 changes: 38 additions & 0 deletions features/core/step_definitions/junit-xml.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd

Перем БДД; //контекст фреймворка 1bdd

// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("УдалилФайл");
ВсеШаги.Добавить("ФайлСуществует");

Возврат ВсеШаги;
КонецФункции

// Реализация шагов

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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

//удалил файл "./test-report.xml"
Процедура УдалилФайл(Знач ПутьФайла) Экспорт
УдалитьФайлы(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
КонецПроцедуры

//файл "./test-report.xml" существует
Процедура ФайлСуществует(Знач ПутьФайла) Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
Ожидаем.Что(Файл.Существует(), СтрШаблон("Файл должен существовать, а его нет. %1", Файл.ПолноеИмя)).Равно(Истина);
КонецПроцедуры
24 changes: 24 additions & 0 deletions features/core/step_definitions/ВыполнениеФич.os
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
ВсеШаги.Добавить("УстановилКаталогПроектаКакТекущий");
ВсеШаги.Добавить("ВЛог_ФайлеЗапускаПродуктаЕстьСтрока");
ВсеШаги.Добавить("ВЛог_ФайлеЗапускаПродуктаОтсутствуетСтрока");
ВсеШаги.Добавить("ВФайлеЕстьСтрока");

Возврат ВсеШаги;
КонецФункции
Expand All @@ -33,6 +34,29 @@
КонецЕсли;
КонецПроцедуры

//в файле "clean.log" есть строка "ыва"
Процедура ВФайлеЕстьСтрока(Знач ПутьФайла, Знач ПроверяемаяСтрока) Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
ЕстьПодстрока(ПрочитатьТекстФайла(Файл), ПроверяемаяСтрока);
КонецПроцедуры

Функция ПрочитатьТекстФайла(Знач Файл)
ЧтениеТекста = Новый ЧтениеТекста;
ЧтениеТекста.Открыть(Файл.ПолноеИмя,"UTF-8");

Строка = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
Возврат Строка;
КонецФункции // ПрочитатьТекстФайла()

Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока)
Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда
Ожидаем.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока);
Иначе
ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока);
КонецЕсли;
КонецПроцедуры

//TODO перенести в ассерты oscript-library
Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "")
СообщениеОшибки = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
Перем ВременныйКаталогФичи;
Перем ФайлИсходнойФичи;
Перем ФайлФичи;
Перем СохраненныеПараметрыКоманднойСтроки;

Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
Expand All @@ -24,13 +23,12 @@
ВсеШаги.Добавить("ЯПолучилСгенерированныйOs_ФайлВОжидаемомКаталоге");
ВсеШаги.Добавить("ЯНеПолучилСгенерированныйOs_ФайлВОжидаемомКаталоге");
ВсеШаги.Добавить("ПроверкаПоведенияФичиЗакончиласьСКодомВозврата");
ВсеШаги.Добавить("ПроверкаПоведенияФичиСПередачейПараметраЗакончиласьСКодомВозврата");
ВсеШаги.Добавить("ЯПодставилФайлШаговСУжеРеализованнымиШагамиДляФичи");
ВсеШаги.Добавить("ЯЗапустилВыполнениеФичиСПередачейПараметра");
ВсеШаги.Добавить("ЯСоздалФайлФичиСТекстом");
ВсеШаги.Добавить("ЯСоздалФайлСТекстом");
ВсеШаги.Добавить("ЯСоздалЕщеОдинКаталог");
ВсеШаги.Добавить("УстановилКаталогКакТекущий");
ВсеШаги.Добавить("ЯЗапустилВыполнениеФичи");
ВсеШаги.Добавить("ПроверкаПоведенияФичСПередачейПараметраИзКаталогаЗакончиласьСКодомВозврата");

Возврат ВсеШаги;
Expand All @@ -40,13 +38,8 @@
Возврат "bdd.ПроверкаГенерации.feature";
КонецФункции

Процедура Инициализация() Экспорт
СохраненныеПараметрыКоманднойСтроки = "";
КонецПроцедуры

//я подготовил тестовый каталог для фич
Процедура ЯПодготовилТестовыйКаталогДляФич() Экспорт
Инициализация();

ВременныйКаталогФичи = Новый Файл(ВременныеФайлы.СоздатьКаталог());
Лог.Отладка("Использую временный каталог "+ВременныйКаталогФичи.ПолноеИмя);
Expand Down Expand Up @@ -125,6 +118,11 @@
ПроверитьПоведениеФичиИлиКаталога(ИмяФичи, "", ОжидаемыйКодВозврата);
КонецПроцедуры

//проверка поведения фичи "ПередачаПараметров" с передачей параметра "" закончилась с кодом возврата 1
Процедура ПроверкаПоведенияФичиСПередачейПараметраЗакончиласьСКодомВозврата(Знач ИмяФичи, Знач ПараметрыКоманднойСтроки, Знач ОжидаемыйКодВозврата) Экспорт
ПроверитьПоведениеФичиИлиКаталога(ИмяФичи, ПараметрыКоманднойСтроки, ОжидаемыйКодВозврата);
КонецПроцедуры

//проверка поведения фич с передачей параметра "" из каталога "." закончилась с кодом возврата 0
Процедура ПроверкаПоведенияФичСПередачейПараметраИзКаталогаЗакончиласьСКодомВозврата(Знач ПараметрыКоманднойСтроки, Знач ПутьКаталога, Знач ОжидаемыйКодВозврата) Экспорт
ПроверитьПоведениеФичиИлиКаталога(ПутьКаталога, ПараметрыКоманднойСтроки, ОжидаемыйКодВозврата);
Expand All @@ -147,7 +145,7 @@
КонецЕсли;

СтрокаКоманды = СтрШаблон("oscript.exe %4 %1 %2 %3 %5", ПутьИсполнителяБДД, ФайлФичиИлиКаталога.ПолноеИмя,
СохраненныеПараметрыКоманднойСтроки, "-encoding=utf-8");
ПараметрыКоманднойСтроки, "-encoding=utf-8");

ТекстФайла = "";
КодВозврата = ВыполнитьПроцесс(СтрокаКоманды, ТекстФайла);
Expand Down Expand Up @@ -201,16 +199,6 @@
Возврат Процесс.КодВозврата;
КонецФункции

//я запустил выполнение фичи "ФичаБезШагов" с передачей параметра "-require СтруктураСценария.feature"
Процедура ЯЗапустилВыполнениеФичиСПередачейПараметра(Знач ИмяФичи, Знач ПараметрыКоманднойСтроки) Экспорт
СохраненныеПараметрыКоманднойСтроки = ПараметрыКоманднойСтроки;
КонецПроцедуры

//я запустил выполнение фичи "ПередачаПараметров"
Процедура ЯЗапустилВыполнениеФичи(Знач ИмяФичи) Экспорт
СохраненныеПараметрыКоманднойСтроки = "";
КонецПроцедуры

//я подставил файл шагов с уже реализованными шагами для фичи "ПередачаПараметров"()
Процедура ЯПодставилФайлШаговСУжеРеализованнымиШагамиДляФичи(Знач ИмяФичи) Экспорт
ИмяИсполнителяШагов = ФайлИсходнойФичи.ИмяБезРасширения+ ".os";
Expand Down Expand Up @@ -337,4 +325,3 @@

Лог = Логирование.ПолучитьЛог(ИмяЛога());
Лог.УстановитьУровень(Логирование.ПолучитьЛог("bdd").Уровень());
СохраненныеПараметрыКоманднойСтроки = "";
Loading

0 comments on commit 97f036a

Please sign in to comment.