2016-07-18 16 views
0

データプロバイダからハッシュマップを使用してExcelシートから値を取得しようとしています。現在、Excelシートから行全体を読み取ることができます。 "TestcaseId"、 "Testdata"、 "scriptname"。ここで、データプロバイダのテストメソッドのパラメータとしてスクリプト名を渡す必要があります。これを達成する方法を教えてください。ハローマップを使用したデータプロバイダコードです。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列は3列に含まれます。テストメソッドはscriptnameパラメーターのみ。 – Ak17

+0

以下の答えがあなたの質問に答えるならば、 – virusrocks

答えて

0

データプロバイダメソッドに渡されるテストコンテキストを取得できます。これはTestNGによって内部的に行われます。テストコンテキストから呼び出されたテストの名前を問い合わせることができます。

変更

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

//your regular logic 

} 

にデータプロバイダの署名は、Excelからデータを取得するためにtestContextから取得した名前を使用します。

+0

のようにテストメソッドに渡すことができます。これは私のテストメソッドが@Test(groups = {"回帰"}、dataProvider = "cbndataprovider "、dataProviderClass = dataprovider.cbn_DataProvider.class、priority = 1、enabled = true) \tパブリックvoid GB01_cbn_SearchNoRecords(Map hm) \t {/ * body * /} – Ak17

+0

これは、テスト名をマップに追加し、テストメソッドのマップからテスト名を取得する – virusrocks

0

私が正しく理解していれば、あなたのExcelはScript/ClassNameに対応するデータを持っています。そしてあなたのテストが実行中のテストを直接識別し、それに対応するデータをフェッチできるメカニズムが必要です。 これは簡単なメカニズムで実現できます。 ClassNameがABC.javaであるとします。お使いのExcelシートを1として 、列名「SCRIPTNAME」の下で、あなたのように行を追加することができます。何もすることは

getClass().getSimpleName() 

関数を呼び出して読み取るためにこれをリンクする前に、あなたのクラスABC.javaで、今ABC あなたの優秀さ。 これは、クラス名が一致する "Scriptname"行に対応して格納されている "Testdata"を読み込みます。

関連する問題