【问题标题】:how to pass the data(from Examples) of one feature file to other feature file?如何将一个特征文件的数据(来自示例)传递给另一个特征文件?
【发布时间】:2017-10-31 14:51:07
【问题描述】:

当我第一次执行功能文件时,我会在运行时更新它的字段。需要将相同字段的值传递给其他功能文件。是否可以使用java将一个特征文件的数据传递给另一个特征文件?

feature file 1:
scenario outline: test xxx functionality
Examples :
|user|password|
|abc|pass|

feature file2:
Scenario Outline : test yyy functionality
Examples:
|user|password|
|    |        |

在这里,我希望将特征文件 1 中的数据传递给特征文件 2,即 abc 和 pass 应该复制到特征文件 2 的示例中。 请提出建议。在此先感谢!

【问题讨论】:

    标签: java cucumber cucumber-jvm serenity-bdd feature-file


    【解决方案1】:

    不支持将值从一个功能文件传递到另一个。它会迫使你以特定的顺序执行你的场景。这是一个众所周知的反模式。您的场景应该可以按任何顺序执行,如果您希望一个场景先于另一个场景执行,这是不可能的。

    那么您应该如何在第二个功能文件中重用您的设置?简短的回答是不要。而是实现一个帮助程序,需要用户设置的功能可以用来准备被测系统。在执行之前从需要此设置的每个场景中调用此助手。这听起来可能是很多不必要的工作,但它可以让您避免很多相互依赖的场景的问题,并使您的系统在两次执行之间处于意外状态。

    【讨论】:

      【解决方案2】:

      严格来说,您不应该将数据从一个 BDD 测试传递到另一个测试。这将违背进行独立单元 BDD 测试的目的。一般来说,软件单元测试应该是相互独立的。

      话虽如此,您当然可以从一个步骤定义中保留一些状态,然后在另一个步骤中重用它:

      @When("^I login with username \"(.*)\"$") 
      public void enterUsername(String username) { 
          // do something with username
      
          // make a database call and insert the username in a temporary table
      }
      

      然后,在第二个功能文件中,您可以查询同一个表并检索用户名。

      这可能与您的想法不完全一致,但总体思路只是在第一次测试期间保留一些状态,然后可以在第二次测试中使用。

      【讨论】:

      • 这对 OP 来说有点误导,因为它没有解释变量中的状态将在一个场景和下一个场景之间丢失,并且数据库也将被重置。在你的最后一句话中使用test 会混淆你是在谈论这里的场景还是步骤定义。步骤定义不是测试。
      • @diabolist the database will be reset ...不,不会的,我们使用这种方法来解决步骤假设是无状态的问题。
      • Cucumber 默认想要在场景之间重置数据库(注意不是 Steps)。您的回答令人困惑,因为不清楚您何时谈论步骤和何时谈论场景。只有在同一场景中使用时,您才能在步骤定义之间共享数据。
      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 2015-08-16
      • 2018-10-20
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      相关资源
      最近更新 更多