【问题标题】:How to execute same cucumber feature or scenario n times?如何执行相同的黄瓜功能或场景 n 次?
【发布时间】:2019-09-03 15:22:57
【问题描述】:

我需要执行一个场景 100 次,它是一个功能的一部分。由于没有数据参数化,因此没有场景大纲。我只需要对这个特定场景进行大猩猩测试,以确保它每次都能通过而不会失败。我的一些团队成员多次观察到失败,因此需要验证稳定性。

Runner类代码:

public class Baserunner extends AbstractTestNGCucumberTests{
private TestNGCucumberRunner testNGCucumberRunner;

@BeforeClass(alwaysRun = true)
public void setUpClass() throws Exception {
    System.out.println("Test");
    String browsername = "IExplorer";
    testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
    BaseConfig.ConfigFileReader();
    BaseConfig.launchbrowser(browsername);
   // BaseConfig.executeScript();

}

@Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "features")
public void feature(CucumberFeatureWrapper cucumberFeature) {
    testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature());
}

@DataProvider
public Object[][] features() {
    return testNGCucumberRunner.provideFeatures();
}

@AfterClass(alwaysRun = true)
public void tearDownClass() throws Exception {
    testNGCucumberRunner.finish();
    BaseConfig.closeBrowser();
}

【问题讨论】:

  • 很可能连续执行 100 次测试不会复制失败。我发现在某些其他测试之前或之后执行片状测试的组合会导致失败。老实说,我只是将其作为一个场景大纲,并将一个基本上什么都不做的步骤参数化。

标签: selenium selenium-webdriver cucumber testng bdd


【解决方案1】:

您可以在 runner 类中使用循环逻辑尝试以下 hack。

@Override
    @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "features")
        public void feature(CucumberFeatureWrapper cucumberFeature) {
            for(int i=0;i<100;i++)
                testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature());
        }

另外,您必须通过指定行号确保只执行一个场景。

@CucumberOptions(features = {"src/test/resources/stepdef/scenarios.feature:3"})

你用的是什么版本的黄瓜?

【讨论】:

  • 这正是我想要的。一件事 - 我们需要注释掉标记行,因为我们不能同时使用行号和标记。
【解决方案2】:

例如,我认为您需要在黄瓜中参数化 It Scenario。这多次执行每个场景的步骤都有标签

Scenario Outline: My program's test 
 Given Im in the section HOME 
 When I click on button Accept <action>
 Example: 
  | action  |
  |   1     | 
  |   n     |
  |   n     | 
  |  100    |

另一种选择是。这使用参数化执行 | 100 |

Scenario: My program's test 
 Given Im in the section HOME 
 When I click on button Accept 100

在步骤定义之后

@When("^I click on button Accept \"([^\"]*)\"$")
public void I_click_on_button_Accept(int n) throws Throwable {
  for(int i=0; i <= n; i++) {
     methodCall();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多