在黄瓜的场景大纲之前运行登录步骤 [英] Running a login step prior to scenario outline in cucumber

查看:133
本文介绍了在黄瓜的场景大纲之前运行登录步骤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用黄瓜与webrat / mechanize测试一个PHP网站,我试图提高测试运行的速度,避免运行不必要的步骤。

I'm using cucumber with webrat/mechanize to test a PHP site and I'm trying to improve the speed the tests run by avoiding running unnecessary steps.

我想根据登录的用户使用场景大纲来检查整个页面是否可访问/保护:

I want to use a scenario outline to check a whole lot of pages are accessible/protected depending on the user who is logged in:

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          |
  ...

这样做,但由于我有10个角色,检查,每次大纲运行时运行登录步骤有很多开销。

This works, but given I have 10 roles and hundreds of pages to check, there is a lot of overhead in running the login step every time the outline runs.

我想知道是否有一种方法来运行登录步骤一次每个角色,然后依次访问每个页面,而不需要每次登录。即运行登录,访问1,访问2,访问3而不是登录,访问1,登录,访问2,登录,访问3。

I'm wondering if there is a way to run the login step once for each role, then visit each page in turn without needing to login every time. i.e run "login, visit 1, visit 2, visit 3" instead of "login, visit 1, login, visit 2, login, visit 3".

我试过使用钩子和Background,但是似乎找不到一个有效的方法。这是否可能?

I've tried using hooks, and Background, but can't seem to find an approach that works. Is this possible?

推荐答案

不要将所有可访问/受保护的信息放在功能中, step defs(更好的办法是在你的应用程序中使用定义,但如果你的应用程序没有处理,这是不容易的)

Instead of putting all the information about what is accessible/protected in the feature, consider putting them in the step defs (even better would be to use the definitions in your application, but that isn't easy if your app is not in process)

如果你可以生活在特征是抽象的

If you can live with a feature that is as abstract as

Given I am an admin
Then I should be able to access admin pages

然后你可以在步骤中更高效地完成所有的工作。

Then you can do all the work much more efficiently in step defs

下面是一个代码草图,让你知道你可以做什么...

Following is just a code sketch to give some idea of what you can do ...

# step def
module AccessHelper
  AdminPages = {
    {page: ..., msg: ...
    ...
  }
  def login_as ... ; end
  def correct_message? msg ...; end
  def check_admin_access_for user
    @errors = []
    login_as @I
    AdminPages.each do |page|
      visit page[:path]
      errors << page unless correct_message?
    end
  end
end
World(AccessHelper)

Then "I should be able to access admin pages" do
  check_admin_access_for @I
  @errors.should be_empty
end

红宝石的充满力量满足你的特殊需求。基本的想法是,你总是可以采取几个黄瓜的行动,并将它们抽象成一个黄瓜的行动。

You can of course expand this using the full power of ruby to meet you particular needs. The fundamental idea is that you can always take several cucumber actions and abstract them into one cucumber action.

希望这是有用的

这篇关于在黄瓜的场景大纲之前运行登录步骤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