如何在步骤定义中访问Cucumber步骤名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在步骤定义中访问Cucumber步骤名称?相关的知识,希望对你有一定的参考价值。

我正在尝试将Cucumber与Test Rail集成。所以我有一个Cucumber Ruby自动化设置。

我希望能够将Cucumber Gherkin步骤从特征文件作为变量传递到自动化中。

这是因为我想将Cucumber Gherkin步骤作为HTTP POST发送到测试管理系统中。

示例小黄瓜功能文件:

Scenario: login scenario
    Given I am on webpage
    When I login
    Then I should see that I am logged in

步骤定义代码:

Given(/^I am on webpage$/) do

#do this Given step from the regex match
#but also how do I, some how grab the string 'Given I am on webpage'
#so I can do an HTTP POST on that string

end

或者更好的方法,也许:在我开始任何自动化测试之前,我会通过某种方式解析所有功能文件并将HTTP POST发送到Test Rail以更新或填充我添加到Cucumber中的任何新测试。如果是这样的话,我应该怎么做呢?

答案

您可以像这样捕获步骤名称:

Given(/^(I am on webpage)$/) do |step_name|
  puts step_name # or whatever
end

即使步骤采用参数,它也可以工作:

Given(/^(I am on (my|your|their) webpage)$/) do |step_name, pronoun|
  puts step_name # or whatever
  visit send("#{pronoun}_path")
end

也就是说,我同意Dave McNulla的观点,即Cucumber plus版本控制对于测试管理系统来说并没有多大帮助。

解析功能文件听起来像一个单独的问题。

另一答案

我想你必须解决问题,因为这个问题是在两年前被问到的。不过,我最近解决了这个问题,我想也许我的解决方案可以有所帮助。

两个步骤:

首先,在features / support下创建一个名为hooks.rb的新文件

touch features/support/hooks.rb

第二,在hooks.rb文件中添加这些内容。

Before do |scenario| 
  $step_index = 0
  $stop_count = scenario.test_steps.count
  @scenario = scenario
end

AfterStep do |step|
  if $step_index < $stop_count
    puts "steps: #{@scenario.test_steps[$step_index].text}
"
  end
  $step_index += 2
end

cucumber features/XXX.feature

您将在终端上找到打印出的步骤名称。

以上是关于如何在步骤定义中访问Cucumber步骤名称?的主要内容,如果未能解决你的问题,请参考以下文章

Cucumber 6 未定义的自定义步骤

如何在cypress Cucumber中编写Given,When,Then等可以使用的通用步骤定义

WebStorm中的“未定义步骤引用”在尝试时引用TypeScript步骤定义代码

如何将场景绑定到cucumber java中的特定步骤类

Cucumber JUnit 测试不将功能粘合到步骤定义

AmbiguousStepDefinitions在Cucumber中为两个类似的步骤定义抛出异常