【问题标题】:How to run multiple combinations of groups in a single TestNG test如何在单个 TestNG 测试中运行多个组组合
【发布时间】:2017-10-26 13:00:21
【问题描述】:

我需要在单个测试中执行所有 3 个类,并满足以下要求:

  1. 仅执行 Class1 中的 test1 和 test3。
  2. 仅从 Class2 执行 test2。
  3. 执行 Class3 中的所有测试。

    public class Class1
    {
    @Test(groups={"test1"})
    public void test1()
    {
    system.out.println("test1");
    }
    @Test(groups={"test2"})
    public void test2()
    {
    system.out.println("test2");
    }
    @Test(groups={"test3"})
    public void test3()
    {
    system.out.println("test3");
    }
    }
    

2 级

    public class Class2
    {
    @Test(groups={"test1"})
    public void test_1()
    {
    system.out.println("test1");
    }
    @Test(groups={"test2"})
    public void test_2()
    {
    system.out.println("test2");
    }
    @Test(groups={"test3"})
    public void test_3()
    {
    system.out.println("test3");
    }
    }

第 3 类

    public class Class3
    {
    @Test(alwaysrun="true")
    public void test()
    {
    system.out.println("test");
    }
    }

为此,我使用了以下 testNg xml,但无论我是否包含该组,都会执行 Class 1 和 Class 3 中的所有测试。

    <test name="Testcase">
    <classes>
        <groups>
            <run>
                <include name="test1" />
                <exclude name="test2" />
                <include name="test3" />
                    <class name="Class1" />
            </run>
        </groups>
        <groups>
            <run>
                <exclude name="test1" />
                <include name="test2" />
                <exclude name="test3" />
                    <class name="Class2" />
            </run>
        </groups>
        <groups>
            <run>
            </run>
            <class name="Class3" />
        </groups>       
    </classes>
    </test>

如果我希望执行上述类文件,请建议 TestNg xml 文件的正确语法。

【问题讨论】:

    标签: selenium selenium-webdriver testng


    【解决方案1】:

    您的 XML 文件包含问题:class 不应属于 groups 并且组不属于 classes

    您的代码也存在编译问题。最简单的解决方案是注释测试或测试类(您可以将整个类注释为 Test 并提供组名),然后仅运行该特定组。

    例子:

    1 类

    public class Class1
    {
        @Test(groups={"smoke"})
        public void test1(){
            System.out.println("test1");
        }
    
        @Test(groups={"func"})
        public void test2(){
            System.out.println("test2");
        }
    
        @Test(groups={"smoke"})
        public void test3(){
            System.out.println("test3");
        }
    }
    

    2 类

    public class Class2
    {
        @Test(groups={"func"})
        public void test_1(){
            System.out.println("test1");
        }
        @Test(groups={"smoke"})
        public void test_2(){
            System.out.println("test2");
        }
        @Test(groups={"func"})
        public void test_3(){
            System.out.println("test3");
        }
    }
    

    3 级

    @Test(groups = {"smoke"})
    public class Class3
    {
        @Test(alwaysRun=true)
        public void test(){
            System.out.println("test");
        }
    }
    

    testng.xml

    <suite name="Regression" >
    
    <test name="Test1">
        <groups>
            <run>
                <include name="smoke"/>
            </run>
        </groups>
        <classes>
            <class name="Class1"/>
            <class name="Class2"/>
            <class name="Class3"/>
        </classes>
    </test>
    </suite>
    

    【讨论】:

    • 感谢您的回复,但正如您所建议的那样,如果我需要从两个类执行不同的测试组合,我每次都必须更改我的类文件。我希望创建一个测试套件,我可以在其中运行任何测试组合。这就是为什么我给每个测试一个唯一的组名。有可能吗?
    • 如果您为每个测试指定唯一的组名,则根据定义,它不是一个组。你可以只在testng.xml 文件中使用includeexclude 方法。 google.pl/…
    • 但如果我需要运行不同的测试组合,我将不得不在我的类文件中进行更改。这就是为什么我想找到一种解决方案来从 xml 本身控制它。你能建议这些是否有可能吗?
    • 是的。在 xml 中使用测试方法和类而不是组。检查 testng 文档。
    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多