Cucumber 运行 场景取决于来自不同功能文件的另一个场景

Cucumber run scenario depends on another from different feature files

问题是可以 运行 自定义顺序的场景:

假设我们有 2 个功能文件(第一个 - 下订单,第二个是在后端为订单创建数据) 在第一个文件中,我有带有凭证代码或没有凭证代码的场景,所以基本上那些必须用凭证代码触发的场景应该在后端触发(创建凭证场景被触发)。 我希望看到与 TestNG 相同的行为 - dependsOnMethods。 可以为 Cucumber 做吗?

非常感谢。

您可以为其所依赖的场景创建一个步骤定义,方法是采用场景步骤函数并将它们全部放入新的步骤定义中。

我个人使用 PHP dist (Behat),所以我可以举一个 PHP 的例子,也许这会让你更容易理解我的意思:

 /**
 *
 * @Given /^I have completed some previous scenario$/
 */
public function iHaveCompletedSomePreviousScenario()
{
    $this->iEnterInTextboxWith();
    $this->wait(300);
    $this->iClickOn("button:contains('Continue')");
    $this->wait(500);
}

如果在 Java 中有某种方式(据我所知,这是 serenity 使用的方式),它可以做这样的事情:

@Given /^I have completed some previous scenario$/
public void i_have_completed_some_previous_scenario() throws Throwable
{
    // Enter in here functions used in scenario you are emulating
}

再次抱歉,我对 cucumber 的 Java 和 Serenity dist 了解不够,无法了解使用预定义函数的确切语法,但是,我希望您知道如何去做,这样对你有帮助。

我会尽可能避免你建议的耦合功能。

您的第一个功能是关于创建数据并验证创建过程是否正确。

您的第二个功能是处理您希望系统中可用的数据。

我的方法是让支持代码在需要时为每个场景创建数据。此支持代码将在任何执行之前将系统设置为预期状态。

这可能会导致重复。就我个人而言,为了可读性,我会接受重复。在这种情况下,这也会引入灵活性。您要求的耦合执行将迫使您每次都执行所有操作。解决问题时,您将无法轻松执行单个场景。

BDD 和 Cucumber 都是关于人类可读的通信。

清晰胜过干燥。