Java TestNG :: 如何为我的测试方法提供参数?
Java TestNG :: How are Arguments Suppled to my Test Method?
我很难理解老板分配给我的一些 Java TestNG 代码的执行流程。不幸的是,原作者已不在我公司,所以我只能靠自己了。我已经阅读了一些 TestNG 教程(尤其是 this one),但仍有疑问。
这是代码的测试 class,它从外部文件中了解它对 运行 的测试,运行 测试,然后关闭所有内容:
public class MyTestDriver {
public Object[][] data = null;
@BeforeSuite
public void beforeSuite() {
// open external info file
}
@DataProvider(name = "GetConfigData")
public Object[][] GetSyncConfigData() throws IOException {
try {
// Using external file, gather info about individual tests
// load that info into Object[][] data, I think
} catch (Exception e) {
// log errors
}
return data;
}
}
测试可以是异步测试或同步测试,因此这些情况分别由 subclass 处理。这是异步的 subclass:
public class AsyncAPITest extends MyTestDriver {
@Test(dataProvider = "GetConfigData")
public void asyncTestExecution(String RUN, String TYPE, String ENVIRONMENT, String TESTNAME) throws Exception {
try {
// run tests
} catch (Exception e) {
// log errors
}
}
}
熟悉 Java TestNG 的编码人员会发现注释。
现在,假设我 运行 代码和外部文件指定只有一个异步测试应该是 运行。在那种情况下,我确定代码的执行顺序是:
@BeforeSuite
MyTestDriver.beforeSuite()
@DataProvider(name = "GetConfigData")
MyTestDriver.GetSyncConfigData()
@Test(dataProvider = "GetConfigData")
AsyncAPITest.asyncTestExecution()
但我不明白的是:信息如何从 MyTestDriver.GetSyncConfigData()
传递到 AsyncAPITest.asyncTestExecution()
?如果您查看方法 asyncTestExecution()
,该方法实际上接受了相当多的参数:
public void asyncTestExecution(String RUN, String TYPE, String ENVIRONMENT, String TESTNAME) throws Exception
提供这些参数的是什么?如果我查看 MyTestDriver.GetSyncConfigData()
的代码,我不应该在某处看到类似这样的东西吗:
// data initialized as Object[][]
// data = AsyncAPITest.asyncTestExecution(RUN, TYPE, ENVIRONMENT, TESTNAME);
return data;
我只是不明白 AsyncAPITest.asyncTestExecution()
是如何调用的,或者是什么提供了这些参数。我之所以这么问,主要是因为我想提交更多论据供以后修改。预先感谢您提出任何建议或意见。
数据没有意义。 @DataProvider 提供了@Test 方法的参数。 Dataprovider 的 return 类型是 Object[x][y]。
x 表示参数集。 y 表示参数。
在您的情况下,数据提供者必须 return 为一组 {String 运行、String TYPE、String ENVIRONMENT、String TESTNAME} 设置多个值。 TestNG 读取这些集合并提供@Test,这将是每组参数的 运行 x 次。
怎么样?如果您有兴趣,您应该阅读 testng 代码中的实现,但简单地说,TestNG 使用反射 API 搜索注释,在 运行 时间用 y 个参数创建多个方法 x 次并调用它们。
如果你必须添加一个参数,那么你需要向 y 添加一些东西 - 所以你需要让你的数据提供者 return 它和你的测试方法接受它。
由于您在测试方法的注释中提到了数据提供者的名称,testNG 将扫描任何匹配的数据提供者方法。因此调用了 GetSyncConfigData
数据提供程序方法。现在,数据提供者返回的二维数组中的每个一维数组代表一个测试用例。因此,如果您的数据大小为 Object[3][4]
,则有 3 个测试用例,每个测试用例为您的测试方法提供 4 个参数。
如果找不到匹配的数据提供者或参数 number/type 不匹配,将抛出异常。
More info
我很难理解老板分配给我的一些 Java TestNG 代码的执行流程。不幸的是,原作者已不在我公司,所以我只能靠自己了。我已经阅读了一些 TestNG 教程(尤其是 this one),但仍有疑问。
这是代码的测试 class,它从外部文件中了解它对 运行 的测试,运行 测试,然后关闭所有内容:
public class MyTestDriver {
public Object[][] data = null;
@BeforeSuite
public void beforeSuite() {
// open external info file
}
@DataProvider(name = "GetConfigData")
public Object[][] GetSyncConfigData() throws IOException {
try {
// Using external file, gather info about individual tests
// load that info into Object[][] data, I think
} catch (Exception e) {
// log errors
}
return data;
}
}
测试可以是异步测试或同步测试,因此这些情况分别由 subclass 处理。这是异步的 subclass:
public class AsyncAPITest extends MyTestDriver {
@Test(dataProvider = "GetConfigData")
public void asyncTestExecution(String RUN, String TYPE, String ENVIRONMENT, String TESTNAME) throws Exception {
try {
// run tests
} catch (Exception e) {
// log errors
}
}
}
熟悉 Java TestNG 的编码人员会发现注释。
现在,假设我 运行 代码和外部文件指定只有一个异步测试应该是 运行。在那种情况下,我确定代码的执行顺序是:
@BeforeSuite
MyTestDriver.beforeSuite()
@DataProvider(name = "GetConfigData")
MyTestDriver.GetSyncConfigData()
@Test(dataProvider = "GetConfigData")
AsyncAPITest.asyncTestExecution()
但我不明白的是:信息如何从 MyTestDriver.GetSyncConfigData()
传递到 AsyncAPITest.asyncTestExecution()
?如果您查看方法 asyncTestExecution()
,该方法实际上接受了相当多的参数:
public void asyncTestExecution(String RUN, String TYPE, String ENVIRONMENT, String TESTNAME) throws Exception
提供这些参数的是什么?如果我查看 MyTestDriver.GetSyncConfigData()
的代码,我不应该在某处看到类似这样的东西吗:
// data initialized as Object[][]
// data = AsyncAPITest.asyncTestExecution(RUN, TYPE, ENVIRONMENT, TESTNAME);
return data;
我只是不明白 AsyncAPITest.asyncTestExecution()
是如何调用的,或者是什么提供了这些参数。我之所以这么问,主要是因为我想提交更多论据供以后修改。预先感谢您提出任何建议或意见。
数据没有意义。 @DataProvider 提供了@Test 方法的参数。 Dataprovider 的 return 类型是 Object[x][y]。 x 表示参数集。 y 表示参数。
在您的情况下,数据提供者必须 return 为一组 {String 运行、String TYPE、String ENVIRONMENT、String TESTNAME} 设置多个值。 TestNG 读取这些集合并提供@Test,这将是每组参数的 运行 x 次。
怎么样?如果您有兴趣,您应该阅读 testng 代码中的实现,但简单地说,TestNG 使用反射 API 搜索注释,在 运行 时间用 y 个参数创建多个方法 x 次并调用它们。
如果你必须添加一个参数,那么你需要向 y 添加一些东西 - 所以你需要让你的数据提供者 return 它和你的测试方法接受它。
由于您在测试方法的注释中提到了数据提供者的名称,testNG 将扫描任何匹配的数据提供者方法。因此调用了 GetSyncConfigData
数据提供程序方法。现在,数据提供者返回的二维数组中的每个一维数组代表一个测试用例。因此,如果您的数据大小为 Object[3][4]
,则有 3 个测试用例,每个测试用例为您的测试方法提供 4 个参数。
如果找不到匹配的数据提供者或参数 number/type 不匹配,将抛出异常。
More info