java - 使用testng中的DataProvider从文件中读取数据

标签 java selenium selenium-webdriver testng

假设我有一个包含以下数据的文本文件

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/

相关文章:

java.lang.RuntimeException : ERROR: Failed to recover corrupt cache entry 错误

java - GridBagLayout对齐

javascript - 如何在 executeScript 方法中显示带有变量的 javascript 代码?

python-2.7 - Selenium Python 运行多个测试用例如何登录一次并使用相同的实例浏览器

python - 当第一个链接旁边包含特定关键字时无法获取第二个链接

java - 让 Selenium 暂停 X 秒

java - 单击选定的复选框

java - 在 Java 中使用 PriorityQueue 的第 k 个最小数的时间复杂度

java - 可以合并 Java 枚举(如 C# 中的按位)吗?

java - Selenium 3 : Switching between the tabs