是否有某种运行ID对于单个"运行"中的所有功能都是相同的?

时间:2017-05-16 13:47:44

标签: java cucumber cucumber-java

我们的测试存储了有关在某些目录中排序的每个已执行测试的大量信息。如果来自同一运行的所有结果一起存储在例如由date / id命名的目录中,那将是实用的。通过这种方式,您可以轻松查看历史记录并跟踪内容。目前这是一个手动作业,每次运行后都必须重命名输出目录以保存记录。

我们可以在黄瓜外部轻松编写脚本来实现自动化,但是我想知道这是否可以通过黄瓜框架完成。一种简单的方法(如果可能)是创建一个runId变量并在同一次运行中的所有测试之间传递它。但是根据我的理解,它不可能在场景和功能之间传输对象/变量。依赖注入似乎只允许步骤之间的相同对象。在黄瓜框架中是否还有另一个地方我们可以启动runId变量并将其传递给所有测试?或许黄瓜中已经存在类似的东西,我可以从框架中的某个地方获得?

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

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

1 个答案:

答案 0 :(得分:1)

如果我的问题正确无误,那么每次运行都需要一个唯一的目录。 在类中设置一个静态标志,其中包含目录初始化的状态。它将确保在第一个场景运行时创建目录,而不再创建目录。并创建一个静态方法来生成运行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());
    }
}