我的用例是,我有一个使用数据提供程序的基本测试用例,并且该数据提供程序的单个实例由一系列测试用例使用。
@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 失败。我希望发生故障的特定测试用例出现在报告中。我们怎样才能做到这一点。
看起来您正在一个 @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 类中的所有测试方法,而不是使用额外的类来执行相同的操作,这可能是有意义的。