【轉載】TestNG 簡易指南

轉載---原文地址:http://dev.sei.pku.edu.cn/trac/pkuas/wiki/testng


TestNG 簡易指南

本文內容包括:

• 屬性介紹• TestNG 的示例代碼 • 運行 TestNG 的 Ant 腳本 • 重新運行前次運行失敗的測試用例 • 分佈式測試特性 • TestNG 的多線程支持 • 總結 • 參考資料 • 關於作者 隨着項目的成長,單元測試的數量會迅猛增長。這就帶來不少問題。首先數量巨大的單元測試難於管理,運行一遍耗時巨大。其次,有時某個微小改動可能只需要運行某個測試文件中的部分單元測試就可以,這時重新運行全部測試用例就沒有必要了。其三,大多數項目需要用到多線程特性,爲使用了多線程特性的代碼寫測試用例相當麻煩且容易出錯。本文將利用 TestNG 提供的新特性,解決以上提到的問題。

1 TestNG的屬性介紹:

屬性名 描述 是否必須

annotations 字符串"JDK"或者"Javadoc". 定義測試適用的註釋類型.如果使用"Javadoc", 則需要同時指定"sourcedir". 不是必須. 如果適用jkd5則默認爲"JDK",如果適用jdk1.4則默認爲"Javadoc"

classfilesetref 要運行的測試類的FileSet結構的引用.

classpath 要運行的測試的PATH-like 結構.

classpathref 要運行的測試的PATH-like 結構的引用.

dumpCommand 打印TestNG啓動命令. 不是必須,默認false

enableAssert 開啓JDK 1.4的斷言. 不是必須,默認true

failureProperty 失敗發生時要設置的屬性的名稱. 只有haltonfailure沒有設置時纔有效. 不是必須.

haltonfailure 如果測試運行期間發生失敗,停止構造過程. 不是必須,默認false

haltonskipped 如果發生至少一次測試跳過,停止構造過程. 不是必須,false

groups 要運行的組列表,空格或逗號分隔

excludedgroups 排除在外的組列表,空格或逗號分隔

jvm 使用的jvm,將被Runtime.exec()運行 java

listeners 逗號或空格分隔的全路徑類列表,需要實現org.testng.ITestListener或org.testng.IReporter 不是必須

outputdir 報告輸出目錄 不是必須,默認輸出到test-output.

skippedProperty 當發生測試被跳過時設置的property的名稱.只有當haltonskipped沒有設置時才使用 不是必須

sourcedir 用於jdk1.4測試的PATH-like結構(使用JavaDoc形式的annotations)

sourcedirref 用於jdk1.4測試的PATH-like結構的引用(使用JavaDoc形式的annotations)

suiteRunnerClass TestNG啓動器的全路徑名稱 不是必須. 默認使用org.testng.TestNG

parallel 運行測試時使用的並行模式 - methods或者tests 不是必須 - 如果沒有指定,並行模式不被選擇

threadCount 運行時使用的線程數量。如果並行模式被同時指定否則忽略。 默認1

testJar 包含測試和套件定義的jar包路徑

timeOut 所有測試必須運行完成的最大超時時間,單位毫秒

useDefaultListeners 是否使用默認監聽器和報告器. 默認true.

workingDir 運行TestNG前ant任務應該轉移到的目錄。

xmlfilesetref 用於要測試的套件定義的FileSet結構的引用

suitename 設置測試套件的默認名稱如果在suite的xml文件或者源代碼中都沒有被定義。 不是必須,默認設置爲"Ant suite"

testname 設置測試的默認名稱如果在suite的xml文件或者源代碼中都沒有被定義。 不是必須,默認設置爲"Ant test"

2 TestNG 的示例代碼

TestNG 提供了從命令行運行測試用例的方法。下面將首先從命令行運行測試用例。假設有如下的測試用例組:

列表 1. TestNG 示例代碼

沒有圖像 "TestNG1.png" 附加到 testng

運行 TestNG 的 Ant 腳本

爲了運行這組測試用例,構建瞭如下的 Ant 運行腳本:

列表 2. 運行測試用例組的 Ant 腳本 build.xml 文件

運行之後的結果如下:

圖 1. 命令行運行 TestNG 的結果

運行完成之後,會在運行目錄下生成一個test-output 目錄。如圖 2 所示:

圖 2. 生成的 test-output 目錄

該目錄中包含有 html 形式的運行結果的報告,通過命令 start test-output\index.html 可以查看生成的測試報告

該目錄中有一個 testng-failed.xml 文件,該文件可以被用來運行前一次運行失敗的所有測試用例。下文將會詳細介紹使用該文件的步驟。

重新運行前次運行失敗的測試用例

