如何将单个 dataProvider 用于一系列测试用例?

问题描述 投票:0回答:1

我的用例是,我有一个使用数据提供程序的基本测试用例,并且该数据提供程序的单个实例由一系列测试用例使用。

@Test(dataProvider="TestData", dataProviderClass = ExcelDataProvider.class)
public void baseTest(String data[]){
 data1 = data[0];
 data2 = data[1];
 data3 = data[2];

 //The below testcases are sequence testcases, each testcase is implemented in seperate class file and the test method is annotated with @Test

 TC01Impl tc1 = new TC01Impl(driver);
 tc1.TestCase1(data1);

 TC02Impl tc2 = new TC02Impl(driver);
 tc2.TestCase2(data2);

 TC03Impl tc3 = new TC03Impl(driver);
 tc3.TestCase3(data3);
}

我正在使用侦听器来截取屏幕截图并附加到报告,以防测试用例失败。它运行良好并且还附加了正确的屏幕截图,但问题是它显示 baseTest 失败。我希望发生故障的特定测试用例出现在报告中。我们怎样才能做到这一点。

testng appium-android automation-testing
1个回答
0
投票

看起来您正在一个 @Test 方法中运行 3 个不同的测试(TestCase1、TestCase2、TestCase3)。因此,如果 TestCase1 失败,TestCase2 和 TestCase3 根本不会执行,并且您的 baseTest 方法将被标记为失败。 这是预期的行为,因为 TestCase1、TestCase2 和 TestCase3 对 TestNG 没有任何意义,它们只是实际测试“baseTest”的一部分(用 @Test 注释)。

为了执行 3 个测试,并在报告中包含 3 个测试,您需要创建 3 个使用 @Test 注释进行注释的单独方法,并将相同的数据提供程序传递给所有这些方法(我建议检查数据提供程序本身,因为您的每个测试似乎都需要单个字符串作为参数,因此您不必移动数组)



public class YourTestSuite {

    @Test(dataProviderClass = ExcelDataProvider.class, dataProvider = "TestData")
    public void testCase1(String[] data) {
        TC01Impl tc1 = new TC01Impl(driver);
        tc1.testCase1(data[0]);
    }

    @Test(dataProviderClass = ExcelDataProvider.class, dataProvider = "TestData")
    public void testCase2(String[] data) {
        TC02Impl tc2 = new TC02Impl(driver);
        tc2.testCase2(data[1]);
    }

    @Test(dataProviderClass = ExcelDataProvider.class, dataProvider = "TestData")
    public void testCase3(String[] data) {
        TC03Impl tc3 = new TC03Impl(driver);
        tc3.testCase3(data[2]);
    }
}

使用 @Test 注释标记 testCase1、testCase2 和 testCase3 方法,并运行 TC01Impl、TC02Impl 和 TC03Impl 类中的所有测试方法,而不是使用额外的类来执行相同的操作,这可能是有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.