您可以在 Cucumber 功能 "Examples:" 部分使用外部资源吗?

Can you use external resources in Cucumber feature "Examples:" section?

这是我的一个场景测试功能文件

Feature: My test feature

Scenario Outline: I want user to be logged into MyPage

When user goes to MyPage
And user fills "<test_login>" login field
And user fills "<test_password>" password field
And user clicks Login button
Then user should be logged in

Examples:
|test_login|test_password|
|login1234|password1234|

我想将我的示例:部分修改成这样

Examples:
src/test/resources/datatables/logind_data.table

我想使用包含数据的文件路径 table 但我收到 Cucumber gherkins builder 错误消息。 error_modal

是否可以在“Examples:”中使用外部资源?

这目前是不可能的。我们正在讨论如何在 this issue 中实施。欢迎加入那边的讨论。

Cucumber 现在不支持任何外部文件。 这不可能。但是,您可以尝试在黄瓜代码中使用属性文件并对其进行初始化。 但是同样,您不能将所有数据都保存在属性文件中

解决这类问题的最佳方法是编写更好的场景,将细节抽象出来。

但首先你需要回答一些问题。

为什么要测试不同用户丢失后能否登录系统? 测试额外用户有什么好处?

假设你确实有充分的理由来测试一组用户,你可以这样写

Scenario: Foo users can sign in
  Given Foo users are registered
  When Foo users sign in
  Then Foo users should have signed in

并将有关如何执行此操作的所有详细信息推送到步骤定义中。这将允许您执行

之类的操作
Given 'Foo users are registered' do
  @foo_users = load_foo_users(path: src/test/resources/datatables/logind_data.table)
  @foo_users.each do |user|
    register_user(user: user)
  end
 end

您可以在 when 步骤中循环用户并将结果记录在另一个全局中。然后检查 Then 步骤中的结果。

此处使用了一些通用技术

  • 将如何下推测试堆栈(功能、step_defs、helper_methods、应用程序代码)
  • 使用全局变量在步骤之间进行通信
  • 在场景中使用抽象简单的语言
  • 命名构造并在场景中按名称引用它们。不要定义它们的内容。