2016-07-18 3 views
0

해시 맵이있는 데이터 공급자를 사용하여 Excel 시트에서 값을 가져 오려고합니다. 이제 Excel 시트에서 전체 행을 읽을 수 있습니다. Excel 시트에 3 열 "TestcaseId", "Testdata", "scriptname". 여기에 데이터 공급자의 테스트 메서드에 매개 변수로 스크립트 이름을 전달해야합니다.이 방법을 수행하는 데 도움을주십시오. 아래 그림은 hashmap을 사용하는 dataprovider 코드입니다.dataprovider에서 매개 변수를 전달하는 방법 테스트 메서드

@DataProvider(name="cbndataprovider") 
    public static Iterator<Object[]> cbntestdata() throws IOException 
    { 
     List <Object[]> alist = new ArrayList<Object[]>(); 
     OriginalExcelRW Excel = new OriginalExcelRW("F:\\anand_acer\\selenium\\cbnindia1\\Test_Data_Sheet.xlsx"); 
     XSSFSheet s = Excel.Setsheet("Test_Data"); 
     int rowcount = s.getLastRowNum(); 
     for(int i =1;i<=rowcount;i++) 
     { 
     Object[] obj = new Object[1]; 

     Map<String,String>hm=new HashMap<String,String>(); 

     hm.put(Excel.Readvalue(s, 0, 0), Excel.Readvalue(s, i, 0)); 
     hm.put(Excel.Readvalue(s, 0, 1), Excel.Readvalue(s, i, 1)); 
     hm.put(Excel.Readvalue(s, 0, 2), Excel.Readvalue(s, i, 2)); 
     hm.put(Excel.Readvalue(s, 0, 3), Excel.Readvalue(s, i, 3)); 

     System.out.println(Excel.Readvalue(s, 0, 0)+"...."+ Excel.Readvalue(s, i, 0)); 
     System.out.println(Excel.Readvalue(s, 0, 1)+"...."+ Excel.Readvalue(s, i, 1)); 
     System.out.println(Excel.Readvalue(s, 0, 2)+"...."+ Excel.Readvalue(s, i, 2)); 
     System.out.println(Excel.Readvalue(s, 0, 3)+"...."+ Excel.Readvalue(s, i, 3)); 

     obj[0]=hm; 
     alist.add(obj); 

     } 
     return alist.iterator(); 
     } 
    } 
+0

스크립트 이름은 무엇입니까? 테스트 메소드에 3 열 + 스크립트 이름을 전달 하시겠습니까? – CARE

+0

데이터 공급자의 모든 3 열을 전달하지만 행 선택은 dataprovider에서 테스트 메서드로 전달한 scriptname을 기반으로 수행되며 scriptname 열은 3 열에 포함됩니다. 테스트 메서드는 scriptname 매개 변수 만 – Ak17

+0

아래 질문에 대한 대답이있는 경우 – virusrocks

답변

0

데이터 공급자 메서드에 전달 된 테스트 컨텍스트를 가져올 수 있습니다. 이 작업은 TestNG에서 내부적으로 수행됩니다. 테스트 컨텍스트에서 호출 한 테스트의 이름을 쿼리 할 수 ​​있습니다.

변경

public static Iterator<Object[]> cbntestdata(ITestNGMethod testContext) throws IOException 
{ 
String testName = testContext.getMethodName(); 

//your regular logic 

} 

에 데이터 공급자의 서명은 엑셀에서 데이터를 얻을 수 testContext에서 얻은 이름을 사용합니다.

+0

테스트 메소드에 어떻게 전달할 수 있습니까? 이것은 내 테스트 메소드가 @Test (groups = { "Regression"}, dataProvider = "cbndataprovider "dataProviderClass = dataprovider.cbn_DataProvider.class, 우선 순위 = 1, = 실제 사용 가능) \t 공공 무효 GB01_cbn_SearchNoRecords (지도 <문자열, 문자열> HM) \t {/ * 몸 * /} – Ak17

+0

당신은 할 만 할 수있는 추가하여 지도에서 이름을 테스트하고 테스트 메소드에서지도에서 테스트 이름을 다시 가져옵니다. – virusrocks

0

정확하게 이해하면 Excel에는 Script/ClassName에 해당하는 데이터가 있으며 테스트를 통해 실행중인 테스트를 직접 식별하고 그에 상응하는 데이터를 가져올 수있는 메커니즘이 필요합니다. 간단한 메커니즘을 통해이를 수행 할 수 있습니다. ClassName이 ABC.java라고 가정합니다. 전화 아무것도하기 전에, 클래스 ABC.java에 지금 ABC 기능

getClass().getSimpleName() 

을 읽기 위해이 연결 : 당신의 엑셀 시트 당으로, 열 이름 "SCRIPTNAME"아래 , 당신은 같은 행을 추가 할 수 있습니다 네 엑셀. 그러면 "classname"이 일치하는 "Scriptname"행에 해당하는 "Testdata"가 읽혀집니다.

관련 문제