2013-01-03 65 views
2

我一直在使用TestNG的DataProvider功能編寫測試腳本。到目前爲止,我對我所採用的方式感到滿意,因爲我傳遞的參數數量少於10個,但是我測試的一些新頁面有超過30-35個參數,將這些參數添加到測試方法中它看起來非常醜,所以我開始使用varArgs的Object ...'。設計幫助:testng數據提供者中的散列圖

它是一個動態傳遞參數的好方法,但是使用它們是很困難的,因爲如果必須對很多方法執行這些操作,必須非常小心索引並容易出錯。

我試着將測試數據作爲一個ArrayList>傳遞,其中HashMap是列名稱 - 值對,但TestNG不會接受這個,因爲HashMap不能轉換爲Object []。我想到使用HashMap的原因是因爲你可以查詢一個鍵並獲得它的值,並且鍵知道我。我可以編寫一個通用方法來獲取值並將其分配給代表頁面上字段名稱的變量。

數據源(XLS)只存儲在頁面上輸入的測試數據,因此其純粹是數據驅動的而不是基於關鍵字的。我測試的所有頁面都是數據輸入頁面。

什麼是在測試數據上擁有某種身份的最佳方式,同時也讓TestNG接受它。

在這方面的任何幫助真的很感激。

謝謝 約翰

回答

1

爲什麼不寫自己的轉換功能,它可將映射到一個Object [],然後你就可以傳遞給TestNG的方法?

+0

感謝塞德里克抽出時間擺脫你的繁忙時間表,如果我轉換它,那麼我將失去HashMap的功能,並可能最終做了很多未經檢查的演員。我想到的其他方式是將數據作爲ArrayList >>返回,其中內部數組列表的大小爲1.這樣,它可以讓我將它轉換爲Object []。我現在有點困難,但我會在稍後嘗試。 –

1

爲什麼不使用Map作爲參數傳遞給你的測試方法和甲肝您的數據提供程序返回的參數數組只包括地圖爲每個數據集的:

public class MyTest { 

    @Test(...) 
    public void testThis(Map<String,Object> args) { 
    String arg1 = (String) args1.get("args1"); 
    ... 
    } 

    @Dataprovider(...) 
    public Object[][] dataprovider() { 
    return new Object[][]{ 
     { map("arg1", "foo") }, 
     { map("arg1", "bar", "arg2", new Object() } 
    }; 
    } 

    private Map<String,Object> map(Object... kv) { 
    //helper that creates Map from Array for brevity. 
    } 

} 

這應該通過模擬緩解使用的可變參數其他語言命名參數傳遞。