我有一个简单的测试套件(这个例子非常简单)。我在构造函数上使用@Factory表示法,并在@DataProvider上返回一个对象[] []的城市(多达100个)我运行我的测试。在这个例子中有3个@Test方法。如果我没有用城市名称附加测试名称,我会有一个HTML报告,只是反复列出3种测试方法,无法区分它们。
我尝试了这个例子:Here。
我的测试课程完美无缺。我遇到的问题是,当我覆盖ITest getMethodName()时,我得到意外的输出。
我的代码:
@Test(sequential = true)
public class ParcelSearchPage implements ITest{
private String cityClassName;
private String cityName;
private mTestCaseName = "";
@Factory(dataProvider="getCities")
public ParcelSearchPage(String className , String cityName){
this.cityClassName = className;
this.cityName = cityName;
}
@DataProvider
public Object[][] getCities(){
return new Object[][]FromAnotherMethod();
}
@Override //from ITest
public String getTestName() {
return this.mTestCaseName;
}
@BeforeMethod(alwaysRun = true)
public void testData(Method method) {
this.mTestCaseName = String.format("%s : %s" , this.cityClassName, method.getName());
}
@BeforeClass(alwaysRun = true)
public void startup(){
// init stuff
}
@Test
public void test1(){
}
@Test
public void test2{
}
@Test
public void test3{
}
}
我希望这足够详细,以便得到示例。
输出:
使用cityClassNames Albany,Astoria,Bend
打开Html报告我希望列表如下:
奥尔巴尼:test1
奥尔巴尼:test2
奥尔巴尼:test3
Astoria:test1
Astoria:test2
Astoria:test3
弯曲:test1
弯曲:test2
弯曲:test3
我在testng.xml中强制使用group_by_instance
我在Html报告中看到的是:
奥尔巴尼:test1(奥尔巴尼:test3)
奥尔巴尼:test2(奥尔巴尼:test3)
奥尔巴尼:test3(奥尔巴尼:test3)
Astoria:test1(Astoria:test3)
Astoria:test2(Astoria:test3)
Astoria:test3(Astoria:test3)
弯曲:test1(弯曲:测试3)
弯曲:test2(弯曲:测试3)
弯曲:test3(弯曲:测试3)
我发现了其他人员有类似问题的帖子(即使是我之前提到过的帖子)
我还在@AfterClass方法中简要地尝试过这个。输出仍然存在问题。
我不明白如何纠正这个问题。我测试了字符串,问题发生在getTestName()方法中。即使我传递了一些像'Hello'这样简单的东西,报告也会显示Hello(Hello)。
我想也许TestNG Java代码中可能存在错误。
任何解决方案或指导都非常感谢。
答案 0 :(得分:0)
当我的@Test方法没有参数时,我想出了一个非常好的黑客。
我创建了第二个数据提供程序,它只返回当前城市名称的Object []。然后我在测试方法中为城市名称创建了一个String参数,并在@Test表示法中列出了新的数据提供者。我完全删除了ITest界面
所以输出现在是:
TEST1(奥尔巴尼)
TEST2(奥尔巴尼)
TEST3(奥尔巴尼)
TEST1(道夫)
TEST2(道夫)
等等
它并不完美,但它能很好地满足我的需求。