当前位置: 首页 > 知识库问答 >
问题:

如何使用csv文件中的不同测试数据集在junit或testng中运行多个测试用例

潘俊
2023-03-14

我希望这个场景有点让我困惑。我想运行一些测试用例使用jUnit或testng与不同的数据集从csv文件。下面给出了我尝试过的代码片段,但它仍然有效,

    private static CSVReader csvReader = null;
    @BeforeClass
        public static void setUp() {
            csvReader = new CSVReader(new FileReader(fileName));
        }

    @Test
    public void test1() {
        .......
        .......
        System.out.println(csvReader[0]);
    }

    @Test
    public void test2() {
        .......
        .......
        System.out.println(csvReader[1]);
    }

    @Test
    public void test3() {
        .......
        .......
        System.out.println(csvReader[2]);
    }

    @Test
    public void test4() {
        .......
        .......
        System.out.println(csvReader[3]);
    }

我的问题是,我需要在不同的测试用例中使用来自每一列的数据,如果csv文件中有多行,我需要再次迭代所有测试用例。我尝试过使用理论和数据点,但它的工作方式是,第一个案例使用csv文件中的所有行运行,它移动到下一个测试案例,然后使用csv文件中的所有行再次运行。

我希望解决方案运行test1()与第一行的第一列,test2()与第一行的第二列,test3()与第一行的第三列和test4()与第一行的第四列,然后同样需要迭代与第二行等等。测试用例是否可以这样迭代?就我所搜索到的,我们可以以多种方式迭代特定的测试用例。我的问题是,有没有可能用一组数据迭代一个类中的所有测试,然后用来自csv的另一组数据再次重申这个类。

我们可以使用junit或testng实现这一点吗?如果是这样,请证明一些示例代码。提前谢谢!

共有2个答案

孟成化
2023-03-14

TestNG解决方案是:

public class YourTest {

    @DataProvider
    public static Object[][] data() {
        try( FileReader read = new FileReader(fileName)) {
            CSVReader csvReader = new CSVReader(reader);

            List<CSVRecord> records = ... read data;

            Object[][] parameters = new Object[records.length][1];
            for(int i=0; i<records.length; i++) {
               parameters[i][0] = records.get(i);
            }
            return parameters;
        }
    }

    @Test(dataProvider="data")
    public void test(CsvRecord record) {
         ...do something with the record
    }
}
宋俊艾
2023-03-14

嗯,有参数化测试...你可以用它们。

@RunWith(Parameterized.class)
public class YourTest {
    @Parameters
    public static Collection<Object[]> data() {
        try( FileReader read = new FileReader(fileName)) {
            CSVReader csvReader = new CSVReader(reader);

            List<CSVRecord> records = ... read data;

            Object[][] parameters = new Object[records.length][1];
            for(int i=0; i<records.length; i++) {
               parameters[i][0] = records.get(i);
            }
            return parameters;
        }
    }

    private CsvRecord record;  // [0] from the array goes here

    public YourTest (CsvRecord record) {
        this.record = record;
    }

    @Test
    public void test() {
         ...do something with the record
    }
}
 类似资料:
  • 问题内容: 有没有办法告诉JUnit在继续下一个测试用例之前,用不同的数据连续运行一个特定的测试用例多次? 问题答案: 看看junit 4.4的理论:

  • 我试图使用XML和TestNG运行一个测试套件,但是我总是同时使用Eclipse和命令行得到相同的消息: 该文件已正确读取,但测试似乎没有运行。 以下是我的testng.xml的内容: 这是我的目录结构在Eclipse中的样子: 此外,这也是我试图通过命令行运行测试套件的方式: 我尝试过通过eclipse清理项目,但似乎没有帮助。我也试过跑步: < code>mvn clean,但它也没有完成工作

  • 我正在尝试运行配置套件文件的并行测试。测试是针对使用Selenium的web应用程序。套件文件由多个测试组成。每个测试都包含多个测试类。每个测试中的第一个类用于初始化(@beforetest)WebDriver并关闭它(@aftertest)。WebDriver是静态的,以便将其传递给其他类(原因是我们需要从最后一个测试类结束的地方继续测试)。 当套件配置为按顺序运行测试时,测试将成功运行。但是当

  • 我有一个通用代码库,需要用不同的实现和运行时配置进行测试。考虑使用多个DAO实现的服务。我有测试Dao接口的通用单元测试(需要Dao自动连接),我想从不同的项目中调用这些测试。 基本上我想要这样的东西。在共享的通用项目中,我的测试将有效。所以本质上,在共享项目中,我有我的测试,例如。 然后在实现Dao的其他项目中,我会: . 同样,有多个项目以不同的方式实现DAO层,我想分享通用测试。 如果我能将

  • 例如: 数据提供程序1:dataA 数据提供程序2:dataB,dataC 数据提供程序3:dataD、dataE、dataG 所以我的测试需要一个数据提供者。但是我希望它根据测试组为不同的测试类型选择不同的数据提供者。例如,如果我正在运行“smoke”组,那么我希望使用数据提供者1;如果我正在运行“sanity”组,那么我希望运行数据提供者1和数据提供者2;如果我正在运行“regression”

  • 我有一个Selenium项目,使用Maven和TestNG。 我已经尝试了几种不同的方法来使用Maven命令运行测试(我使用的是sure fire插件)。当我运行Maven时,测试不会运行。没有错误。 有没有人有一个很好的例子或教程,我可以遵循使我的测试运行时,我使用mvn测试? 提前道谢。 以下是输出: 和POM文件中的surefire配置: