2014-06-05 67 views
0

比方說,我有以下數據讀取數據

username=testuser 
password=testpassword 
[email protected] 
address=testaddress 
zipcode=12345 

一個文本文件,或者我有一個具有以下數據的XML

<TestData> 
    <UserInfo> 
     <username>testuser</username> 
     <password>testpassword</password> 
     <email>[email protected]</email> 
     <address>testaddress</address> 
    </UserInfo> 
</TestData> 

我有一個測試爲下面

public class DPTest { 

    @Test(dataprovider="testdp") 
    public void userTest_01(String username, String Password) { 

    //Test goes here 

    } 
} 

另一類

public class DPTest2 { 

    @Test(dataprovider="testdp") 
    public void userTest_02(String email, String address, String password) { 

    //Test goes here 

    } 
} 

我的數據提供者可以讀取上述文本文件或XML中的值並將其提供給測試方法嗎?

根據我的理解,數據提供者將讀取文本文件中的所有行並將其提供給測試方法,並拋出一個錯誤,指出「數據提供者試圖提供6個參數,但Test只能接受2個參數「?

請幫幫我。

回答

3

是的,這是可能的「對象[] []」。 您可以創建一個註釋來指定DataProvider應該從XML加載的參數。

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface XmlParameters { 
    String[] value();  
} 

@Test(dataProvider = "XMLFileLoader") 
@XmlParameters({"username", "password"}) 
public void testSomething(String username, String password) { 
    // implementation omitted for brevity 
} 

@DataProvider(name = "XMLFileLoader") 
public static Object[][] getDataFromXmlFile(final Method testMethod) { 
    XmlParameters parameters = testMethod.getAnnotation(XmlParameters.class); 
    String[] fields = parameters.value(); 
    //load just the fields you want 
    return new Object[][] { { "user1", "pass1" } }; 
} 

此代碼是不是「生產做好準備」,你應該檢查是否標註是不讀值之前空,可能是更好的移動界面和邏輯在XML加載到另一個類,所以你可以在其他測試中重用。

0

好友,您正在以錯誤的方式查看數據提供者。請參考testNG文檔。 http://testng.org/doc/documentation-main.html

您的目標可以通過類似下面的代碼來實現。 Test類包含測試方法。它從另一個類TestData內指定的數據提供者獲取數據。在TestData類我們定義方法用於從文件/ XML訪問數據,並將其返回作爲「@dataProvider」方法

public class Test { 
    @Test(dataProvider="testData" dataProviderclass = TestData.class) 
    public void userTest(TestData testData) { 
     //Test code goes here 
    } 
} 

public class TestData { 

    private String username; 
    private String password; 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getUsername() { 
     return username;   
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getPassword() { 
     return password; 
    } 

    @DataProvider(name="testData") 
    public static Object[][] userTestData (TestData testData) {   
     //Code to read from file/xml 
     TestData testData = new TestData(); 
     testData.setUsername("Get from file/xml"); 
     testData.setPassword("Get from file/xml") 

     return new Object{{testData}} 
    } 
} 
+0

我知道我們可以用getters和setters來做幾個字段。但是讓我們說,我有成千上萬的測試數據,並將它們全部放在一個文件中。所以動態地,我的測試用例應該能夠使用來自數據提供者的測試數據。有可能使用「tiagohngl」以上的答案 –