4 - 運行TestNG
TestNG可以以不同的方式調用:
* Command line
* ant
* Eclipse
* IntelliJ's IDEA
1) 命令行
假設你已經將TestNG加入到class path,調用TestNG最簡單的方法事下面的:
java org.testng.TestNG testng1.xml [testng2.xml testng3.xml ...]
必須指定最少一個描述你試圖測試的TestNG suite的xml文件。另外,下面的命令行參數可以使用:
命令行參數列表
選項 參數 文檔說明
-d 一個目錄 生成報告的目錄( test-output)
-sourcedir 分號隔開的目錄列表 帶有javadoc注釋的測試源文件目錄. 這個選項只在使用javadoc類型的annotation時才有效.
(例如 "src/test" or "src/test/org/testng/eclipse-plugin;src/test/org/testng/testng").
-testclass 可以在classpath路徑中找到的逗號分隔的類列表。逗號分隔的類文件列表(例如 "org.foo.Test1,org.foo.test2").
-groups 逗號分隔的組列表 要運行的組列表(例如 "windows,linux,regression").
-excludegroups 逗號分隔的組列表 不想包含在這次運行中的組列表
-testrunfactory 可以在classpath中找到的java類 指定測試的runner.這個類需要實現接口org.testng.ITestRunnerFactory .
-listener 可以在classpath路徑中找到的逗號分隔的類列表。 指定測試的listener. 這個類需要實現接口org.testng.ITestListener
-parallel methods|tests 如果指定, 設置運行測試時如何使用并發線程的默認機制.如果不設置,默認機制是完全不使用并發線程。這個設置可以被suite定義覆蓋.
-threadcount 并發測試運行時默認使用的線程數 用于設置并發測試時默認的線程數. 只在并發模式被選擇時才生效 (例如, 打開 -parallel 選項). 這個設置可以被suite定義覆蓋.
-suitename 測試套件使用的默認名稱. 指定在命令行上定義的測試套件的名稱。如果suite.xml文件或源代碼指定了另外一個不同的套件名稱,這個選項將被忽略。可以創建帶空格的套件名稱,如果在名稱前后加雙引號如"like this".
-testname 測試使用的默認名稱. 指定在命令行上定義的測試的名稱。如果suite.xml文件或源代碼指定了另外一個不同的測試名稱,這個選項將被忽略。可以創建帶空格的測試名稱,如果在名稱前后加雙引號如"like this".
-reporter 擴展配置用于自定義報告listenner. 類似 -listener 選項, 除了容許reporter示例上由javabean形式的配置.
例如: -reporter com.test.MyReporter:methodFilter=*insert*,enableFiltering=true
可以通過不帶任何參數直接調用TestNFG來獲得這個文檔。
可以將命令行開關寫到txt文件中,例如c:\command.txt, 然后告訴TestNG使用這個文件類找到參數:
C:> more c:\command.txt
-d test-output testng.xml
C:> java org.testng.TestNG @c:\command.txt
另外,可以通過jvm的命令行來傳遞參數給TestNG,例如
java -Dtestng.test.classpath="c:/build;c:/java/classes;" org.testng.TestNG testng.xml
TestNG能夠理解的參數
屬性 類型 文檔
testng.test.classpath 分號分隔的包含測試類的一系列目錄 如果這個屬性被設置,TestNG將使用它替代從class path來查找測試類. 如果你正在使用在xml文件里面的包標簽并且在classpath路徑中由很多類而大部分都不是測試類的時候比較方便
舉例:
java org.testng.TestNG -groups windows,linux -testclass org.test.MyTest
注意 ant 任務和testng.xml容許用更多的參數來啟動TestNG(包含的方法,指定的參數,等等),因此可以認為命令行適用于學習TestNG并且想快速入門。
2) Ant
可以這樣定義TestNG的ant任務:
<taskdef resource="testngtasks"
classpath="testng.jar"/>
這個任務運行TestNG測試,并且通常是在單獨的jvm中。接受下面的屬性:
屬性名 描述 是否必須
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"
屬性classpath, classpathref或者內嵌的<classpath>必須設置一個,用于提供測試的classpath
屬性xmlfilesetref, classfilesetref 或者內嵌的 <xmlfileset>, 分別的<classfileset>必須使用用來提供測試
注意:如果使用jdk1.4,屬性attributes sourcedir, sourcedirref 或者內嵌的 <sourcedir> 必須提供.
注意:使用<classfileset> 并不自動按添加測試類到classpath: 需要報告這些在classpath中的任務要工作的類
內嵌元素
classpath
<testng> 任務支持一個內嵌的<classpath> 元素來提供PATH-like的結構.
bootclasspath
bootstrap類文件的位置可以用這個PATH形式的結構指定-如果fork沒有設置則被忽略
xmlfileset
套餐定義(testng.xml)可以通過一個FiltSet結構傳遞給任務
classfileset
TestNG可以直接在類上運行,同樣支持FiltSet結構
sourcedir
PATH形式的結構,用于jdk1.4的測試,使用javadoc annotation
jvmarg
通過內嵌的<jvmarg>元素將額外的參數傳遞給新的虛擬機,例如:
<testng>
<jvmarg value="-Djava.compiler=NONE" />
<!-- ... -->
</testng>
sysproperty
使用內嵌的<sysproperty>元素來指定類需要的系統屬性。在測試的執行期間虛擬機可以獲取這些屬性。 這個元素的屬性和環境變量相同。
<testng>
<sysproperty key="basedir" value="${basedir}"/>
<!-- ... -->
</testng>
將運行測試并且使得測試可以訪問basedir屬性
reporter
內部的<reporter>元素是一個可選的方式,用于注入自定義的報告監聽器,容許用戶為調整運行時的報告期行為而
這個元素強制要求設置classname屬性,指示自定義監聽器的類。為了設置報告期屬性,<reporter>元素可以包含多個內嵌的<property>元素來提供name和value屬性,如下所示:
<testng ...>
...
<reporter classname="com.test.MyReporter">
<property name="methodFilter" value="*insert*"/>
<property name="enableFiltering" value="true"/>
</reporter>
...
</testng>
public class MyReporter {
public String getMethodFilter() {...}
public void setMethodFilter(String methodFilter) {...}
public boolean isEnableFiltering() {...}
public void setEnableFiltering(boolean enableFiltering) {...}
...
}
請注意這里僅僅支持有限的屬性類型:String, int, boolean, byte, char, double, float, long, short.
env
可以通過內嵌的 <env>元素給TestNG的單獨的虛擬機傳遞指定的環境變量。
要查閱<env> 元素屬性的詳細描述,請查看ant的exec任務的描述。
舉例:
Suite xml
<testng classpathref="run.cp"
outputDir="${testng.report.dir}"
sourcedir="${test.src.dir}"
haltOnfailure="true">
<xmlfileset dir="${test14.dir}" includes="testng.xml"/>
</testng>
Class FileSet
<testng classpathref="run.cp"
outputDir="${testng.report.dir}"
haltOnFailure="true"M verbose="2">
<classfileset dir="${test.build.dir}" includes="**/*.class" />
</testng>