如何从TestNG数据提供程序跳过数据集(出错时)?

时间:2015-03-10 15:08:34

标签: java testng

我正在尝试使用TestNG执行数据驱动测试(当然还有数据提供者注释)。

我的情况是这样的......

  1. 使用dataProvider具有2个暗淡的数组。 (我使用它来阅读Excel,但为了简化问题而避免使用它。)

    @DataProvider(name = "featureTest")
    public Object[][] dataSets() throws Exception {
        return new Object[][] { {"TC_01", "testuser_1", "Test@123", "ABC Street", "123-456-7899" }, 
                                { "TC_02", "testuser_1", "Test@123", "PQR Street", "222-456-7899" }
                               };
    }
    
  2. 在@Test方法中,根据功能流程有几种方法 -

    @Test(dataProvider = "featureTest")
    public void executeTest(String... data) throws Exception {
    
         try{
    
             feature_1.execute(data);
             feature_2.execute(data);
             feature_3.execute(data);
             feature_4.execute(data);
         }
         catch(Exception e){
             log.error("Error has occured");
         }
    }
    
  3. 现在我的主要问题是功能错误可能发生在我在@Test中指定的这些4(n)方法中的任何地方。

    如果在任何方法中出现异常,我需要“跳过”特定数据集并继续下一个。 例如:在执行TC_01期间,在feature_2.execute()中发生异常,它不应执行feature_3和feature_4方法。

    注意: 我尝试使用@BeforeMethod,@ AfterMethod来处理它,但它仍然会通过我想要避免的不需要的方法。

    提前感谢您的帮助/输入&&为长期问题道歉虽然是一个相对简单的概念来解释!!!

2 个答案:

答案 0 :(得分:0)

我能想到的一种方法是工厂方法,

您的测试类

class Test{
  Data data;
  Test(Data){
  this.data=data;
}


@Test
test1(){
  feature_1.execute(data);
}

@Test
test2(dependsOnMethods ="test1"){
  feature_2.execute(data);
}

@Test(dependsOnMethods ="test2")
test3(){
  feature_3.execute(data);
}

@Test(dependsOnMethods ="test3")
test4(){
  feature_4.execute(data);
}


}

在您的工厂班级

class Factory{

@Factory(DataProvider = "myDP")
public Object[] factoryTest(Data data){
    new Test(data);
}


@DataProvider
public Object [][] myDP(){

    enter code here
}

}

答案 1 :(得分:0)

非常简单。使用return!

使用条件或尝试使用catch来评估失败,然后使用return语句;