Java 通过修改全局变量在循环中运行testng

Java 通过修改全局变量在循环中运行testng,java,automation,testng,Java,Automation,Testng,我有一个TestNG程序,它从命令行获取某些参数作为参数。TestNG是通过编程方式调用的。其中一个参数是“locale”,它表示US或DE或ES等。如果我指定US,它将执行运行程序为US locale指定的测试用例。如果我分别指定“US,DE”,它将为US和DE运行。如果我指定“ALL”,它将为枚举中提供的所有可用区域设置运行 基本上我是如何编码的: foreach locale set global locale variable to locale testng.run() en

我有一个TestNG程序,它从命令行获取某些参数作为参数。TestNG是通过编程方式调用的。其中一个参数是“locale”,它表示US或DE或ES等。如果我指定US,它将执行运行程序为US locale指定的测试用例。如果我分别指定“US,DE”,它将为US和DE运行。如果我指定“ALL”,它将为枚举中提供的所有可用区域设置运行

基本上我是如何编码的:

foreach locale 
  set global locale variable to locale
  testng.run()
endfor

这很好,但问题是每次在for循环中执行testng.run时,它都会创建多个testng报告。有没有办法修改它,使其作为一个大的测试套件执行和报告,即一个合并报告?

我不确定这是否能满足您的要求,但TestNG有一个称为数据提供程序的功能。首先定义一个数据提供程序方法:

@DataProvider(name="locale")
public Object[] createData() {
    return new Object[] {"US", "DE", "ES"};
}
然后,您可以在测试方法中引用数据提供程序,接受其数据作为参数:

@Test(dataProvider="locale")
public void doTest(String locale) {
    ...
}
测试方法将针对数据提供程序提供的每个项目运行一次。我只在JUnit中使用了类似的特性,所以我不知道TestNG如何呈现单独的运行。在JUnit的Eclipse插件中,您可以在测试结果树视图中获得一个附加级别


数据提供程序方法可以生成二维数组,以同时提供多个参数。有关详细信息,请参阅。

谢谢!这很有效。这给了我一个未来的方向。