在testNG组中运行特定测试

在testNG组中运行特定测试,testng,Testng,我看到我有一个testNG小组,比如 class TestXYZ { @Test(groups = "group1") public void test1() { Assert.assertTrue(true); } @Test(groups = "group1") public void test2() { Assert.assertTrue(false); } } 现在,如果我想运行整个组测试,我可

我看到我有一个testNG小组,比如

class TestXYZ {

    @Test(groups = "group1")
    public void test1() {
        Assert.assertTrue(true);
    }

    @Test(groups = "group1")
    public void test2() {
        Assert.assertTrue(false);
    }   
} 
现在,如果我想运行整个组测试,我可以使用

java-cp testjar.jar org.testng.testng-testjar testjar.jar-group1

(假设testjar.jar是一个胖jar,它将所有testNG和测试类捆绑在一起)


但我不确定如何仅从group1组运行test1。我尝试了-methods选项,但意识到它不适用于组内的方法,无法在线找到任何其他解决方案。

您可以通过将测试分配到不同的组来尝试这种方法吗?比如说,吸烟测试组和功能测试组

class TestXYZ {

    @Test(groups = "group1", "smokeTest")
    public void test1() {
        Assert.assertTrue(true);
    }

    @Test(groups = "group1", "functionTest")
    public void test2() {
        Assert.assertTrue(false);
    }   
} 
那你可以

  • 仅通过运行属于smokeTest的测试运行test1
  • 仅通过运行属于FunctionTest的测试运行test2
  • 通过运行属于组1的测试,运行test1test2

还有其他方法可以使用正则表达式和
xml
配置文件的组合来运行测试

比如说,你有四个测试:

@test(groups={"test1"})
public void testMethodOne() {}

@test(groups={"test11"})
public void testMethodOneOne() {}

@test(groups={"test20"})
public void testMethodTwoZero() {}

@test(groups={"test21"})
public void testMethodTwoOne() {}
xml
配置文件中,您可以编写如下内容:

<run>
    <include name="test1.*"/>
    <exclude name="test2.*"/>
</run>

这个*基本上是一个通配符,所有名称以test1开头的测试都将被执行,而所有名称以test2开头的测试都不会被执行

另一个例子是,如果您使用这个字符串
*test.*
,您基本上是在搜索一个包含这个
test
字符串的测试名称,一些例子如下:

  • 123测试
  • 测试234
  • SSSTESSSSS

这应该比我的第一个建议提供更多的可伸缩性

谢谢,这很有帮助,但随着测试数量的增加,这种标记方式将无法扩展。但很高兴我找到了一些解决办法。现在我接受这个解决办法。我做了进一步的研究,但找不到替代方案。