如何比较 cucumber/aruba 中的日期?

How to compare date in cucumber/aruba?

我想在 cucumber/aruba 的帮助下测试我的可执行 shell 脚本。 为此,我创建了一个 shell 脚本并将其放在 usr/local/bin/ 中,以便可以从任何地方访问它。

shell 脚本:

arg=
if [ [ $arg = 1 ] ]
then
    echo $(date)
fi

现在我想在 cucumber/aruba 中测试这个 shell 脚本。 为此,我创建了一个项目结构。

阿鲁巴 -

.

├── 特色

│ ├── 支持

│ │ └── env.rb

│ └── 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`
    Then the output should contain exactly $(date)

Shell 脚本代码正在返回日期。现在,在此功能文件中,我想通过简单检查来检查日期是否正确。

示例: 日期返回如下:

Sat Nov 5 15:00:13 IST 2016

所以我只想检查 Sat 是对还是错。为此,使用一个标签 [Mon,Tue,Wed,Thu,Fri,Sat,Sun],就像这样。

如果 Sat 在上面的标签中是可用的那么让这个测试用例通过。

注意 - 我说这个标签是为了简单起见。如果任何其他检查日期的选项在一周的 7 天中都是正确的,那么应该对此表示赞赏。

谢谢。

这就是我要做的:

features/use_my_date_script_with_parameter.feature :

Feature: MyDateScript abc_qa
 Scenario: Run with one parameter
  When I run `bash abc_qa.sh 1`
  Then the output first word should be an abbreviated day of the week
  And the output first word should be the current day of the week
  And the output should be the current time

此功能文件既是程序的文档又是程序的规范。它旨在由不一定是开发人员的人编写。只要扩展名是“.feature”并且结构在这里(With Feature, Scenario and Steps),你几乎可以在里面写任何描述性的东西。有关黄瓜的更多信息 here

您可以添加一个新行(例如 "And the output should look like A and not B"),然后启动 Cucumber。它不会失败,它只会告诉您应该在步骤文件中定义什么。

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

Then(/^the output first word should be an abbreviated day of the week$/) do
  #NOTE: It assumes that date is launched with LC_ALL=en_US.UTF-8 as locale
  day_of_week, day, month, hms, zone, year = last_command_started.output.split
  days_of_week = %w(Mon Tue Wed Thu Fri Sat Sun)
  expect(days_of_week).to include(day_of_week)
end

Then(/^the output first word should be the current day of the week$/) do
  day_of_week, day, month, hms, zone, year = last_command_started.output.split
  expect(day_of_week).to eq(Time.now.strftime('%a'))
end

这是 Cucumber 还不知道的特征文件中句子的定义。它是一个 Ruby 文件,因此您可以在其中编写任何 Ruby 代码,主要是在 doend 之间的块中。 在那里你可以访问最后一个命令的输出(在这种情况下是你的 bash 脚本)作为字符串,并用它编写测试。 例如,拆分此字符串并将每个部分分配给一个新变量。将星期几作为字符串(例如 "Sat")后,您可以使用 expect keyword.

对其进行测试

测试是按强度顺序编写的。如果你运气不好,第二个测试可能不会在午夜左右通过。如果您想编写自己的测试,我将其他变量(日、月、hms、时区、年)定义为字符串。