2012-01-20 11 views
3

に失敗スクリーンショットを含めることができ、現在、私は私のテストの失敗のスクリーンショットをこのように取っています:はどのように私はTestNGのレポート

@AfterMethod(alwaysRun=true) 
public void catchExceptions(ITestResult result){ 
    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss"); 
    String methodName = result.getName(); 
    if(!result.isSuccess()){ 
     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     try { 
      FileUtils.copyFile(scrFile, new File((String) PathConverter.convert("failure_screenshots/"+methodName+"_"+formater.format(calendar.getTime())+".png"))); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 

私はTestNGのレポートリンクまたはPICに私自身のスクリーンショットを含めることはできますか?はいの場合はどうですか?

私が見つけたのは、オンラインではFESTフレームワークです。しかし、私は既にスクリーンショットを撮っているので、別のフレームワークを使いたいとは思っていません。

答えて

11

はい、あなたのスクリーンショットへのリンクをtestngレポートに含めることができます。

あなたは({} yourListener.class)@Listenersですべてtestclassesのテストクラスまたは親に注釈を付けることにより、またはあなたのtestng.xmlにリスナーを追加することにより、いずれかのレポートへのハイパーリンクを書くためにorg.testng.Reporter.logメソッドを呼び出す必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="default"> 
    <listeners> 
    <listener class-name="ScreenshotListener" /> 
    </listeners> 
    <test name="Test"> 
    <packages> 
     <package name="someTests.*"/> 
    </packages> 
    </test> 
</suite> 

まず、Listenerクラスを作成してtestngに追加する必要があります。 testng.orgからその詳細を得ることができます。リスナーを検索します。

このクラスを作成したら、ontestfailureメソッドをオーバーライドするメソッドを記述する必要があります。このメソッド内のコードは、testngが失敗を識別するたびに実行されます。

スクリーンショットを取得する方法を呼び出すには、Reporter.logを使用してそのスクリーンショットにハイパーリンクを設定します。次に、失敗したテストケースの詳細の下にこのリンクがあります。

import java.io.*; 
import java.util.*; 
import java.text.*; 
import org.apache.commons.io.FileUtils; 

import org.openqa.selenium.*; 

import org.testng.*; 

public class ScreenshotListener extends TestListenerAdapter { 
    @Override 
    public void onTestFailure(ITestResult result) { 
     Calendar calendar = Calendar.getInstance(); 
     SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss"); 
     String methodName = result.getName(); 
     if(!result.isSuccess()){ 
      File scrFile = ((TakesScreenshot)SomeStaticWebDriver.driver).getScreenshotAs(OutputType.FILE); 
      try { 
       String reportDirectory = new File(System.getProperty("user.dir")).getAbsolutePath() + "/target/surefire-reports"; 
       File destFile = new File((String) reportDirectory+"/failure_screenshots/"+methodName+"_"+formater.format(calendar.getTime())+".png"); 
       FileUtils.copyFile(scrFile, destFile); 
       Reporter.log("<a href='"+ destFile.getAbsolutePath() + "'> <img src='"+ destFile.getAbsolutePath() + "' height='100' width='100'/> </a>"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

回答ありがとうございます。結果にリンク/画像を配置する場所はありますか?失敗したメソッド名のようなものかそれとも何か? – Tarken

+1

はい。最初にListenerクラスを作成し、それをtestngに追加する必要があります。 testng.orgからその詳細を得ることができます。リスナーを検索します。そのクラスを作成したら、ontestfailureメソッドをオーバーライドするメソッドを記述する必要があります。このメソッド内のコードは、testngが失敗を識別するたびに実行されます。スクリーンショットの取得方法を呼び出し、Reporter.logを使用してそのスクリーンショットにハイパーリンクを付けることができます。次に、失敗したテストケースの詳細の下にこのリンクがあります。 –

+0

クイックガイドをありがとう:-)私は仕事に戻ったときにそれを試してみます。 – Tarken