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

在TestNG DataProvider中迭代CSV文件

陆弘光
2023-03-14

我对如何最好地实现一个简单的DataProvider有点困惑,以前没有这样做过。

我有一个非常简单的逗号分隔的.csv文件:

978KAL,625JBH,876SSH,452GSH

我只需要读入并迭代记录,对每个记录运行相同的测试,直到完成为止。

String csvFile = "src/test/resources/registrationsData.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";


    @DataProvider(name="getRegistrations")
    private Object[] getCSVTestData() {
        Object [] registrationsObject;
        try {

            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {

                // use comma as separator
                String [] registrations = line.split(cvsSplitBy);

                System.out.println( registrations[0] + "," + registrations[1]);

            }

        } catch//File not found & IOException handling here
        registrationsObject = new Object[][]{registrations};
        return registrationsObject;
    }



    @Test(dataProvider = "getRegistrations")
    public void getRegistrations(String registration){

        Object[] objRegArray =  getCSVTestData();

        for(int i=0; objRegArray.length>i; i++){
        //run tests for every record in the array (csv file)
    }
 }

我不清楚如何(和/或最好的方式)从objRegArray对象检索每个记录。

我猜这是一个基本的集合问题;谁能给我指正确的路吗?

共有1个答案

鄢修德
2023-03-14

请使用我下面的解释检查此代码:

package click.webelement.testng;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.Scanner;

public class OneLineCSV {

    final static String CSV_FILE = "/path_to_file/oneline.csv";
    final static String DELIMETER = ",";

    @DataProvider(name = "test")
    public Iterator<Object[]> testDP(){
        try {
            Scanner scanner = new Scanner(new File(CSV_FILE)).useDelimiter(DELIMETER);
            return new Iterator<Object[]>() {
                @Override
                public boolean hasNext() {
                    return scanner.hasNext();
                }
                @Override
                public Object[] next() {
                    return new Object[]{scanner.next()};
                }
            };
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Test(dataProvider = "test")
    public void testOneLineCSV(String value){
        System.out.println(value);
    }

}

因此,我将使用scanner类,这样它就可以方便地将字符串解析为令牌。

我还将在数据提供程序中使用返回迭代器 的功能,因为扫描器就是这样设计的。您只需用新的迭代器包装它,该迭代器将Scanner.Next()返回的String转换为new Object[]{scanner.Next}

 类似资料:
  • 我有一个扩展测试数据文件(excel/csv)。 我的需求在我的jmx树中,我的第一个http请求应该从ContentName列中获取值,例如:www.sample${ContentName}我需要将JsonPathExtractorApi列作为jp@gc-JSON路径提取器。 请不要说我只需要一个json路径提取器,需要${JsonPathExtractorApi}。对于酒店,我需要提取4次,对

  • null 一些示例输出数据: *编辑:工作的scala代码行:

  • 问题内容: 您能想到一种很好的方法(也许使用itertools)将迭代器拆分为给定大小的块吗? 因此,with成为迭代器 我可以想到一个小程序来做到这一点,但是使用itertools并不是一个好方法。 问题答案: 在 从配方文件的食谱来靠近你想要什么: 但是,它将使用填充值填充最后一个块。 较不通用的解决方案仅适用于序列,但可以根据需要处理最后一个块 最后,一种可在一般迭代器上运行且其行为符合预期

  • 有存储库文件夹,其中有100个图像文件夹。我想遍历每个文件夹,然后对这些文件夹中的图像执行相同的操作。 例如:存储库—— 有人知道优雅的做法吗? 我的操作系统是MacOS(里面有DS_Store元数据文件)

  • 本文向大家介绍在Java中迭代ArrayList,包括了在Java中迭代ArrayList的使用技巧和注意事项,需要的朋友参考一下 Java中的Iterator用于遍历集合中的每个元素。使用它遍历,获取每个元素,或者甚至可以从ArrList中删除元素。要使用迭代器遍历集合的内容,请首先通过调用集合的iterator()方法来获得一个迭代器,使其到达集合的开头。在那之后,建立一个循环来调用hasNe

  • 我的javafx应用程序中有一个带有ImageViews的HBox,现在我需要一些方法来迭代这个HBox,但是我找不到一个算法来实现它,我试着做了这样的事情: 这里堆栈是我的HBox,但这样的ImageViews会重复,我不想要的。我不知道为什么,所以我该怎么做…