有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

使用以下XML文件,我可以运行some.package.loginJava包中的所有测试

<?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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    您将能够使用a method interceptor筛选测试

    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;
    }
    

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

    java -Dpackage="myPackage" -jar ....