隨着項目開發的進行,單元測試的數量也會成倍的增加。有時僅僅有數量很小的某幾個測試用例會運行失敗。在這種情況之下,對於每一次修改,可能並不需要跑完所有的測試用例。只需要重新運行前次運行失敗的測試用例。TestNG 內建了重新運行上次失敗測試用例的功能,下文將會給出重新運行前次錯誤測試用例的步驟。

運行一組測試用例,如果這一組測試用例中有失敗的用例,TestNG 就會在輸出目錄中創建一個叫做 testng-failed.xml 的配置文件。這個文件記錄了本組測試用例中運行失敗的測試用例。使用該文件,用戶可以快速的重新運行上次運行失敗的測試用例。而無需運行整個測試用例組。如前文所述,運行完 Ant 腳本之後,會在腳本運行的目錄之中生成一個 test-output 目錄。該目錄中,包含 testng-failed.xml 文件。可以用如下的命令運行被標記爲運行失敗的測試用例。

列表 3. 重新運行前次運行失敗的測試用例

運行結果如下:

圖 4. 重新運行前次運行失敗的測試用例的輸出結果

分佈式測試特性

隨着測試用例規模的擴大,分組數量的增加。使用一臺主機來運行所有的測試用例需要消耗大量的時間。爲了解決這個問題,TestNG 提供了分佈式特性。本文將介紹使用 TestNG 分佈特徵——使用多臺主機同時運行測試用例。TestNG 提供的分佈式模型如下所示:

圖 5. TestNG 提供的分佈式模型

這是一個典型的 master/slave。在這個模型中,有一個負責調度的 master 節點,和一些負責執行任務的 slave 節點。下文將介紹如何配置這樣一個分佈式模型。

首先,在遠程機器上部署 slave 節點。如上圖所示,在遠程節點上不僅要配置 TestNG 運行環境,還需要複製測試用例文件。

圖 6. 將需要運行的測試用例部署到遠程機器上

然後在這臺遠程機器上以 “slave” 模式啓動一個 TestNG 實例,使用如下命令:java –classpath <testng_path>;<testcase_path> org.testng.TestNG -slave <port>

圖 7. 以“slave”模式啓動一個 TestNG 實例

這樣,一個 TestNG 實例將會被啓動,並且等待即將到來的連接請求。如果有需要,可以在多臺機器上以 slave 模式啓動 TestNG 實例。

完成了所有 slave 實例的啓動之後,將所有啓動 slave 實例的主機信息記錄在一個配置文件中,如圖 8 所示:

圖 8. 分佈式運行的配置文件

然後使用該配置文件啓動 TestNG 的 master 實例。

列表 4. 啓動 TestNG 的 master 實例

這樣,所有的測試用例,將會被隨機的分配到多個 slave 實例上運行。圖9給出了在一個 slave 節點上運行測試用例的結果。

圖 9. 分佈式運行的 TestNG 測試用例結果

TestNG 的多線程支持

測試用例分組中,針對網絡應用的測試用例往往需要在多線程環境下運行。TestNG 爲多線程運行某個測試用例提供了方便的內建支持。這可以通過在測試用例的方法前制定 annotation @Test 的屬性來完成。

列表 5. 設置多線程屬性運行測試用例

這個屬性表示,運行 multipleTest 方法總共 5 次,在 3 個線程中運行這五次調用。每個線程運行該方法的時間不超過 1000 毫秒。修改 build.xml 文件,運行 multiple 組。

列表 6. 修改 build.xml 文件,運行 multiple 組。

圖 10. 多線程運行測試用例 multipleTest 的結果

沒有圖像 "TestNG117.png" 附加到 testng

總結:

本文希望通過場景和 TestNG 新特性的結合,可以爲用戶管理規模龐大的測試用例集有所幫助。場景中提到的分類方法,對實際項目中測試用例的管理具有幫助意義。其中,重跑失敗的測試用例,分組運行,分佈式運行,和多線程運行也是對於管理測試用例非常有幫助的特徵。

參考資料

學習

• Eclipse 3.1 中使用TestNG:基於註釋的單元測試框架 • “TestNG 使 Java 單元測試輕而易舉”(Filippo Diotalevi,developerWorks,2005 年 1 月):TestNG 不僅僅是性能強大、富於創新、易於擴充、使用靈活,它也展示了 Java 註釋的一種有趣應用方式。 • 追求代碼質量: JUnit 4 與 TestNG 的對比(Andrew Glover,developerWorks,2006 年 9 月):探討了這兩種框架各自的獨特之處,並闡述了 TestNG 獨有的三種高級測試特性。 • 使用 TestNG 的統計測試(Cedric Beust,beust.com,2006 年 2 月):使用 TestNG 進行高級測試,本文由該項目的創始人編寫。 • 追求代碼質量:決心採用 FIT(Andrew Glover,developerWorks,2006 年 2 月):有利於加強商業客戶和開發者溝通的集成測試框架。 • developerWorks:查閱數百篇關於 Java 編程各個方面的文章。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章