在黄瓜的场景轮廓之前运行登录步骤

sim*_*ins 8 cucumber

我正在使用带有webrat/mechanize的黄瓜来测试PHP站点,我试图通过避免运行不必要的步骤来提高测试运行的速度.

我想使用场景大纲来检查大量页面是否可访问/受保护,具体取决于登录的用户:

Scenario Outline: Check page access is secure
  Given I am logged in as "<user>"
    And I am on <page>
  Then I should see "<message>"
Examples:
  |user  |page      |message                |
  |admin |home page |Welcome to my site     |
  |admin |admin page|Site administration    |
  |editor|home page |Welcome to my site     |
  |editor|admin page|Access denied          |
  |guest |home page |Please login           |
  |guest |admin page|Access denied          |
  ...
Run Code Online (Sandbox Code Playgroud)

这是有效的,但鉴于我有10个角色和数百个要检查的页面,每次大纲运行时运行登录步骤会产生大量开销.

我想知道是否有办法为每个角色运行一次登录步骤,然后轮流访问每个页面而无需每次都登录.即运行"登录,访问1,访问2,访问3"而不是"登录,访问1,登录,访问2,登录,访问3".

我已经尝试过使用hooks和Background,但似乎无法找到一种有效的方法.这可能吗?

ram*_*ion 0

您可以实施以下Given步骤,为每个角色仅登录一次:

# lazily log in each role as needed, and keep the login in a hash table
$logins = Hash.new do |_logins, role|
  _logins[role] = do_expensive_login(role)
end
Given /^I am logged in as "([^"]+)"$/ |role|
  @login = $logins[role]
end
Run Code Online (Sandbox Code Playgroud)

当然,如果未来的步骤可以改变登录状态,或者改变世界,使登录不再有效,这可能会让你陷入困境,所以要小心行事。