web-dev-qa-db-ja.com

@AfterMethodでTestNG / Seleniumからテスト結果のステータスを取得する方法は?

私が行っている研究では、@ AfterMethodからテストメソッド(@Test)を実行した後、結果ステータス(Passed/Failed)をキャプチャする必要があります。

Import org.testng.ITestResultを使用しています。いくつかのオンラインブログに行った後、作業を​​簡単にするための研究の成果として、常に結果が渡されるので、期待どおりに成功しなかったようですアサーションが失敗したとしても

私のコードは次のとおりです:

public class SampleTestForTestProject {
ITestResult result;

@Test(priority = 1)
public void testcase(){

    // intentionally failing the assertion to make the test method fail 
    boolean actual = true;
    boolean expected = false;
    Assert.assertEquals(actual, expected);

}

@AfterMethod
public void afterMethod()  {

    result = Reporter.getCurrentTestResult();

    switch (result.getStatus()) {
    case ITestResult.SUCCESS:
        System.out.println("======PASS=====");
        // my expected functionality here when passed
        break;

    case ITestResult.FAILURE:
        System.out.println("======FAIL=====");
        // my expected functionality here when passed
        break;

    case ITestResult.SKIP:
        System.out.println("======SKIP BLOCKED=====");
        // my expected functionality here when passed
        break;

    default:
        throw new RuntimeException("Invalid status");
    }
  }
}

コンソールの結果:

[TestNG] Running:  C:\Users\USER\AppData\Local\Temp\testng-Eclipse--988445809\testng-customsuite.xml

======PASS=====

FAILED: testcaseFail
Java.lang.AssertionError: expected [false] but found [true]

上記のコードスニペットに示すように、テスト結果を変数に渡してスイッチを通過させ、テストメソッドが失敗したときに「====== FAIL =====」と出力されることを期待しています。

各テストメソッド(@Test)の実行テスト結果をキャッチするために、誰かが親切に私を助けることができますか?私がアプローチした方法が間違っている場合、親切に正しいアプローチへのコードスニペットで私を助けてください。

前もって感謝します

9
hirosht

早くやれよ:

public class stacktest  {


@Test
public void teststackquestion() {

    boolean actual = true;
    boolean expected = false;
   Assert.assertEquals(actual, expected);

}


@AfterMethod
public void afterMethod(ITestResult result)
{
    try
 {
    if(result.getStatus() == ITestResult.SUCCESS)
    {

        //Do something here
        System.out.println("passed **********");
    }

    else if(result.getStatus() == ITestResult.FAILURE)
    {
         //Do something here
        System.out.println("Failed ***********");

    }

     else if(result.getStatus() == ITestResult.SKIP ){

        System.out.println("Skiped***********");

    }
}
   catch(Exception e)
   {
     e.printStackTrace();
   }

}

}

11
noor

TestListenerAdapterには、これらの状況(成功、スキップ、失敗)ごとにメソッドがあります。私の提案は、このような独自のリスナーを作成することです。

public class MyTestResultListener extends TestListenerAdapter {

    @Override
    public void onTestFailure(ITestResult result) {
        // do what you want to do
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        // do what you want to do
    }

   @Override
    public void onTestSkipped(ITestResult result) {
        // do what you want to do
    }
}

次に、リスナーをテストクラスに追加します。

@Listeners(MyTestResultListener.class)
public class MyTest {

// your tests

}
6
David Baak