2014-09-25 6 views
1

csv 파일에서 데이터를 읽는 중이므로이 데이터를 입력으로 사용할 테스트가 있습니다. 모든 값 집합에 대해 테스크 케이스로 실행하고 싶습니다. 데이터 공급자 문제가 를 사용하고 그것을 위해, 그것은 데이터의 마지막 세트 행을 취하고,csv 파일에서 testng의 데이터 공급자에게 매개 변수를 전달하는 방법

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

은 단지 마지막 행 NAME3의 ID3 텍스트 3을 복용 한 번만 테스트를 실행하는 코드를 디버깅에서 저를 도와주세요 세 번이나.

@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; 


     } 

답변

4

데이터 공급자에서 전체 파일을 읽고 테스트 사례의 반복자를 반환해야합니다. HEre는 데이터 제공자를위한 의사 코드입니다. Object [] [] 대신에 테스트 케이스를 저장하기 위해 List<String []>을 사용했습니다. 이를 통해 테스트 케이스를 동적으로 정의 할 수 있습니다.

@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

답장을 보내 주셔서 감사합니다. 내 코드를 변경하고 표시 할 수 있습니까? – Dude

+0

@Dude 내 대답을 업데이트했습니다. 필자는 TestNg가 여러 번의 테스트 실행을 위해 다양한 테스트 케이스를 준비하기 위해 한 번만 데이터 제공 업체를 호출한다는 사실을 놓쳤다 고 생각합니다. – luboskrnac