1

org.testng IReporter インターフェイスを実装しようとしています。私のJavaはそれほど優れていません。オンラインで見つけたいくつかの例に基づいて、Reporterクラスを作成できました。私が抱えている問題は、それを使用する方法と、どこで呼び出すか、どのパラメーターをどのように渡すかです。

public class Reporter は IReporter を実装します {

public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){
      ISuiteResult results =suites.get(0).getResults().get("Sanity Suite");
      ITestContext context = results.getTestContext();

      IResultMap passedTests = context.getPassedTests();
      IResultMap failedTests = context.getFailedTests();

      // Print all test exceptions...
      for( ITestResult r: failedTests.getAllResults()) {
          System.out.println( r.getThrowable());
      }
}

}

たとえば、次の WebDriver Selenium TestNG テストがあります。

public class VerifyTest extends TestBase {

@Test
public void test1() {
    verifyTrue(false);
    verifyEquals("pass", "fail");
    verifyFalse(true);
}

@Test
public void test2() {
    verifyTrue(false);
    assertEquals("pass", "fail");
    verifyFalse(true);
}

Reporter を使用して、実行の最後にカスタマイズされたレポートを取得するにはどうすればよいですか?

ありがとう!

4

5 に答える 5

1

上記のスケルトンを展開して、.xml、.html、テキスト ファイルなど、必要な場所に結果を生成するだけです...

于 2012-04-19T01:50:45.370 に答える
1

カスタマイズされたレポートを生成する例であるプロジェクトを作成しました。

基本的な考え方は、Listener クラスを作成し、testing.xml ファイルで参照することです。

<listeners>
    <listener class-name="qa.hs.framework.CustomReportListener"/>
  </listeners>

次に、クラスを作成します。

 public class CustomReportListener implements IReporter {

    @Override
    public void generateReport( List<XmlSuite> xmlSuites, List<ISuite> suites, 
           String outputDirectory ) {
       System.out.println();
       //Iterating over each suite included in the test
       for (ISuite suite : suites) {
       //Following code gets the suite name
       String suiteName = suite.getName();
       //Getting the results for the said suite
       Map<String, ISuiteResult> suiteResults = suite.getResults();
       for ( ISuiteResult sr : suiteResults.values() ) {
          ITestContext tc = sr.getTestContext();
          System.out.println("Passed tests for suite '" + suiteName + "' is:" +
               tc.getPassedTests().getAllResults().size());
        }
        CustomReport cr = new CustomReport();
        cr.generateReport( xmlSuites, suites, outputDirectory );
        ...

次に、その Listener クラスから、次のようなものを使用して任意の HTML 出力を作成する「Report Writer」クラスを作成できます。

public class CustomReport extends CustomReportListener
{
        private static final Logger LOG = Logger.getLogger( CustomReport.class );
        private static final SimpleDateFormat dateFormatter = new SimpleDateFormat(" MMM d 'at' hh:mm a");

        private String reportFileName = Constants.reportFileName;
        private PrintWriter m_out;
        private int m_row;
        private Integer m_testIndex;
        private int m_methodIndex;
        private Scanner scanner;

        @Override
        public void generateReport( List<XmlSuite> xml, List<ISuite> suites, String outdir ) {
                try {
                        m_out = createWriter( outdir );
                }
                catch ( IOException e ) {
                        LOG.error("output file", e);
                        return;
                }
                startHtml(m_out);
                generateSuiteSummaryReport(suites);
                generateMethodSummaryReport(suites);
                generateMethodDetailReport(suites);
                endHtml(m_out);
                m_out.flush();
                m_out.close();
        }

最後に、その「CustomReport」クラスから、「レポートの生成」メソッドはすべて、次のようなレポートのすべてのデータにアクセスできます。

testContext.getPassedTests()
Map<String, ISuiteResult> r = suite.getResults()
method.getDescription()
method.getTestClass().getName()
ITestResult.SUCCESS
tests.getAllMethods()
overview.getStartDate().getTime()
overview.getIncludedGroups()
etc.
于 2014-01-21T05:43:43.290 に答える
1

デビッド、スイート セクションの xml を介してテストを呼び出す場合に備えて、カスタム レポーターを testng.xml に追加できます。

<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>

それらをプログラムで呼び出す場合は、コードを介してそれを追加する必要があります @プログラムで TestNG を実行する

コマンドラインからテストを呼び出す場合は、これを参照してください

このレポーターは、上記のいずれかの方法で指定した場合、すべての実行の最後に TestNG によって呼び出されます。

于 2012-04-19T05:05:14.033 に答える