在命令行中指定的包中运行所有TestNG测试

时间:2016-10-31 16:26:53

标签: java command-line package testng

使用以下XML文件,我可以在some.package.login Java包中运行所有测试。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Login">
  <test name="Login">
    <packages>
      <package name="some.package.login"/>
    </packages>
  </test>
</suite>

我想从命令行运行TestNG,它与上面的XML文件相同但没有XML文件。 (这个question询问如何运行XML文件。)我知道-suitename参数。我只是不知道如何限制特定包的执行。

我尝试了-testclass some.package.login.*,但TestNG将此视为一个类的名称而不处理外卡。

我可以使用-groups,然后在所有测试中使用@Test(groups = "Login"),但我宁愿不必这样做。

我正在寻找一种解决方案,它比为我想要运行的每个测试子集创建XML文件更容易。为每个子集编写一个类并不比编写XML文件容易。

如果无法做到这一点,我已经提交了TestNG enhancement request

2 个答案:

答案 0 :(得分:1)

您将能够使用a method interceptor过滤测试。

fun x => let y = x in y

我让你完成匹配的逻辑。 然后,只需在命令行中添加一个环境变量,如:

public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
  List<IMethodInstance> result = new ArrayList<IMethodInstance>();
  for (IMethodInstance m : methods) {
    String expectedPackage = System.getProperty("package");
    Package p = m.getInstance().getClass().getPackage();
    if (p matches expectedPackage) {
      result.add(m);
    }
  }
  return result;
}

答案 1 :(得分:0)

可以通过工厂(在CLI中使用-testrunfactory)完成,但需要一些额外的重构。或者只需在包中指定xml并使用-xmlpathinjar。您还可以在项目构建阶段动态创建xml。