我已经能够通过将测试值硬编码到DataProvider中来进行数据驱动的测试:
@DataProvider(name = "XXXData")
public Object[][] createXXXData() {
// Our test values here are hard-coded, which is OK
// You could also, say, read an Excel file and create the parameter sets on the fly
// The three values are: string to use, expected alphabetic, expected numeric count
return new Object[][] {
{ "a1a", 2, 1},
{ "b2", 1, 2}, // Wrong num count - will fail
{ "cc333", 2, 3},
{ "d44dd44", 3, 4},
{ "eeee55555", 5, 5}, // Wrong alpha count - will fail
{ "ffff", 4, 0},
{ "000", 0, 3},
};
我想尝试使用testng.xml做同样的事情。 (我的一些同事对将测试数据放在与代码不同的文件中存在偏见。)
我能够执行一个数据集,如下所示。但是,我在网上看到的很多例子中没有一个具有多个值,与上面所示的相似。
testng.xml不支持吗?
<?xml version="1.0" encoding="UTF-8"?>
<suite name="ParameterExampleSuite" parallel="false">
<test name="ParameterTest">
<classes>
<parameter name="message" value="a1a"></parameter>
<parameter name="alphaCount" value="2"></parameter>
<parameter name="numericCount" value="1"></parameter>
<class name="com.Acme.Business.Safes.XXX.XXXTest"/>
</classes>
</test>
</suite>
我知道我可以在createXXXData()中编写代码来读取外部文件并根据它创建数据集。 这都是使用IntelliJ。 这个问题类似于TestNG DataProvider reading test data from the testng.xml config file?。但是,那里的答案似乎与用例不匹配。当然,答案并不比在程序本身中读取Excel或xml文件更方便。
答案 0 :(得分:1)
您必须定义多个测试,而不是在classes标记中定义params。 (我仍然相信你应该将数据放在外部文件中,然后在xml中执行此操作)
<test name="Automation Test Results" >
<parameter name="name" value="NV"></parameter>
<classes>
<class name="framework.tests.TestParams">
<methods><include name="test1"></include></methods>
</class>
</classes>
</test>
<test name="Automation Test Results2" >
<parameter name="name" value="NV1"></parameter>
<classes>
<class name="framework.tests.TestParams">
<methods><include name="test2"></include></methods>
</class>
</classes>
</test>
答案 1 :(得分:0)
您可以在其他类上使用静态方法,并在测试中使用 dataProviderClass 。所有数据都将放在一个单独的文件中。