Skip to content

Commit

Permalink
Merge branch 'release/0.9'
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Jul 31, 2016
2 parents b9b974e + 91990b4 commit 78fe86d
Show file tree
Hide file tree
Showing 38 changed files with 1,275 additions and 399 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
exec-log.txt
exec.log
gen.log
4 changes: 2 additions & 2 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
}
},
{
"taskName": "Exec main feature",
"taskName": "Exec all features",
"args": [
"${workspaceRoot}/src/bdd.os",
"${workspaceRoot}/features/core/ПрогонВсехФичПроекта.feature",
"${workspaceRoot}/features/core",
"-out",
"${workspaceRoot}/exec.log"
],
Expand Down
43 changes: 43 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!groovy
node("slave") {
def isUnix = isUnix();

stage "checkout"

checkout scm
if (isUnix) {sh 'git submodule update --init'} else {bat "git submodule update --init"}

stage "checkout oscript-library for testrunner.os"
checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'oscript-library']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/EvilBeaver/oscript-library.git']]])

stage "testing with testrunner.os"

command = """oscript ./oscript-library/tests/testrunner.os -runall ./tests xddReportPath ./tests"""
if (isUnix) {sh "${command}"} else {bat "@chcp 1251 > nul \n${command}"}

step([$class: 'JUnitResultArchiver', testResults: '**/tests/*.xml'])

stage "exec all features"

command = """oscript ./src/bdd.os ./features/core -out ./bdd-exec.log"""

def errors = []
try{
if (isUnix){
sh "${command}"
} else {
bat "@chcp 1251 > nul \n${command}"
}
} catch (e) {
errors << "BDD status : ${e}"
}

if (errors.size() > 0) {
currentBuild.result = 'UNSTABLE'
for (int i = 0; i < errors.size(); i++) {
echo errors[i]
}
}

step([$class: 'ArtifactArchiver', artifacts: '**/bdd-exec.log', fingerprint: true])
}
71 changes: 63 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# 1BDD для OneScript

1bdd - инструмент для выполнения автоматизированных требований/тестов, написанных на обычном, не программном языке.
`1bdd` - инструмент для выполнения автоматизированных требований/тестов, написанных на обычном, не программном языке.

