Java 我是否可以使用TestNG中的@Parameters从用户定义的xml而不是TestNG.xml中读取
我有很多测试数据将用于各种@test方法。我计划使用@Parameters通过每个@test方法的测试数据(通常每个测试1-2个参数)。但各种引用建议@Parameters读取testng.xml中定义的属性。我不想在一个testngxml文件中定义所有属性名称,而是希望有单独的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中查找的名称的串联
注意: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();
}
}