Java自動化測試框架-10 - TestNG之測試結果篇(詳細教程)


1.-測試結果

1.1-成功,失敗和斷言

測試被認為是成功的,如果它不引發任何異常完成,還是它扔的預期異常(請參閱文檔expectedExceptions屬性上找到的@Test注釋)。

您的測試方法通常由可能引發異常的調用或各種斷言(使用Java“ assert”關鍵字)組成。“斷言”失敗將觸發AssertionErrorException,這反過來會將方法標記為失敗(如果未看到斷言錯誤,請記住在JVM上使用-ea)。

這是一個示例測試方法:

/**
 * @author 北京-宏哥
 * 
 * Java自動化測試框架-10 - TestNG之 測試結果篇
 *
 * 2019年11月9日
 */
@Test
public void verifyLastName() {
  assert "Beust".equals(m_lastName) : "Expected name Beust, for" + m_lastName;
}

TestNG還包括JUnit的Assert類,該類使您可以對復雜對象執行斷言:

/**
 * @author 北京-宏哥
 * 
 * Java自動化測試框架-10 - TestNG之 測試結果篇
 *
 * 2019年11月9日
 */
import static org.testng.AssertJUnit.*;
//...
@Test
public void verify() {
  assertEquals("Beust", m_lastName);
}

請注意,上面的代碼使用靜態導入,以便能夠使用 assertEquals方法而不必在其類之前添加前綴。

1.2-日志和結果

測試運行的結果在啟動SuiteRunner時指定的目錄中的index.html文件中創建。該文件指向包含整個測試運行結果的各種其他HTML和文本文件。

使用TestNG與監聽器和報告器生成自己的報告非常容易:

偵聽器實現org.testng.ITestListener接口,並在測試開始,通過,失敗等時實時通知。

報告程序實現org.testng.IReporter接口,並在TestNG已運行所有套件時收到通知。IReporter實例接收描述整個測試運行的對象列表。

例如,如果要生成測試運行的PDF報告,則無需實時通知測試運行,因此您應該使用IReporter。如果您想編寫測試的實時報告,例如帶有進度條的GUI或在每次測試被調用時顯示點(“。”)的文本報告程序(如下所述),則ITestListener是您的最好的選擇。

1.2.1-日志偵聽器

這是一個顯示“。”的偵聽器。對於每個通過的測試,對於每個失敗,都為“ F”,對於每個跳過均為“ S”:

/**
 * @author 北京-宏哥
 * 
 * Java自動化測試框架-10 - TestNG之 測試結果篇
 *
 * 2019年11月9日
 */
public class DotTestListener extends TestListenerAdapter {
  private int m_count = 0;
 
  @Override
  public void onTestFailure(ITestResult tr) {
    log("F");
  }
 
  @Override
  public void onTestSkipped(ITestResult tr) {
    log("S");
  }
 
  @Override
  public void onTestSuccess(ITestResult tr) {
    log(".");
  }
 
  private void log(String string) {
    System.out.print(string);
    if (++m_count % 40 == 0) {
      System.out.println("");
    }
  }
}

在此示例中,我選擇擴展TestListenerAdapter,該方法使用空方法實現ITestListener,因此我不必從我不感興趣的接口中覆蓋其他方法。您可以根據需要直接實現該接口。

這是我調用TestNG來使用此新偵聽器的方法:

java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener org.testng.reporters.DotTestListener test\testng.xml

和輸出:

........................................
........................................
........................................
........................................
........................................
.........................
===============================================
TestNG JDK 1.5
Total tests run: 226, Failures: 0, Skips: 0
===============================================

請注意,當您使用-listener時,TestNG將自動確定您要使用的偵聽器的類型。

1.2.2-日志記者

該org.testng.IReporter接口只有一個方法:

public void generateReport(List<ISuite> suites, String outputDirectory)

當所有套件都已運行時,TestNG將調用此方法,您可以檢查其參數以訪問剛剛完成的運行中的所有信息。

1.2.3-JUnitReports

TestNG包含一個偵聽器,該偵聽器獲取TestNG結果並輸出一個XML文件,然后可以將其饋送到JUnitReport。 這是一個示例,以及創建此報告的ant任務:

<target name="reports">
  <junitreport todir="test-report">
    <fileset dir="test-output">
      <include name="*/*.xml"/>
    </fileset>
  
    <report format="noframes"  todir="test-report"/>
  </junitreport>
</target>

注意:JDK 1.5和JUnitReports當前不兼容,無法使用框架版本,因此您需要指定“ noframes”才能使其正常工作。

1.2.4-Reporter API

如果需要日志應在生成的HTML報告中顯示的消息,則可以使用org.testng.Reporter類:

Reporter.log (“已呼叫M3” );

     

1.2.5-XML報告

TestNG提供了一個XML報告程序,用於捕獲JUnit報告中不提供的TestNG特定信息。當用戶的測試環境需要使用JUnit格式無法提供的具有TestNG特定數據的XML結果時,此功能特別有用。記者可以通過使用命令行注入TestNG的-reporter。

