提问者:小点点

TestNG-传递包含所有测试输入数据的CSV文件


我正在使用TestNG框架进行单元测试。使用DataProvider注释,我能够成功地将输入数据从CSV文件传递给测试方法。

问题是我的测试类中有几种测试方法,每种方法都需要不同的数据集作为测试输入。所有输入都存在于一个csv文件中。我知道我可以通过在类级别使用DataProvider注释来指定单个输入文件。但是,有没有办法通过仅使用输入CSV文件中的特定数据来运行测试文件中的每个测试用例?

为了更清楚起见,我的测试类(比如TestDemo)将有3种测试方法(比如test1、test2、test3)。有一个包含所有3种方法的测试数据的CSV文件。无论如何,我可以指定它作为输入文件,但只使用该测试的数据运行每个测试吗?

提前感谢。


共2个答案

匿名用户

我使用Apache Metamodel读取@DataProvider方法中的.CSV文件并返回二维数组。非常简单。

我在这里写了一个这样做的例子,当然是使用TestNG。具体来说,这个类。

请记住,如果您将电子表格行中的所有项目放入Object[]中,那么您可以将其作为单个对象直接传递给您的测试方法,并且@BeforeMethod能够在实际测试开始之前访问该行数据。这是JUnit 4. x无法做到的。

匿名用户

TestNG不支持开箱即用,但您应该能够轻松适应它。例如:

public class TestDemo {
    private static Object[][] data() {
        /* Your original data provider code that returns test data for each test method.
         * You may wish to cache the result using memoization to avoid reading the CSV file
         * multiple times. */
    }

    @DataProvider(indices = 0)
    public static Object[][] data1() {
        return data();
    }

    @Test(dataProvider = "data1")
    public void test1(/* test 1 data parameters */) {
        /* test 1 code */
    }

    @DataProvider(indices = 1)
    public static Object[][] data2() {
        return data();
    }

    @Test(dataProvider = "data2")
    public void test2(/* test 2 data parameters */) {
        /* test 2 code */
    }

    @DataProvider(indices = 2)
    public static Object[][] data3() {
        return data();
    }

    @Test(dataProvider = "data3")
    public void test3(/* test 3 data parameters */) {
        /* test 3 code */
    }
}