Как перехватить вывод программы оболочки из cucumber/aruba?
Я хочу захватить вывод, который я запускаю из файла объектов огурца.
Я создал одну программу-скрипт и поместил ее в /usr/local/bin/, чтобы она была доступна из любой точки системы.
abc_qa.sh -
arg=$1
if [[ $arg = 1 ]]
then
echo $(date)
fi
структура проекта огурца -
Аруба -
,
Features── особенности
│ ├── поддержка
│ │ └── env.rb
Use └── use_aruba_cucumber.feature
├── Gemfile
Gemfile -
source 'https://rubygems.org'
gem 'aruba', '~> 0.14.2'
env.rb -
require 'aruba/cucumber'
use_aruba_cucumber.feature -
Feature: Cucumber
Scenario: First Run
When I run `bash abc_qa.sh 1`
Я хочу записать этот вывод программы abc_qa.sh в самом огурце и сравнить правильность или неправильность этой даты с помощью любого простого теста и сделать этот тест успешным.
1 ответ
Ты можешь использовать %x(command)
чтобы получить стандартный вывод вашей команды.
Затем вы можете использовать Time.parse для конвертации "Sat Nov 5 12:04:18 CET 2016"
в 2016-11-05 12:04:18 +0100
как объект Time, и сравните его с Time.now:
require 'time'
time_from_abc_script = Time.parse(%x(bash abc_qa.sh 1))
puts (Time.now-time_from_abc_script).abs < 5 # No more than 5s difference between 2 times
Вы можете использовать это логическое значение в любом тестовом файле.
Например:
В features/use_aruba_with_cucumber.feature
:
Feature: Cucumber
Scenario: First Run
When I run `bash abc_qa.sh 1`
Then the output should be the current time
а также features/step_definitions/time_steps.rb
:
require 'time'
Then(/^the output should be the current time$/) do
time_from_script = Time.parse(last_command_started.output)
expect(time_from_script).to be_within(5).of(Time.now)
end