Java 我是否可以使用TestNG中的@Parameters从用户定义的xml而不是TestNG.xml中读取

Java 我是否可以使用TestNG中的@Parameters从用户定义的xml而不是TestNG.xml中读取,java,selenium,selenium-webdriver,testng,Java,Selenium,Selenium Webdriver,Testng,我有很多测试数据将用于各种@test方法。我计划使用@Parameters通过每个@test方法的测试数据(通常每个测试1-2个参数)。但各种引用建议@Parameters读取testng.xml中定义的属性。我不想在一个testngxml文件中定义所有属性名称,而是希望有单独的XML,这样我也可以组织我的测试数据。 那么,有可能这样做吗?管理测试数据的任何其他替代方案? 注意:Excel不是testng.xml中的选项,您需要添加参数,并在值中使用相关xml文件名和要在xml中查找的名称的串联

我有很多测试数据将用于各种@test方法。我计划使用@Parameters通过每个@test方法的测试数据(通常每个测试1-2个参数)。但各种引用建议@Parameters读取testng.xml中定义的属性。我不想在一个testngxml文件中定义所有属性名称,而是希望有单独的XML,这样我也可以组织我的测试数据。 那么,有可能这样做吗?管理测试数据的任何其他替代方案?
注意:Excel不是testng.xml中的选项,您需要添加参数,并在值中使用相关xml文件名和要在xml中查找的名称的串联

在BeforeMethod中,您将在对象[]中获得该值,然后您可以创建自己的逻辑来拆分该值。然后解析XML文件并检索实际数据。解析逻辑将取决于xml的结构,总之,使用所有可用的JavaXML解析器非常容易

    <parameter name="first" value="dataone-first"></parameter>
    <parameter name="second" value="dataone-second"></parameter


这可能会帮助您:-您尝试过这种方法吗

您还可以使用数据提供程序获取测试数据,如下所示:-

public class DataProviderTest {

private static WebDriver driver;

@DataProvider(name = "Authentication")

 public static Object[][] credentials() {

    return new Object[][] { { "a", "a" }, { "b", 
"b" }};

 }

 // Here we are calling the Data Provider object with its Name

 @Test(dataProvider = "Authentication")

 public void test(String sUsername, String sPassword) {

  driver = new FirefoxDriver();

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  driver.get("http://yoursite.com");

  driver.findElement(By.xpath(".//*[@id='account']/a")).click();

  driver.findElement(By.id("log")).sendKeys(sUsername);

  driver.findElement(By.id("pwd")).sendKeys(sPassword);

  driver.findElement(By.id("login")).click();

  driver.findElement(By.xpath(".//*[@id='account_logout']/a")).click();

  driver.quit();

  }

}
[您可以编写读取xml文件的逻辑,并将该数据传递给dataprovider,并在每次测试中使用相同的dataprovider。]


请让我知道这是否对你有帮助。因此,我可以向您推荐其他解决方案。

您可以使用before方法并将对象[]传递给它。Testng将向它注入将要传递给测试的参数。您可以将您的逻辑包含在其中,并覆盖对象[]中的数据。您可以使用xml的名称在testng xml中定义参数的值以查找值,这样逻辑就可以重用。@Grasshopper,这是一种很好的方法。谢谢您能详细说明如何用XML的名称读取参数值吗?我确实考虑过使用DATAv提供程序,但是我的每一个测试都需要一个不同的参数。使用dataProvider,将使用对象[]中的所有元素多次运行每个测试。我的要求是-我想把参数,比如'abc'传递给Test1'efg'传递给Test2等等。每个测试都将通过唯一的数据,并且只运行一次。
public class DataProviderTest {

private static WebDriver driver;

@DataProvider(name = "Authentication")

 public static Object[][] credentials() {

    return new Object[][] { { "a", "a" }, { "b", 
"b" }};

 }

 // Here we are calling the Data Provider object with its Name

 @Test(dataProvider = "Authentication")

 public void test(String sUsername, String sPassword) {

  driver = new FirefoxDriver();

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  driver.get("http://yoursite.com");

  driver.findElement(By.xpath(".//*[@id='account']/a")).click();

  driver.findElement(By.id("log")).sendKeys(sUsername);

  driver.findElement(By.id("pwd")).sendKeys(sPassword);

  driver.findElement(By.id("login")).click();

  driver.findElement(By.xpath(".//*[@id='account_logout']/a")).click();

  driver.quit();

  }

}