Иными словами, это консольный фреймворк, реализующий BDD для проекта [OneScript](https://github.com/EvilBeaver/OneScript).
Иными словами, это консольный фреймворк, реализующий `BDD` для проекта [OneScript](https://github.com/EvilBeaver/OneScript).

Идеи черпаются из проекта [Cucumber](https://cucumber.io).

Expand All @@ -16,16 +16,12 @@ oscript bdd.os <команда> <параметры команды> [ключи]
Возможные команды:
<features-path> [ключи]
Выполняет сценарии BDD для Gherkin-спецификаций
Параметры:
features-path - путь к файлам *.feature.
Можно указывать как каталоги, так и конкретные файлы.
или
exec <features-path> [ключи]
Выполняет сценарии BDD для Gherkin-спецификаций
Параметры:
features-path - путь к файлам *.feature.
Можно указывать как каталог, так и конкретный файл.
Можно указывать как каталоги, так и конкретные файлы.
gen <features-path> [ключи]
Создает заготовки шагов для указанных Gherkin-спецификаций
Expand All @@ -45,3 +41,62 @@ oscript bdd.os <команда> <параметры команды> [ключи]

Для подсказки по конкретной команде наберите
`bdd help <команда>`.

# Формат файла шагов

Это обычный os-скрипт, который располагает в подкаталоге `step_definitions` относительно файла фичи.

В этом файле должна быть служебная функция `ПолучитьСписокШагов`, которая возвращает массив всех шагов, заданных в этом скрипте.

Также внутри файла шагов могут располагаться специальные методы-обработчики (хуки) событий `ПередЗапускомСценария`/`ПослеЗапускаСценария`

## Пример файла шагов

```
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
ВсеШаги = Новый Массив;
ВсеШаги.Добавить("ЯСохранилКлючИЗначениеВПрограммномКонтексте");
ВсеШаги.Добавить("ЯПолучаюКлючИЗначениеИзПрограммногоКонтекста");
Возврат ВсеШаги;
КонецФункции
// Реализация шагов
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
КонецПроцедуры
//Я сохранил ключ "Ключ1" и значение 10 в программном контексте
Процедура ЯСохранилКлючИЗначениеВПрограммномКонтексте(Знач Ключ, Знач Значение) Экспорт
БДД.СохранитьВКонтекст(Ключ, Значение);
КонецПроцедуры
//я получаю ключ "Ключ1" и значение 10 из программного контекста
Процедура ЯПолучаюКлючИЗначениеИзПрограммногоКонтекста(Знач Ключ, Знач ОжидаемоеЗначение) Экспорт
НовоеЗначение = БДД.ПолучитьИзКонтекста(Ключ);
Ожидаем.Что(НовоеЗначение).Равно(ОжидаемоеЗначение);
КонецПроцедуры
```

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

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

Описание:
+ `Процедура СохранитьВКонтекст(Ключ, Значение)` - сохранить значение по специальному ключу
+ `Функция ПолучитьИзКонтекста(Знач Ключ)` - возвращает значение по ключу
47 changes: 47 additions & 0 deletions features/core/Hooks.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# language: ru

Функционал: Проверка хуков в файле шагов
Как Разработчик
Я Хочу, чтобы у меня была возможность использовать хуки ПередЗапускомСценария/ПослеЗапускаСценария в файлах шагов

Контекст: Подготовка файла фичи "ПроверкаХуков"
Когда я подготовил тестовый каталог для фич
И установил тестовый каталог как текущий
И я создал файл фичи "ПроверкаХуков" с текстом
"""
# language: ru
Функционал: Проверка хуков
Сценарий: Запись в файл журнала
Тогда я записываю "ШагСценария" в файл журнала
"""
И я запустил генерацию шагов фичи "ПроверкаХуков"
И я получил сгенерированный os-файл "ПроверкаХуков" в ожидаемом каталоге

Сценарий: Проверка выполнения хуков

Тогда проверка поведения фичи "ПроверкаХуков" закончилась с кодом возврата 1
И я подставил файл шагов фичи "ПроверкаХуков" из каталога "tests\fixtures"
И проверка поведения фичи "ПроверкаХуков" закончилась с кодом возврата 0
И текст файла-журнала равен ";ПередЗапускомСценария-Запись в файл журнала;ШагСценария;ПослеЗапускаСценария-Запись в файл журнала"

Контекст: Подготовка файла фичи "ПроверкаХуков" с наличием контекста
Когда я подготовил тестовый каталог для фич
И установил тестовый каталог как текущий
И я создал файл фичи "ПроверкаХуков" с текстом
"""
# language: ru
Функционал: Проверка хуков
Контекст: шаги контекста
Тогда я записываю "ШагКонтекста" в файл журнала
Сценарий: Запись в файл журнала с контекстом
Тогда я записываю "ШагСценария" в файл журнала
"""
И я запустил генерацию шагов фичи "ПроверкаХуков"
И я получил сгенерированный os-файл "ПроверкаХуков" в ожидаемом каталоге

Сценарий: Выполнение контекста после хука ПередЗапускомСценария

Тогда проверка поведения фичи "ПроверкаХуков" закончилась с кодом возврата 1
И я подставил файл шагов фичи "ПроверкаХуков" из каталога "tests\fixtures"
И проверка поведения фичи "ПроверкаХуков" закончилась с кодом возврата 0
И текст файла-журнала равен ";ПередЗапускомСценария-Запись в файл журнала с контекстом;ШагКонтекста;ШагСценария;ПослеЗапускаСценария-Запись в файл журнала с контекстом"
63 changes: 63 additions & 0 deletions features/core/step_definitions/Hooks.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd

#Использовать asserts

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

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

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

ВсеШаги.Добавить("ЯПодставилФайлШаговФичиИзКаталога");
ВсеШаги.Добавить("ТекстФайла_ЖурналаРавен");

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

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

//я подставил файл шагов фичи "ПроверкаХуков" из каталога "tests\fixtures"
Процедура ЯПодставилФайлШаговФичиИзКаталога(Знач ИмяФичи, Знач КаталогФичи) Экспорт
ИмяИсполнителяШагов = ИмяФичи + ".os";
ИсходныйФайлИсполнителяШагов = Новый Файл(ОбъединитьПути(КаталогПроекта(), КаталогФичи, "step_definitions", ИмяИсполнителяШагов ));
ФайлИсполнителяШагов = Новый Файл(ОбъединитьПути("step_definitions", ИмяИсполнителяШагов ));

Если ФайлИсполнителяШагов.Существует() Тогда
УдалитьФайлы(ФайлИсполнителяШагов.ПолноеИмя);
КонецЕсли;
КопироватьФайл(ИсходныйФайлИсполнителяШагов.ПолноеИмя, ФайлИсполнителяШагов.ПолноеИмя);
КонецПроцедуры

//текст файла-журнала равен "ПередЗапускомСценария;ШагСценария"
Процедура ТекстФайла_ЖурналаРавен(Знач ТекстЖурнала) Экспорт
СтрокаИзЖурнала = ПрочитатьЖурнал();
Ожидаем.Что(СтрокаИзЖурнала).Равно(ТекстЖурнала);
КонецПроцедуры

//TODO дубль с ПроверкаХуков.os
Функция ПрочитатьЖурнал()
ФайлЖурнала = Новый Файл(ПутьФайлаЖурнала());
Если ФайлЖурнала.Существует() Тогда

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

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

//TODO дубль с ПроверкаХуков.os
Функция ПутьФайлаЖурнала()
Возврат "ФайлЖурнала.log";
КонецФункции // ПутьФайлаЖурнала()

Функция КаталогПроекта() Экспорт
КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", "..");
Возврат КаталогПроекта;
КонецФункции // ПолучитьКаталогИсходников()
Loading

0 comments on commit 78fe86d

Please sign in to comment.