Skip to content

Commit

Permalink
Merge branch 'release/1.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Dec 29, 2016
2 parents c1044c2 + f0f636a commit 22f0f10
Show file tree
Hide file tree
Showing 21 changed files with 1,502 additions and 434 deletions.
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
{
// Entry point for OneScriptLinter. Relative path from project root folder
"language-1c-bsl.linterEntryPoint": "src\bdd.os",
"editor.rulers": [120]
}
38 changes: 28 additions & 10 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version": "0.1.0",
"windows": {
"command": "cmd",
"args": ["/c"]
"args": ["/c", "chcp 65001 >nul &"]
},
"linux": {
"command": "sh",
Expand All @@ -14,9 +14,7 @@
{
"taskName": "Testing project",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/../oscript-library/src/1testrunner/testrunner.os",
"1testrunner",
"-runall",
"${workspaceRoot}/tests"
],
Expand All @@ -39,7 +37,6 @@
"taskName": "Exec all features",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/src/bdd.os",
"${workspaceRoot}/features/core",
"-fail-fast",
Expand All @@ -65,7 +62,6 @@
"taskName": "Exec feature",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/src/bdd.os",
"${file}",
"-fail-fast",
Expand Down Expand Up @@ -104,7 +100,6 @@
"taskName": "Exec feature + debug",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/src/bdd.os",
"${file}",
"-fail-fast",
Expand All @@ -128,11 +123,36 @@
}
}
},
{
"taskName": "Exec feature for current step def",
"args": [
"1bdd",
"${fileDirname}/../${fileBasenameNoExtension}.feature",
"-fail-fast",
"-out",
"${workspaceRoot}/exec.log"
],
"echoCommand": true,
"showOutput": "always",
"suppressTaskName": true,
"isBuildCommand": false,
"isTestCommand": true,
"problemMatcher": {
"fileLocation": "absolute",
"pattern": [
{
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
"file": 1,
"location": 2,
"message": 3
}
]
}
},
{
"taskName": "Generate feature steps",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/src/bdd.os",
"gen",
"${file}",
Expand Down Expand Up @@ -160,7 +180,6 @@
"taskName": "Generate feature steps + debug",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/src/bdd.os",
"gen",
"${file}",
Expand Down Expand Up @@ -188,7 +207,6 @@
"taskName": "Test current test-file",
"args": [
"oscript",
"-encoding=utf-8",
"${workspaceRoot}/../oscript-library/src/1testrunner/testrunner.os",
"-run",
"${file}"
Expand Down
47 changes: 39 additions & 8 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@
#!groovy
node("slave") {
// ВНИМАНИЕ:
// Jenkins и его ноды нужно запускать с кодировкой UTF-8
// строка конфигурации для запуска Jenkins
// <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -Dfile.encoding=UTF-8 -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war" </arguments>
//
// строка для запуска нод
// @"C:\Program Files (x86)\Jenkins\jre\bin\java.exe" -Dfile.encoding=UTF-8 -jar slave.jar -jnlpUrl http://localhost:8080/computer/slave/slave-agent.jnlp -secret XXX
// подставляйте свой путь к java, порту Jenkins и секретному ключу
//
// Если запускать Jenkins не в режиме UTF-8, тогда нужно поменять метод cmd в конце кода, применив комментарий к методу

def isUnix = isUnix();

stage "checkout"

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

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

stage "testing with testrunner.os"

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

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

Expand All @@ -23,11 +34,7 @@ node("slave") {

def errors = []
try{
if (isUnix){
sh "${command}"
} else {
bat "@chcp 1251 > nul \n${command}"
}
cmd(command)
} catch (e) {
errors << "BDD status : ${e}"
}
Expand All @@ -39,6 +46,30 @@ node("slave") {
}
}

stage "exec libs features"

command = """oscript ./src/bdd.os ./features/lib -out ./bdd-lib.log -junit-out ./bdd-lib.xml"""

errors = []
try{
cmd(command)
} catch (e) {
errors << "BDD status (lib) : ${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])
step([$class: 'ArtifactArchiver', artifacts: '**/bdd-lib.log', fingerprint: true])
step([$class: 'JUnitResultArchiver', testResults: '**/bdd*.xml'])
}
}

def cmd(command) {
// TODO при запуске Jenkins не в режиме UTF-8 нужно написать chcp 1251 вместо chcp 65001
if (isUnix()){ sh "${command}" } else {bat "chcp 65001\n${command}"}
}
69 changes: 67 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# 1BDD для OneScript

[![Build status](https://ci.appveyor.com/api/projects/status/vbnk445352crljjn?svg=true)](https://ci.appveyor.com/project/artbear/1bdd)

[![Join the chat at https://gitter.im/artbear/1bdd](https://badges.gitter.im/artbear/1bdd.svg)](https://gitter.im/artbear/1bdd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам.

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

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

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

[![Join the chat at https://gitter.im/artbear/1bdd](https://badges.gitter.im/artbear/1bdd.svg)](https://gitter.im/artbear/1bdd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам.

# Командная строка запуска

```
Expand Down Expand Up @@ -48,6 +50,48 @@ oscript bdd.os <команда> <параметры команды> [ключи]
Для подсказки по конкретной команде наберите
`bdd help <команда>`.

# Формат файла фичи

Файл фичи должен иметь расширение `feature` и написан согласно синтаксису языка `Gherkin`

## Пример файла фичи


```gherkin
# language: ru
Функционал: Выполнение файловых операций
Как Пользователь
Я хочу иметь возможность выполнять различные файловые операции в тексте фич
Чтобы я мог проще протестировать и автоматизировать больше действий на OneScript
Сценарий: Каталог проекта
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
Когда Я сохраняю каталог проекта в контекст
Тогда Я показываю каталог проекта
И Я показываю рабочий каталог
```

или

```gherkin
# language: ru
Функционал: Использование программного контекста
Как Разработчик
Я Хочу чтобы шаги разных сценариев могли обмениваться данными через програмнный контекст продукта
Сценарий: Первый сценарий
Когда Я сохранил ключ "Ключ1" и значение 10 в программном контексте
И я получаю ключ "Ключ1" и значение 10 из программного контекста
Сценарий: Следующий сценарий
Тогда я получаю ключ "Ключ1" и значение 10 из программного контекста
```

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

Это обычный os-скрипт, который располагает в подкаталоге `step_definitions` относительно файла фичи.
Expand Down Expand Up @@ -125,3 +169,24 @@ oscript bdd.os <команда> <параметры команды> [ключи]
НаименованиеШагаСценария = "я записываю """ШагСценария""" в файл журнала";
БДД.ВыполнитьШаг(НаименованиеШагаСценария);
```

### Получение каталога текущего проекта внутри шагов сценария

Из кода скрипта-реализации шагов фичи можно узнать каталог текущего/проверяемого проекта
в зависимости от условий запуска.

Возвращаемое значение:
либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features,
либо текущий каталог, если нету
Например, если файл фичи находится по пути `c:\projects\myproject\features\core\my.feature`,
вернется значение `c:\projects\myproject\`

Сигнатура вызова: `БДД::КаталогПроверяемогоПроекта()`

Используется в библиотечном шаге `Я сохраняю каталог проекта в контекст`.

## Стандартная библиотека

Стандартные библиотечные шаги, подключаемые автоматически для любой фичи, находятся в каталоге `features/lib`
+ `ВыполнениеКоманд.feature` - выполнение команд системы и запуск процессов
+ `ФайловыеОперации.feature` - создание файлов/каталогов, их копирование, анализ содержимого файлов
20 changes: 20 additions & 0 deletions appveyor-runtests.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@chcp 65001

"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 c:\projects\1testrunner\testrunner.os -runall tests xddReportPath tests

@if %ERRORLEVEL%==2 GOTO good_exit
@if %ERRORLEVEL%==0 GOTO good_exit

exit /B 1

:good_exit

"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 src\bdd.os features/core -junit-out tests/bdd-log.xml

@if %ERRORLEVEL%==2 GOTO good_exit_bdd
@if %ERRORLEVEL%==0 GOTO good_exit_bdd

exit /B 1

:good_exit_bdd
exit /B 0
35 changes: 35 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
version: 1.2.{build}
pull_requests:
do_not_increment_build_number: true
init:
- ps: Set-WinSystemLocale ru-RU
install:
- cmd: >-
git submodule update --init --recursive
curl -o %temp%\oscript-setup.exe http://oscript.io/downloads/night-build/exe
%temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt"
dir "%ProgramFiles(x86)%\OneScript\bin"
dir "%ProgramFiles(x86)%\OneScript\lib"
"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -version
git clone -q --branch=master https://github.com/artbear/1testrunner.git c:\projects\1testrunner
git clone -q --branch=master https://github.com/artbear/1commands.git "%ProgramFiles(x86)%\OneScript\lib\1commands"
# to disable automatic builds
build: off
test_script:
- cmd: appveyor-runtests.cmd
after_test:
- ps: # upload results to AppVeyor
- ps: Write-Host "Загружаю результаты тестов на CI"
- ps: $wc = New-Object 'System.Net.WebClient'
- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\tests.xml))
- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\bdd-log.xml))
artifacts:
- path: tests\tests.xml
- path: tests\bdd-log.xml
29 changes: 29 additions & 0 deletions features/core/OneScriptRunner.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# language: ru

Функционал: Выполнение команд системы
Как Пользователь
Я хочу иметь возможность запускать скрипты oscript
Чтобы я мог проще автоматизировать больше действий на OneScript

Контекст: Очищаю параметры команды
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript"
И я выключаю отладку лога с именем "oscript"

Сценарий: Выполнение команды без параметров
Когда Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "Version"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды с параметрами в одной строке
Когда Я выполняю команду "oscript" c параметрами "-version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "."
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды с параметрами, добавляемыми раздельно
Когда Я добавляю параметр "-version" для команды "oscript"
И Я выполняю команду "oscript"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "."
И Код возврата команды "oscript" равен 0
Loading

0 comments on commit 22f0f10

Please sign in to comment.