Cucumber:如何实现功能目录特定的 support/hooks.rb 功能?

Cucumber: How to implement feature directory specific support/hooks.rb functionality?

我们使用 Cucumber 作为我们的测试工具

我们有这样的文件夹结构:

- automation
    - api
        - api1.feature
        - api2.feature
    - gui
        - gui1.feature
        - gui2.feature
    - step_definitions
        - api_steps.rb
        - gui.steps.rb
    - support
        - hooks.rb
    - cucumber.yml
    - env.rb
    - Gemfile
    - Rakefile

我需要在 hooks.rb 文件(或一般的支持目录)中针对 api 测试和 gui 测试执行不同的操作。对于我的 api 测试,我需要通过我们的 restapi 进行授权并获得一个身份验证 cookie。对于我的 gui 测试,我需要创建一个 selenium 浏览器实例。

当我通过从该文件夹结构的 'automation' 级别单独发出 'cucumber' 来执行所有操作时,以及当我通过以下操作执行单个功能文件时,我都需要它来工作:

    $ cucumber gui/gui1.feature -r features

所以我的问题是关于如何最好地做到这一点。

  1. 我可以 I/should 在 'Before do' 块中的 hooks.rb 文件中创建某种条件,以根据功能从哪个目录执行不同的之前操作吗?
  2. 或者 I/should 我可以在每个目录 'api' 和 'gui' 中创建单独的 support/hooks.rb directories/files 吗? (Cucumber 会有效地识别并有选择地利用多个支持目录吗?)

谢谢!

Cucumber 确实不关心目录,它们仅用于组织目的。我会尽量避免任何基于文件位置的实现。

我会用标记的场景和挂钩来实现它。

Before('@gui') do
   # create browser/login
end

Before('@api') do
  # create restapi/auth cookie
end

Before ('~@gui','~@api') do
  fail('Silly developer, all scenarios must have an @api or @gui tag!')
end

如果您 运行 cucumber --help 并特别查看 -r 选项,您会发现可以使用其他方法。其中之一是 运行 将黄瓜实例与不同的包含文件分开。配置它的最佳方法是通过 cucumber.yml.

使用配置文件

您可以轻松设置一个 gui 配置文件以包含 hooks/gui.rb 和一个 api 配置文件以包含 hooks/api

如果您需要获得更多分离,另一种方法是 运行 来自每个子文件夹的黄瓜,例如automation/api automation/gui,并在这些文件夹中创建一个 support/hooks 结构。