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

@TestすべてのfromITCaseTwoは後でのみ呼び出す必要があるため、失敗しITCaseOne.afterClass()ます(Seleniumを使用し、1つのケースからのテストで適切なページをチェックする必要があるため)。

私の簡単なクラス:

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

この動作を再現できましたが、これはバグです。調べてみます。それまでの間、2 つの dependsOnGroups のいずれかをコメントアウトすると、正しくない動作が修正されるはずです。

于 2012-03-22T18:09:05.053 に答える
1

基本的に、依存するメソッド要件があります。それらを別々のクラスに保持している場合は、2番目に実行する2番目のクラスの@Testを、最初のクラスのグループの1つに依存させることができます。したがって、@ Test(groups = "std-two"、dependsOnGroups = "logic-one")を維持すると、物事はうまくいくはずです。

于 2012-03-22T13:40:45.133 に答える
1

テストスイートpreserve-order="true"でそれを修正する方法をさらに別の方法で見つけました.

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 に答える