【问题标题】:Can you use external resources in Cucumber feature "Examples:" section?您可以在 Cucumber 功能“示例:”部分中使用外部资源吗?
【发布时间】:2020-12-03 03:05:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: selenium automation cucumber gherkin


    【解决方案1】:

    目前这是不可能的。我们正在讨论如何实现在this issue。随意加入那里的对话。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这种事情的最好方法是编写更好的场景来抽象出细节。

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

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

        假设您确实有充分的理由测试一组用户,您可以编写类似

        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、应用程序代码)
        • 使用全局变量在步骤之间进行通信
        • 在场景中使用抽象的简单语言
        • 命名构造并在场景中按名称引用它们。不要定义它们的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-04
          • 2021-12-24
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多