假设我有一个包含以下数据的文本文件
username=testuser
password=testpassword
email=test@test.com
address=testaddress
zipcode=12345
或者我有一个包含以下数据的 XML
<TestData>
<UserInfo>
<username>testuser</username>
<password>testpassword</password>
<email>test@test.com</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 个参数,但测试只能接受 2 个参数” ?
请帮助我。
最佳答案
是的,这是可能的。 您可以创建注释来指定此 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" } };
}
这段代码还没有“生产就绪”,您应该在读取值之前检查注释是否不为空,并且最好将接口(interface)和逻辑移动到另一个类,以便将您的 xml 加载到另一个类,以便您可以在另一个类上重用测试。
关于java - 使用testng中的DataProvider从文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067577/