如何将Cucumber场景作为一个步骤运行?

如何将Cucumber场景作为一个步骤运行?,cucumber,cucumber-java,Cucumber,Cucumber Java,我有一个场景有很多步骤,其全部目的是生成数据,例如: Scenario: Data generation Given dataGen statement 1 And dataGen statement 2 ... And dataGen statement 100 我想将整个场景(即所有100条语句)作为另一个场景中的一个步骤。我想做一些类似的事情: scenario: Data generation and then assert (everything in previous scena

我有一个场景有很多步骤,其全部目的是生成数据,例如:

Scenario: Data generation
Given dataGen statement 1
And dataGen statement 2

...
And dataGen statement 100
我想将整个场景(即所有100条语句)作为另一个场景中的一个步骤。我想做一些类似的事情:

scenario: Data generation and then assert
(everything in previous scenario)
Then I assert my assertion
但复制和粘贴所有内容是愚蠢的

Cucumber中有没有一种方法可以作为单个步骤调用场景?
或者将100语句组合成一个整体结构并调用它?

不确定是否有方法从jvm中的另一个调用场景步骤。ruby实现中允许某种嵌套步骤。你可以试试belowin java

将您的场景转换为场景大纲,其中包含两个带有各自标记的表。当您只想生成数据时,请将
@data
标记传递到runner类的
cucumberoptions
。和
@DataAndAssert
,这两种操作都是必需的。将断言步骤中的逻辑基于布尔标志的值

    Scenario Outline: Data generation and then assert
    Given dataGen statement 1
    And dataGen statement 2

    ...
    And dataGen statement 100
    Then I assert my assertion <flag>

    @Data
    Examples: Data Generation Only
    | flag |
    | false |

    @DataAndAssert
    Examples: Data Generation And Assertion
    | flag |
    | true |
场景大纲:数据生成然后断言
给定dataGen语句1
和dataGen语句2
...
和dataGen语句100
然后我坚持我的主张
@资料
示例:仅数据生成
|旗|
|假的|
@数据和资产
示例:数据生成和断言
|旗|
|真的|

这是一个解决办法。但是,如果dataGen被许多测试用例使用,那么就不那么方便了。我正在寻找至少可以在@Before中运行功能的东西。在@Before钩子中,Cumber不会调用功能和步骤定义。如果你想这样做,你需要自己调用它,使用一个包装器方法调用你的步骤定义代码。问题是,@before”钩子只调用java代码,我不想复制从cucumber步骤转换到@before钩子的上百行重复java代码。这违背了我为什么首先用cucumber编写这些dataGen的目的。