如何将一个要素文件的数据(从示例中)传递到其他要素文件?

时间:2017-10-27 11:22:25

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

当我第一次执行功能文件时,我会在运行时更新它的字段。传递给其他要素文件需要相同字段的值。是否可以使用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的示例中。 请建议。谢谢!

2 个答案:

答案 0 :(得分:1)

不支持将值从一个要素文件传递到另一个要素文件。它会强制您按特定顺序执行方案。这是众所周知的反模式。您的场景应该可以按任何顺序执行,如果您希望在另一个场景之前执行一个场景,那么这是不可能的。

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

答案 1 :(得分:0)

严格地说,您不应该将数据从一个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
}

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

这可能与您的想法不完全相同,但一般的想法只是在第一次测试期间保持一些状态,然后可以在第二次测试中使用。