在testng报告中报告测试的顺序是随机的

时间:2013-02-19 05:41:18

标签: webdriver testng

这是我的testNG测试的样子: -

public class orderTest{
    @Test
    public void meth1() throws InterruptedException{
        System.out.println("1");
        Reporter.log("1");
    }
    @Test
    public void meth2() throws InterruptedException{
        System.out.println("2");
        Reporter.log("2");
    }
    @Test
    public void meth3() throws InterruptedException{
        System.out.println("3");
        Reporter.log("3");
    }
    @Test
    public void meth4() throws InterruptedException{
        System.out.println("4");
        Reporter.log("4");
    }
}

当我在eclipse上运行时,控制台显示为: - 1 2 3 4 通过:meth1 通过:meth2 通过:meth3 通过:meth4

但是当我打开testNG报告时,点击记者输出链接,它显示为: - 记者输出 - METH1 1 meth4 4 meth3 3 meth2 2

为什么testng报告中的订单不正确? 执行顺序是1,2,3,4 但, 报告顺序为1,4,3,2。

2 个答案:

答案 0 :(得分:1)

它也可以通过输出报告中的执行顺序显示。为此,您的TestNG Reporter应该实现IReporter。

使用它的好插件是 ReportNG 。 您可以覆盖它的 generateReport 方法,按照其父 XML 套件顺序在Html报告中显示套件,如下所示:

public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectoryName) {
        ...
        Comparator<ISuite> suiteComparator = new TestSuiteComparator(xmlSuites);
        suites.sort(suiteComparator);
        ...
}

TestSuiteComparator 的位置如下:

public class TestSuiteComparator implements Comparator<ISuite> {

    public List<String> xmlNames;

    public TestSuiteComparator(List<XmlSuite> parentXmlSuites) {
        for (XmlSuite parentXmlSuite : parentXmlSuites) {
            List<XmlSuite> childXmlSuites = parentXmlSuite.getChildSuites();
            xmlNames = new ArrayList<String>();
            xmlNames.add(parentXmlSuite.getFileName());
            for (XmlSuite xmlsuite : childXmlSuites) {
                xmlNames.add(xmlsuite.getFileName());
            }
        }
    }

    @Override
    public int compare(ISuite suite1, ISuite suite2) {
        String suite1Name = suite1.getXmlSuite().getFileName();
        String suite2Name = suite2.getXmlSuite().getFileName();
        return xmlNames.indexOf(suite1Name) - xmlNames.indexOf(suite2Name);
    }
}

答案 1 :(得分:0)

If you want the classes and methods listed in this file to be run in an unpredictible order, set the preserve-order attribute to false.

这就是TestNG文档所说的内容,所以除非拼写错误(不要说我的完美:),这就是一个功能。

但在我看来,只有报告顺序是不可预测的,执行似乎是可以预测的。

dtd说,

@attr preserve-order If true, the classes in this tag will be run in the same order as found in the XML file.

以便与实际相符。

没错,但也许可以反过来预期。

似乎是使报告更具吸引力的功能:)