2

我有一个梦想,我想用 Cucumber 实现。

我想将黄瓜与硒结合起来(<=到目前为止很好)并使用标签优化测试执行。在我的梦想中,我能够用代表数据库场景的字符串来标记我的场景。例如:

@noData
Scenario: bake a bread

@oneBread
Scenario: look at bread

@tenBreads
Scenario: give multiple breads to the poor

我的一些测试改变了数据,有些则没有。所以我想,如何将所有“非更改”测试聚类以并行访问给定数据

@viewOnly
Scenario: look at a bread

@viewOnly
Scenario: smell a bread

通过这种集群,我的目标是实现最轻微的设置并尽可能并行工作。

@noData
@viewOnly
Scenario: bake a bread
          when i bake a bread
          then i see a bread

@oneBread
@viewOnly
Scenario: look at a bread
          then i see a bread

@oneBread
@viewOnly
Scenario: smell a bread
          then i see a bread

@oneBread
Scenario: slice a bread in half
          when i slice my bread
          then i got two parts of the bread

@oneBread
Scenario: butter a bread
          when i butter my bread
          then i got one bread covered in butter

使用此功能文件,我希望此解决方案将按以下顺序处理功能:

  1. 在数据库中设置 Szenario => @noData
  2. @noData => 场景:烤面包

  3. 在数据库中设置 Szenario => @oneBread
  4. @oneBread => @viewOnly 场景看面包

  5. @oneBread => @viewOnly 场景闻到面包的味道

  6. 在数据库中设置 Szenario => @oneBread
  7. @oneBread => 场景将面包切成两半

  8. 在数据库中设置 Szenario => @oneBread
  9. @oneBread => 场景黄油面包

曾经我玩过 JUnit 跑步者并尝试自己处理创建的 JUnit 测试。我是否必须再次编写自己的 JUnit 跑步者?或者是否可以通过 Cucumber 功能满足我的要求?

有人可以帮我吗?

4

2 回答 2

1

您可以通过为每个数据库场景运行单独的测试来做到这一点。为此,请使用此处解释 的--tags参数https://github.com/cucumber/cucumber/wiki/Tags#running-a-subset-of-scenarios

我更喜欢的另一种方法是将类似的数据库场景放入功能文件中。例如,用于更改数据的功能文件。使用 @Before 获取场景的标签。

@Before
public void beforeTest(Scenario scenario){

}

希望有帮助!

于 2016-09-06T07:22:31.393 回答
1

您必须设置仅在标签匹配时运行的 Before 挂钩,以及仅查看数据的静态标志。对于 noData,您可以添加一个类似于仅用于 onebread 标签的功能,即重置标志。我不清楚 oneBread 标签,这是否意味着设置一个面包。那么多个面包呢?猜猜你将不得不修改逻辑。下面应该适用于您提到的功能文件流。

private static boolean dbSetupReq = true;

//Only get called if both tags are present
@Before(value={"oneBread","viewOnly"})
public void oneBreadViewOnly() {

     if(dbSetupReq ) {
          addData();
          dbSetupReq = false;
     }
}

//Only get called if oneBread tag is present
@Before(value={"oneBread"})
public void oneBreadViewOnly() {

     dbSetupReq = true;
     addData();
}


public void addData() {
    // Add logic to add data to database
}

你可以试试这样的。有一个通用的 Before 钩子,它一直运行,并将 Scenario 对象作为参数。您可以访问ScenariousinggetSourceTagNames()方法上的所有标签,该方法返回标签名的字符串集合。然后,您可以根据存在的标签应用逻辑。也许你可以在 Before 钩子上放一个标签,以便在需要数据设置时调用它。

@Before
public void dataSetup(Scenario sce) {

    List<String> tags = sce.getSourceTagNames();  
    //Do your thing with the tag names....   
}
于 2016-09-06T12:30:26.830 回答