1

我试图以确定的顺序运行测试用例,但没有运气。正如我看到的@AfterClass在另一个测试的方法之后运行注释的方法:

Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNGMapConfigurator@558ee9d6
RUN class com.example.testng.ITCaseOne.beforeClass()
RUN class com.example.testng.ITCaseOne.someCase()
RUN class com.example.testng.ITCaseTwo.beforeClass()
RUN class com.example.testng.ITCaseTwo.someCase()
RUN class com.example.testng.ITCaseOne.anotherCase()
RUN class com.example.testng.ITCaseOne.afterClass()
RUN class com.example.testng.ITCaseTwo.anotherCase()
RUN class com.example.testng.ITCaseTwo.afterClass()
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.25 sec

它失败了,因为 all @TestfromITCaseTwo必须仅在之后调用ITCaseOne.afterClass()(因为我使用 Selenium 并且从一个案例中的测试应该检查适当的页面)。

我的简单课程:

public class ITCaseOne {

    @BeforeClass
    public void beforeClass() {
        System.out.printf("RUN %s.beforeClass()\n", getClass());
    }

    @AfterClass(alwaysRun = true)
    public void afterClass() {
        System.out.printf("RUN %s.afterClass()\n", getClass());
    }

    @Test(groups = "std-one")
    public void someCase() {
        System.out.printf("RUN %s.someCase()\n", getClass());
    }

    @Test(groups = "logic-one", dependsOnGroups = "std-one")
    public void anotherCase() {
        System.out.printf("RUN %s.anotherCase()\n", getClass());
    }

}

public class ITCaseTwo {

    @BeforeClass
    public void beforeClass() {
        System.out.printf("RUN %s.beforeClass()\n", getClass());
    }

    @AfterClass(alwaysRun = true)
    public void afterClass() {
        System.out.printf("RUN %s.afterClass()\n", getClass());
    }

    @Test(groups = "std-two")
    public void someCase() {
        System.out.printf("RUN %s.someCase()\n", getClass());
    }

    @Test(groups = "logic-two", dependsOnGroups = "std-two")
    public void anotherCase() {
        System.out.printf("RUN %s.anotherCase()\n", getClass());
    }

}

如果它很重要,我使用maven-failsafe-plugin2.12 和testng6.4

(顺便说一句,我也尝试使用套件文件,preserve-order="true"但它对我不起作用。)

提前致谢!

4

3 回答 3

2

我能够重现这种行为,这是一个错误。我会调查的。同时,注释掉两个 dependsOnGroups 之一应该可以修复不正确的行为。

于 2012-03-22T18:09:05.053 回答
1

我找到了另一种如何使用测试套件修复它的方法,并且preserve-order="true"(灵感来自当需要从 testng.xml 中的 2 个类运行测试时,为什么 TestNG 从类中随机选择方法?)。

src/test/config/testng.xml使用以下内容创建

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Selenium tests" preserve-order="true">
    <test name="Test #1">
        <classes>
            <class name="com.example.testng.ITCaseOne" />
        </classes>
    </test>
    <test name="Test #2">
        <classes>
            <class name="com.example.testng.ITCaseTwo" />
        </classes>
    </test>
</suite>

处理它maven-failsafe-plugin

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.12</version>
        <configuration>
                <suiteXmlFiles>
                            <suiteXmlFile>${basedir}/src/test/config/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
        </configuration>
</plugin>

现在它按预期工作:

RUN class com.example.testng.ITCaseOne.beforeClass()
RUN class com.example.testng.ITCaseOne.someCase()
RUN class com.example.testng.ITCaseOne.anotherCase()
RUN class com.example.testng.ITCaseOne.afterClass()
RUN class com.example.testng.ITCaseTwo.beforeClass()
RUN class com.example.testng.ITCaseTwo.someCase()
RUN class com.example.testng.ITCaseTwo.anotherCase()
RUN class com.example.testng.ITCaseTwo.afterClass()
于 2012-03-23T12:45:41.770 回答
1

本质上,您有相关的方法要求。如果您将它们保存在单独的类中,那么您可以使您希望第二个执行的第二类的 @Test 依赖于第一类中的一个组。因此,如果您保留 @Test(groups = "std-two", dependsOnGroups = "logic-one"),事情应该会按照您想要的方式进行。

于 2012-03-22T13:40:45.133 回答