是否有某种 运行 id 对单个 "run" 中的所有功能都相同?
Is there some sort of run id that is the same for all features in a single "run"?
我们的测试在某些目录中存储了大量有关每个已执行测试的信息。如果来自同一个 运行 的所有结果一起存储在例如由 date/id 命名的目录中,这将是实用的。这样就可以很容易地查看历史记录并跟踪什么是什么。目前这是一项手动工作,其中输出目录必须在每次 运行 保留记录后重命名。
我们可以很容易地在 Cucumber 之外编写脚本来实现自动化,但是我想知道这是否可以通过 Cucumber 框架来完成。一种简单的方法(如果可能)是创建一个 运行Id 变量并在同一个 运行 中的所有测试之间传递它。但是,据我所知,不可能在场景和功能之间转移 objects/variables。依赖注入似乎只允许在步骤之间使用相同的对象。在黄瓜框架中是否还有另一个地方我们可以启动一个 运行Id 变量并将其传递给所有测试?或者我可以从框架中的某个地方获得黄瓜中已经有类似的东西?
例如,如果我有步骤定义:
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
如果我答对了你的问题,你希望每个 运行 都有一个唯一的目录。
在 class 中设置一个静态标志,其中包含目录初始化的状态。它将确保在第一个场景是 运行 时创建目录,而不再是。并创建一个静态方法来生成 运行 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());
}
}
我们的测试在某些目录中存储了大量有关每个已执行测试的信息。如果来自同一个 运行 的所有结果一起存储在例如由 date/id 命名的目录中,这将是实用的。这样就可以很容易地查看历史记录并跟踪什么是什么。目前这是一项手动工作,其中输出目录必须在每次 运行 保留记录后重命名。
我们可以很容易地在 Cucumber 之外编写脚本来实现自动化,但是我想知道这是否可以通过 Cucumber 框架来完成。一种简单的方法(如果可能)是创建一个 运行Id 变量并在同一个 运行 中的所有测试之间传递它。但是,据我所知,不可能在场景和功能之间转移 objects/variables。依赖注入似乎只允许在步骤之间使用相同的对象。在黄瓜框架中是否还有另一个地方我们可以启动一个 运行Id 变量并将其传递给所有测试?或者我可以从框架中的某个地方获得黄瓜中已经有类似的东西?
例如,如果我有步骤定义:
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
如果我答对了你的问题,你希望每个 运行 都有一个唯一的目录。 在 class 中设置一个静态标志,其中包含目录初始化的状态。它将确保在第一个场景是 运行 时创建目录,而不再是。并创建一个静态方法来生成 运行 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());
}
}