Java 是否存在某种运行id,该id适用于单个“中的所有功能”;运行;?

Java 是否存在某种运行id,该id适用于单个“中的所有功能”;运行;?,java,cucumber,cucumber-java,Java,Cucumber,Cucumber Java,我们的测试在一些目录中存储关于每个已执行测试的大量信息。如果同一次运行的所有结果都存储在一个名为date/id的目录中,这将是切实可行的。这样就可以很容易地查看历史记录并跟踪内容。目前这是一个手动作业,每次运行后都必须重命名输出目录以保留记录 我们可以很容易地在cucumber之外编写脚本来实现自动化,但是我想知道这是否可以通过cucumber框架实现。一种简单的方法(如果可能的话)是创建一个runId变量,并在同一次运行中的所有测试之间传递它。然而,据我所知,不可能在场景和功能之间传输对象/变

我们的测试在一些目录中存储关于每个已执行测试的大量信息。如果同一次运行的所有结果都存储在一个名为date/id的目录中,这将是切实可行的。这样就可以很容易地查看历史记录并跟踪内容。目前这是一个手动作业,每次运行后都必须重命名输出目录以保留记录

我们可以很容易地在cucumber之外编写脚本来实现自动化,但是我想知道这是否可以通过cucumber框架实现。一种简单的方法(如果可能的话)是创建一个runId变量,并在同一次运行中的所有测试之间传递它。然而,据我所知,不可能在场景和功能之间传输对象/变量。依赖项注入似乎只允许在步骤之间使用相同的对象。cucumber框架中是否还有其他地方可以启动runId变量并将其传递给所有测试?或者在cucumber中已经有类似的东西,我可以从框架中的某个地方得到

例如,如果我有步骤定义:

public class StepSy {
    File runDirectory;
    DataObject data;

    @Before
    public void before() {
        runDirectory = new File(someObjectPassedDown.getRunId());
    }

    @Given("^Condition (.*)$")
    public void condition() {
        /*Some conditions*/
    }

    @When("^I do (.*)$")
    public void perform(String toDo) {
        /*Some action*/
    }

    @Then("^I expect (.*)$")
    public void expect(String expectedValue) {
        /*Some assertion*/
    }

    @After
    public void after(Scenario scenario) {
        data.writeTo(runDirectory, scenario.getName());
    }
}
还有一个特点:

Feature: Tests

  Scenario: Test01
    Given Condition A
    When I do B
    Then I expect C

  Scenario: Test02
    Given Condition D
    When I do E
    Then I expect F
我可以运行此功能两次,得到两个目录:

MyTestRuns
├── Run_17.05.2017_130156
│   ├── Test01
│   └── Test02
├── Run_16.05.2017_163402
│   ├── Test01
│   └── Test02

如果我没有弄错你的问题,你希望每次跑步都有一个唯一的目录。 在包含目录初始化状态的类中设置静态标志。它将确保在第一个场景运行时创建目录,而不再是。并创建用于生成运行id的静态方法

public class StepSy {
    static File runDirectory;
    private static boolean fileInitFlag = false;
    DataObject data;


    @Before
    public void before() {
        if(!fileInitFlag) {
             runDirectory = new File(FileIdGenerator.getRunId());
             fileInitFlag= true;
        }
    }



    @After
    public void after(Scenario scenario) {
        data.writeTo(runDirectory, scenario.getName());
    }
}