TestNG DataProvider是否可以从testng.xml配置文件中读取测试数据?或者出于某种原因这是不现实的?我希望能够在套件级别和类级别读取该文件中的测试数据. 所以,给定一个像这样的testing
所以,给定一个像这样的testing.xml文件(我不确定是否现实),我该怎么做?我之前使用XStream(或Jackson)编写了一个DataProvider,所以我非常精通我自己的自定义.xml格式,但是我坚持使用strict.xml的严格格式.
以下testing.xml显然无效,但我只是想表明我想做的事情:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="TestAll"> <parameter name="hubUrl" value="http://localhost:4444/wd/hub"/> <parameter name="reportFile" value="CustomReport.html"/> <test name="etsy"> <parameter name="reportFile" value="CustomReport.html"/> <classes> <class name="qa.examples.suite.TestSearch"> <parameter name="appUrl" value="http://etsy.com" type="java.lang.String"/> <parameter name="browser" value="Firefox" type="java.lang.String"/> <parameter name="testEnabled" value="true" type="java.lang.Boolean"/> <methods> <include name="testEtsySearch"/> <tests> <test> <parameter name="testNum" value="1" type="java.lang.Integer"/> <parameter name="searchTerm" value="cell phone" type="java.lang.String"/> <parameter name="searchTerm" value="batteries" type="java.lang.String"/> </test> <test> <parameter name="testNum" value="2" type="java.lang.Integer"/> <parameter name="searchTerm" value="buttons" type="java.lang.String"/> <parameter name="searchTerm" value="metal" type="java.lang.String"/> </test> </tests> </include> </methods> </class> <class name="qa.examples.suite.TestFilters" /> </classes> </test> </suite>
那么,这样的事情可能吗?如果是这样,你会怎么做?
尝试将ITestContext作为数据提供程序参数传递.就像是:
@DataProvider(name = "DataProvider") public static Object[][] Provider(ITestContext context) throws Exception { String dataFile = context.getCurrentXmlTest().getParameter("dataFile"); }
套房xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="suite"> <parameter name="param1" value="val1"/> <test name="test"> <parameter name="param2" value="val2"/> <classes> <class name="test.TestClass1" /> </classes> </test> </suite>
考试班
package test; import java.util.Map; import org.testng.ITestContext; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestClass1 { @DataProvider(name="Provider") public Object[][] provider(ITestContext context) { Map<String, String> testParams = context.getCurrentXmlTest().getLocalParameters(); Map<String, String> suiteParams=context.getCurrentXmlTest().getSuite().getParameters(); return new Object[][]{{suiteParams.get("param1"), testParams.get("param2")}}; } @Test(dataProvider="Provider") public void test1(String param1, String param2) { System.out.println("Param1: " + param1); System.out.println("Param2: " + param2); }
}
产量
[TestNG] Running: /home/nightmare/workspace/test/suite.xml Param1: val1 Param2: val2 =============================================== suite Total tests run: 1, Failures: 0, Skips: 0 ===============================================