這是一個示例用法:-reporter org.testng.reporters.XMLReporter:generateTestResultAttributes = true,generateGroupsAttribute = true。

下表詳細介紹了可以傳遞的所有選項。確保使用:

: -將報告者名稱與其屬性分開

= -分隔屬性的鍵/值對

, -分隔多個鍵/值對

以下是此類報告器的輸出示例:

<testng-results>
  <suite name="Suite1">
    <groups>
      <group name="group1">
        <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>
        <method signature="com.test.TestOne.test1()" name="test1" class="com.test.TestOne"/>
      </group>
      <group name="group2">
        <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>
      </group>
    </groups>
    <test name="test1">
      <class name="com.test.TestOne">
        <test-method status="FAIL" signature="test1()" name="test1" duration-ms="0"
              started-at="2007-05-28T12:14:37Z" description="someDescription2"
              finished-at="2007-05-28T12:14:37Z">
          <exception class="java.lang.AssertionError">
            <short-stacktrace>
              <![CDATA[
                java.lang.AssertionError
                ... Removed 22 stack frames
              ]]>
            </short-stacktrace>
          </exception>
        </test-method>
        <test-method status="PASS" signature="test2()" name="test2" duration-ms="0"
              started-at="2007-05-28T12:14:37Z" description="someDescription1"
              finished-at="2007-05-28T12:14:37Z">
        </test-method>
        <test-method status="PASS" signature="setUp()" name="setUp" is-config="true" duration-ms="15"
              started-at="2007-05-28T12:14:37Z" finished-at="2007-05-28T12:14:37Z">
        </test-method>
      </class>
    </test>
  </suite>
</testng-results>

該報告程序與其他默認偵聽器一起注入,因此默認情況下您可以獲得這種類型的輸出。偵聽器提供了一些屬性,可以對報告器進行調整以滿足您的需求。下表包含這些屬性的列表,並附有簡短說明:

Property Comment Default value
outputDirectory A String indicating the directory where should the XML files be output. The TestNG output directory
timestampFormat Specifies the format of date fields that are generated by this reporter yyyy-MM-dd'T'HH:mm:ss'Z'
fileFragmentationLevel An integer having the values 1, 2 or 3, indicating the way that the XML files are generated:
   1 - will generate all the results in one file.
   2 - each suite is generated in a separate XML file that is linked to the main file.
   3 - same as 2 plus separate files for test-cases that are referenced from the suite files.
1
splitClassAndPackageNames This boolean specifies the way that class names are generated for the <class> element. For example, you will get <class class="com.test.MyTest"> for false and <class class="MyTest" package="com.test"> for true. false
generateGroupsAttribute A boolean indicating if a groups attribute should be generated for the <test-method> element. This feature aims at providing a straight-forward method of retrieving the groups that include a test method without having to surf through the <group> elements. false
generateTestResultAttributes A boolean indicating if an <attributes> tag should be generated for each <test-method> element, containing the test result attributes (See ITestResult.setAttribute() about setting test result attributes). Each attribute toString() representation will be written in a <attribute name="[attribute name]"> tag. false
stackTraceOutputMethod Specifies the type of stack trace that is to be generated for exceptions and has the following values:
   0 - no stacktrace (just Exception class and message).
   1 - a short version of the stack trace keeping just a few lines from the top
   2 - the complete stacktrace with all the inner exceptions
   3 - both short and long stacktrace
2
generateDependsOnMethods Use this attribute to enable/disable the generation of a depends-on-methods attribute for the <test-method> element. true
generateDependsOnGroups Enable/disable the generation of a depends-on-groups attribute for the <test-method> element. true

為了配置此報告程序,可以在命令行中使用-reporter選項,也可以將Ant 任務與嵌套的<reporter>元素一起使用。對於其中的每個,您都必須指定org.testng.reporters.XMLReporter類。請注意,您無法配置內置報告器,因為該報告器僅使用默認設置。如果只需要

帶有自定義設置的XML報告,則必須使用兩種方法之一手動添加它並禁用默認偵聽器。

1.2.6-TestNG退出代碼

當TestNG完成執行時,它將退出並返回代碼。

可以檢查此返回碼以了解故障的性質(如果有的話)。

下表總結了TestNG當前使用的不同退出代碼。

FailedWithinSuccess Skipped Failed Status Code Remarks
No No No 0 Passed tests
No No Yes 1 Failed tests
No Yes No 2 Skipped tests
No Yes Yes 3 Skipped/Failed tests
Yes No No 4 FailedWithinSuccess tests
Yes No Yes 5 FailedWithinSuccess/Failed tests
Yes Yes No 6 FailedWithinSuccess/Skipped tests
Yes Yes Yes 7 FailedWithinSuccess/Skipped/Failed tests

2.-小結

  好了,今天關於TestNG之測試結果,就分享到這里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM