TestNG 迭代测试数据而不是测试方法

Hub*_*iak 5 java testng

将 DataProvider 与多个 TestNG 方法一起使用时,每个方法都会按顺序运行所有数据集。相反,我想遍历数据集并在每次迭代中执行所有方法。我不在乎结果是显示每个测试方法的结果还是每个方法的运行摘要。

我已经尝试过该选项

order-by-instances="true"
Run Code Online (Sandbox Code Playgroud)

在suite.xml 中没有成功。

示例代码:

public class TestNGTest
{
    @DataProvider(name = "dp")
    public Object[][] createData(Method m) {
      return new Object[][] { new Object[] { "Cedric" }, new Object[] {"Martina"}};
    }

    @Test(dataProvider = "dp")    
    public void test1(String s) throws InterruptedException {
        System.out.println("test1 " + s);
        Thread.sleep(1000);
    }

    @Test(dataProvider = "dp")
    public void test2(String s) throws InterruptedException {
        System.out.println("test2 " + s);
        Thread.sleep(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

实际结果:

test1 Cedric
test1 Martina
test2 Cedric
test2 Martina
PASSED: test1("Cedric")
PASSED: test1("Martina")
PASSED: test2("Cedric")
PASSED: test2("Martina")
Run Code Online (Sandbox Code Playgroud)

想要的结果:

test1 Cedric
test2 Cedric
test1 Martina
test2 Martina
PASSED: test1("Cedric")
PASSED: test2("Cedric")
PASSED: test1("Martina")
PASSED: test2("Martina")
Run Code Online (Sandbox Code Playgroud)

Paw*_*ski 1

请尝试使用以下侦听器 GroupByInstanceEnabler。您可以将此侦听器放在测试类(或测试基类,如果有的话)中的 Listeners 注释中,或者更简单更好的解决方案是将其放在 META-INF 中,让 TestNg 使用 ServiceLoader 加载它(http://testng. org/doc/documentation-main.html#listeners-service-loader

这将允许您摆脱 suite.xml 以及仅保留此 META-INF 和启用程序在类路径上所需的内容。每当您运行任何测试时,都会加载该测试 - 不需要配置任何东西(例如 IDE)、创建要运行的套件 - 它总是会开箱即用地加载您的侦听器。

import org.testng.ISuite;
import org.testng.ISuiteListener;

public class GroupByInstanceEnabler implements ISuiteListener {

    @Override
    public void onStart(ISuite suite) {
        suite.getXmlSuite().setGroupByInstances(true);
    }

    @Override
    public void onFinish(ISuite suite) {

    }
}
Run Code Online (Sandbox Code Playgroud)

帕维尔