Как передать параметр поставщику данных в testng из CSV-файла

1

Я читаю данные из файла csv, у меня есть тест, для которого эти данные будут входными данными. я хочу, чтобы он выполнялся как тезис для каждого набора значений. для этого я использую поставщика данных. Проблема в том, что она принимает только последнюю заданную строку данных, пожалуйста, помогите мне в отладке кода

For eg : if my csv has following data 
name1 id1 text1
name2 id2 text2
name3 id3 text3

он принимает только последнюю строку name3 id3 text3 и запускает тест только один раз не три раза.

 @DataProvider(name = "test")
        public Object[][] provider( ) throws InterruptedException
        {

            Object[][] returnObject ;

            String[] checkpoint = ReadfromCSV();

            count = count + 1;

            returnObject = new Object[][]{checkpoint };
            return returnObject;
        }

        @Test(description = "Test", groups =  "test" , dataProvider = "test")
        public void compare(String val1,String val2,String val3,String val4,String val5,String val6,String val7,String val8,String val9,String val10,String val11 ) {

            System.out.println("1:" + val1);

            System.out.println("4:" + val2);

            System.out.println("5:" + val3);


        }
        @SuppressWarnings("null")
        public String[] ReadfromCSV() throws InterruptedException {


            String[] data= null;
            String csvFile = "F:/sample1.csv";
            BufferedReader br = null;
            String line = "";
            String cvsSplitBy = ",";

            try {

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

                    // use comma as separator
                data= line.split(cvsSplitBy);




                }

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            System.out.println("Done");
            return data;


        }
Теги:
csv
testng
testng-dataprovider

1 ответ

4

Вы должны прочитать весь файл в поставщике данных и вернуть итератор тестовых примеров. HERE - это некоторый псевдокод для поставщика данных. Обратите внимание, что я использовал List<String []> для хранения тестовых примеров вместо Object [] []. Это позволяет динамически определять тестовые примеры.

    @DataProvider(name = "test")
    public Iterator<Object []> provider( ) throws InterruptedException
    {
        List<Object []> testCases = new ArrayList<>();
        String[] data= null;

        //this loop is pseudo code
        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {
            // use comma as separator
            data= line.split(cvsSplitBy);
            testCases.add(data);
        }

        return testCases.iterator();
    }
  • 0
    Спасибо за ответ, Я не понимаю вашу идею. Можете ли вы внести изменения в мой код и показать.
  • 0
    @ Чувак, я обновил свой ответ. Я подозреваю, что вы упустили тот факт, что TestNg вызывает поставщика данных только один раз, чтобы подготовить различные тестовые случаи для нескольких тестовых прогонов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню