我可以使用TestNG的@Parameters来读取用户定义的xml而不是testng.xml

时间:2017-07-27 06:30:58

标签: java selenium selenium-webdriver testng

我有很多将在各种@Test方法中使用的测试数据。我计划使用@Parameters为每个@Test方法传递我的测试数据(通常每个测试1-2个参数)。但是各种参考文献都建议@Parameters读取testng.xml中定义的属性。我不想在单个testng XML文件中定义所有属性名称,而是希望拥有单独的XML,以便我也可以组织我的测试数据。 那么有可能这样做吗?还有其他管理测试数据的方法吗? P.S:Excel不是一个选项

2 个答案:

答案 0 :(得分:1)

这可能会对您有所帮助: - 您是否尝试过这种方法?

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

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并在每次测试中使用相同的数据提供者。]

请告诉我这是否对您有所帮助。所以我可以建议你其他解决方案。

答案 1 :(得分:0)

在testng.xml中,您需要添加参数,在值中,您可以使用相关xml文件名称和要在xml中查找的名称的串联。

在BeforeMethod中你将在Object []中得到它,然后你可以创建自己的逻辑来分割值。然后解析XML文件并检索实际数据。解析逻辑将取决于xml的结构,无论如何都可以轻松使用所有Java-XML解析器。

    <parameter name="first" value="dataone-first"></parameter>
    <parameter name="second" value="dataone-second"></parameter
    @Test
    @Parameters({"first","second"})
    public void testMeth(int a, int b){

    }

    @BeforeMethod
    public void befMeth(Object[] params) {

        for(int j=0;j<params.length;j++){
            String xmlData = params[j].toString();
            String actualValue = logicToParseXMLAndGetValue(xmlData)
            params[j] = actualValue;
        }
    }