2017-01-23 45 views
0

嗨我正在嘗試使用Java驅動數據。我讀取excel並將值傳遞給變量「test2」和「test 3」以進行測試。另外,我需要一個更多的參數「test1」,我從testing.xml發送。現在下面測試執行拋出我一個錯誤我們如何將參數和數據提供程序傳遞給Testng中的相同方法

org.testng.TestNGException: 數據提供者試圖通過2個參數,但該方法com.xxxxx.xxx需要3和TestNG是無法在注入合適的對象

那麼如何將參數和數據提供者傳遞給相同的方法。由於

/* testdataprovider will return the test2 and test3 parameter value */ 
@Parameters("test1") 
@Test(dataProvider = "testdataprovider") 
public void testMethod(String test1, String test2, String test3){} 

回答

1

我可能是可怕的錯誤(如果我是,我敢肯定,別人會給你一個更好的解決方案);但我不認爲你可以使用testNG Guruswamy實現你的目標。 我剛剛測試了使用這種數據提供程序

@DataProvider(name = "login8users") 
    public Object[][] login8usersForStackOverflow() { 
     return new Object[][] { 
     { "[email protected]", "pass" }, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"},  
     }; 
    } 

而且路過一個叫瀏覽器從XML文件參數的嘗試。我注意到,當您在相同的@Test註釋下使用dataProvider和參數時;不管你是否會得到上面給出的錯誤,或者XML參數將被完全忽略(似乎dataProvider取代它們)。 然後這裏是測試方法:

@Test(dataProvider="login8users") 
@Parameters({"browser"}) 
public void login8(String dataProvider1, String dataProvider2) {   

      System.out.println("Email from data provider is..: "+dataProvider1); 
      System.out.println("Pass from data provider is..: "+dataProvider2);  

     } 

這裏是輸出:

[TestNG] Running: 
    C:\projects\test\currentTest.xml  

Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 

=============================================== 
Regression 
Total tests run: 8, Failures: 0, Skips: 0 
=============================================== 

因此,你需要尋找替代的解決方案。其中一個可能是加載參數,(甚至可能在@BeforeClass中)將參數作爲全局變量傳遞給您的測試,以便您可以訪問它。所以這樣的解決方案如下:

public static String globalVarScope; 


     @BeforeClass 
     @Parameters({"xmlParam"}) 
     public void initialSetup(String xmlParam) { 

      System.out.println("Parameter from XML is..: "+xmlParam); 
      globalVarScope= xmlParam; 
     } 


     @Test   
     public void useMeAnywhere() {   

      System.out.println("Hey, I passed the param earlier and I can use it anywhere now :) ..: "+globalVarScope);  
     }  


     @Test(dataProvider="login8users") 
     @Parameters({"browser"}) 
     public void login8(String dataProvider1, String dataProvider2) {  

      System.out.println("Email from data provider is..: "+dataProvider1); 
      System.out.println("Pass from data provider is..: "+dataProvider2);  
     } 

所以希望現在你可以實現你想要的結果,讓我知道如果你卡住了。以下是分別運行參數後的最終輸出:

[TestNG] Running: 
     C:\projects\test\currentTest.xml 

    Browser is..: ***chrome*** 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 
    Email from data provider is..: [email protected] 
    Pass from data provider is..: pass 

    =============================================== 
    Regression 
    Total tests run: 9, Failures: 0, Skips: 0 
    =============================================== 

祝您好運!

+0

謝謝Xwris它幫助... –

+0

沒問題Guruswamy,如果我對你有任何幫助,這是一種樂趣。如果您也可以提出答案(請點擊答案旁邊的向上箭頭),將不勝感激?只是爲了獲得這種道德上的滿足感 - 事先要感謝! :) –