我有一个testng XML文件,该文件按以下组运行Selenium测试。我想从JSON或其他类型的文件中传递参数名称和值中设置的所有浏览器信息,因此,如果我为其他测试添加配置,则不必保留复制并粘贴它们-因此代码更少。 testng XML文件有可能吗?
谢谢你的帮助。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="2" name="test.java" annotations="JDK" parallel="tests">
<test name="Test - Chrome Vienna">
<parameter name="browser" value="chrome"/>
<parameter name="browserVersion" value="78.0"/>
<parameter name="os" value="OS X"/>
<parameter name="osVersion" value="Mojave"/>
<parameter name="resolution" value="1024x768"/>
<groups>
<run>
<include name="vienna" />
</run>
</groups>
<classes>
<class name="com.bookinggo.ticketed.uiendtoend.TicketedSingleJourneyTest"/>
</classes>
</test>
最佳答案
您可以使用数据提供程序。在您的测试课中注释测试:
@Test(dataProvider="SearchProvider")
这就是您的数据提供者的外观:
@DataProvider(name="SearchProvider")
public Object[][] getDataFromDataprovider(){
return new Object[][]
{
{ "browser", "chrome" },
{ "browserVersion", "78.0" },
{ "os", "OS X" }
};
}
或者,您可以为dataprovider创建一个单独的类,并使用以下命令读取json内容:
@DataProvider
public Object[][] getSearchProvider() throws FileNotFoundException {
JsonElement jsonData = new JsonParser().parse(new FileReader("<json path>"));
JsonElement dataSet = jsonData.getAsJsonObject().get("dataSet");
List<TestData> testData = new Gson().fromJson(dataSet, new TypeToken<List<TestData>>() {
}.getType());
Object[][] returnVal = new Object[testData.size()][1];
int i = 0;
for (Object[] each : returnVal) {
each[0] = testData.get(i++);
}
return returnVal;
}