为testng HTML报告

时间:2017-06-15 03:05:44

标签: java selenium ant annotations testng

我有一个简单的测试套件(这个例子非常简单)。我在构造函数上使用@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代码中可能存在错误。

任何解决方案或指导都非常感谢。

1 个答案:

答案 0 :(得分:0)

当我的@Test方法没有参数时,我想出了一个非常好的黑客。

我创建了第二个数据提供程序,它只返回当前城市名称的Object []。然后我在测试方法中为城市名称创建了一个String参数,并在@Test表示法中列出了新的数据提供者。我完全删除了ITest界面

所以输出现在是:

TEST1(奥尔巴尼)

TEST2(奥尔巴尼)

TEST3(奥尔巴尼)

TEST1(道夫)

TEST2(道夫)

等等

它并不完美,但它能很好地满足我的需求。