2017-07-18 10 views
3
<?xml version="1.0" encoding="UTF-8"?> 
<suite name="Suite" parallel="tests" configfailurepolicy="continue" thread-count = "10" verbose="1"> 
<parameter name="dev" value="true"></parameter> 
    <test name ="Chrome" parallel="methods"> 
     <parameter name="myBrowser" value="chrome" /> 
      <classes> 
       <class name="package.TestClass"></class> 
       </classes> 
      </test> 

      <test name ="Firefox" parallel="methods"> 
     <parameter name="myBrowser" value="firefox" /> 
      <classes> 
       <class name="package.TestClass"></class> 
       </classes> 
      </test> 
</suite> 

この「.xml」ファイルでは、「dev」という名前のパラメータがtrueに設定されています。私は、dataprovidersにこの変数を読み込ませ、別のExcelシートを使用するようにしています。TestNG DataProvidersで引数が間違っています

@Parameters("dev") 
@DataProvider(parallel = true) 
public Object[][] testData(String dev) { 
    String path; 
    if(dev.equals(true)){ 
     path = System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx"; 
    } 
    else{ 
     path = System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx"; 
    } 
    ExcelReader reader = new ExcelReader(path); 
    Object[][] obj = new Object[reader.getSheetRows("url")][reader.getSheetColumns("url")]; //four test, one argument 
    for(int i = 0; i < reader.getSheetRows("url"); i++){ 
     for(int j = 0; j < reader.getSheetColumns("url"); j++){ 
      obj[i][j] = reader.getCellData("url", j, i); 
     } 
    } 

    return obj; 
} 

問題は方法は、私が

@Test (dataProvider="testData") 
public void test1(String url) 
{} 

java.lang.IllegalArgumentExceptionが引数の数が誤って渡していますと言っているということです。引数の数が間違っは

+0

をあなたは完全なスタックトレースを共有してもらえますか? – juherr

答えて

2

@DataProviderアノテーション付きデータプロバイダAFAIKは、@Parameters注釈でパラメータを読み取ることができません。

代わりに、以下のようにそれをやっている必要があります。

@DataProvider(parallel = true) 
public Object[][] testData(ITestContext context) { 
    //Here We are trying to read the value of 
    // <parameter name="dev" value="true"/> 
    //from the suite xml file. 
    String dev = context.getCurrentXmlTest().getAllParameters().get("dev"); 
    String path; 
    if (dev.equals("true")) { 
     path = System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx"; 
    } else { 
     path = System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx"; 
    } 
    //Rest of the data provider code goes here. 
    return new Object[][] {{}}; 
} 
+0

すばらしい解決策!私は回避策の実装を終了しました。 2つのxlsxファイルを作成する代わりに、代わりに2つの.xmlファイル(devおよびqa)があり、パラメータによってxlsxファイルに書き込まれるURLが決まります。これにより、開発者は、2つの同様のxlsxファイルを維持する必要はなく、2番目のxmlを介して独自のテストセットアップを設定することができます。私はバックアップとしてこの解決策を維持します。ありがとうございました。 – atg

1

は1つだけを持っている必要がありますドキュメント内の列。

+0

Excel文書には1つの列しかありません – atg

+0

本当ですか?編集すると列が作成されます。あなたもいくつかの列の変更。私は両方の場所で 'reader.getSheetColumns(" url ")'を '1'で置き換えることをお勧めします。 – talex

+0

Object [] [] obj = new Object [1] [1]; return obj;動作しますが、私がdevパラメータを使用しようとすると失敗します。 – atg

関連する問題