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之測試結果,就分享到這