1

アサーションが失敗した場合、TestNGでテストの実行を続行するにはどうすればよいですか?TestNGのHTMLレポートで失敗を報告するにはどうすればよいですか?

次のコードを実行すると、アサーション後の行が実行されますが、レポートにはアサーションの失敗がリストされていません。

@Test
public void googleSearch(){
    driver.get("http://www.google.co.in/");
    System.out.println(" ---------- Start -------------");

    try {
        Assert.assertTrue(driver.findElement(By.xpath("xyz")).isDisplayed(), "unable to find the link");
    } catch (Throwable t) {
        System.out.println("Error");
    }
    System.out.println(" ---------- End -------------");
}
4

6 に答える 6

1

AssertionError をキャッチすると、TestNG はそれを認識できません。

于 2013-03-11T16:27:17.277 に答える
1

失敗した後にテストを続行することはベスト プラクティスではありません。ものには after*Methods() を使用します。

ただし、特にテスト (構成) の開始と終了のロギングについては、テスト クラスではまったく行わないでください。リスナーを作成し、リスナーからロギングを行います。

TestListenerAdapter を拡張し、それが指示するすべてのメソッドを実装できます。

http://testng.org/javadoc/org/testng/TestListenerAdapter.html

public class YourTestResultMonitor extends TestListenerAdapter {
    *snip*
}
于 2015-06-19T18:52:14.227 に答える
0

テスト設計では、アサーション エラーをキャッチするよりも、失敗した後にテストを続行する必要がないようにすることをお勧めします。

  • テストで使用されるリソースを閉じる、切断する、または解放する必要がある場合は、@AfterMethod で行います。
  • 複数の独立したものをテストし、どれが成功し、どれが失敗するかを検証したい場合は、それらを別々のテストに入れます。同様の設定を共有する複数のテストがある場合 (アプリケーションの特定のポイントに移動するなど)、設定を @BeforeMethod に移動します。
  • 相互に依存する複数の条件をテストしている場合、最初の失敗が発生するとすぐにテストを終了する必要があります。依存関係があるため、それ以外の場合は、後のアサートで偽陰性が表示される可能性があります。

あなたの例では:

@BeforeMethod
public void openPage() {
    driver.get("http://www.google.co.in/");
    System.out.println(" ---------- Start -------------");
}

@Test
public void googleSearchThis(){
    Assert.assertTrue(driver.findElement(By.xpath("xyz")).isDisplayed(), "unable to find the link");
}

@Test
public void googleSearchThat(){
    // assert for other things you want to test on the same page
}

@AfterMethod
public void closePage() {
    System.out.println(" ---------- End -------------");
}
于 2013-03-21T16:08:50.227 に答える