Java 在testng中使用DataProvider从文件读取数据
假设我有一个包含以下数据的文本文件Java 在testng中使用DataProvider从文件读取数据,java,selenium,selenium-webdriver,testng,Java,Selenium,Selenium Webdriver,Testng,假设我有一个包含以下数据的文本文件 username=testuser password=testpassword email=test@test.com address=testaddress zipcode=12345 <TestData> <UserInfo> <username>testuser</username> <password>testpassword</password>
username=testuser
password=testpassword
email=test@test.com
address=testaddress
zipcode=12345
<TestData>
<UserInfo>
<username>testuser</username>
<password>testpassword</password>
<email>test@test.com</email>
<address>testaddress</address>
</UserInfo>
</TestData>
或者我有一个包含以下数据的XML
username=testuser
password=testpassword
email=test@test.com
address=testaddress
zipcode=12345
<TestData>
<UserInfo>
<username>testuser</username>
<password>testpassword</password>
<email>test@test.com</email>
<address>testaddress</address>
</UserInfo>
</TestData>
另一类
public class DPTest2 {
@Test(dataprovider="testdp")
public void userTest_02(String email, String address, String password) {
//Test goes here
}
}
我的数据提供者能否从上述文本文件或XML中读取值并将其提供给测试方法
据我所知,数据提供程序将读取文本文件中的所有行,并将其提供给测试方法,并抛出一个错误,说明“数据提供程序试图提供6个参数,但测试只能接受2个参数”
请帮帮我。伙计,你看数据提供者的方式不对。请参阅testNG文档 您的目标可以通过下面的代码来实现<代码>测试类包含测试方法。它从另一个类
TestData
中指定的数据提供程序获取数据。在TestData
类中,我们定义了从文件/xml访问数据的方法,并将其作为“@DataProvider”方法中的“Object[][]”返回
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}}
}
}
伙计,你看数据提供者的方式不对。请参阅testNG文档 您的目标可以通过下面的代码来实现<代码>测试类包含测试方法。它从另一个类
TestData
中指定的数据提供程序获取数据。在TestData
类中,我们定义了从文件/xml访问数据的方法,并将其作为“@DataProvider”方法中的“Object[][]”返回
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}}
}
}
是的,那是可能的。
您可以创建注释来指定此数据提供程序应从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加载的参数
@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" } };
}
这段代码不是“生产准备就绪”,在读取值之前,您应该检查注释是否不为null,并且最好将接口和逻辑移动到另一个类,以便您可以在其他测试中重用。我知道我们可以使用两个字段的getter和setter来完成。但假设我有数千个测试数据,它们都在一个文件中。因此,动态地,我的测试用例应该能够使用来自数据提供者的测试数据。可以使用上面“tiagohngl”中的答案,我知道我们可以使用几个字段的getter和setter。但假设我有数千个测试数据,它们都在一个文件中。因此,动态地,我的测试用例应该能够使用来自数据提供者的测试数据。可以使用上面“tiagohngl”的答案