談談單元測試之(四):測試工具 TestNG
阿新 • • 發佈:2018-12-20
前言
上一篇文章《測試工具 JUnit 4》中提到了 JUnit 4,並對 JUnit 4 做了簡單的討論,這篇文章我們將要圍繞另一款測試工具討論 —— TestNG。其實,這篇文章應該寫在《測試工具 JUnit 3》之後,和《測試工具 JUnit 4》之前,為什麼這麼說呢?
那是因為,TestNG 是在 JUnit 3 之後出來了,而 JUnit 4 是在 TestNG 推出之後,綜合 JUnit 3 的優點,並且借鑑了 TestNG 的優勢,才推出的。但是,考慮到,JUnit 3 、4 都是 JUnit 系列的,所以就放到一塊了,而沒有把他們分開。所以,大家知道這裡的關係就好了。
簡介
TestNG是一個用來簡化廣泛的測試需求的測試框架,從單元測試(隔離測試一個類)到整合測試(測試由多個類多個包甚至多個外部框架組成的整個系統,例如應用伺服器)。
步驟
- 編寫測試的業務邏輯並在程式碼中插入 TestNG Annotation
- 將測試資訊新增到 testng.xml 檔案或者 build.xml 中
- 執行 TestNG
一些概念
- suite(套件)
- test(測試)
- class(類)
註解
- @BeforeSuite
- @AfterSuite
- @BeforeTest
- @AfterTest
- @BeforeGroups
- @AfterGroups
- @BeforeClass
- @AfterClass
- @BeforeMethod
- @AfterMethod
配置
呼叫 TestNG 有幾種不同的方法,使用 testng.xml 檔案,使用 ant ,從命令列敲命令。當然,使用 Java IDE的話,可以不用寫 testng.xml 檔案,不過不代表用不到,只不過是 IDE 會自動生成一個 testng.xml 檔案,不用你再手動的寫了。 如果從學習的角度來看,testng.xml 檔案的配置,我們還是要學的,最起碼要了解它是怎麼配置的,以便看到它了不會感到陌生。
testng.xml 檔案可以到 testng 的官網去 copy ,官網介紹的很詳細(如果你英文還說的過去,建議去官網)。
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >
- <suite name=“Suite1” verbose=“1” >
- <test name=“Nopackage” >
- <classes>
- <class name=“NoPackageTest” />
- </classes>
- </test>
- <test name=“Regression1”>
- <classes>
- <class name=“test.sample.ParameterSample”/>
- <class name=“test.sample.ParameterTest”/>
- </classes>
- </test>
- </suite></span>
<span style="font-family:Microsoft YaHei;"><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Nopackage" >
<classes>
<class name="NoPackageTest" />
</classes>
</test>
<test name="Regression1">
<classes>
<class name="test.sample.ParameterSample"/>
<class name="test.sample.ParameterTest"/>
</classes>
</test>
</suite></span>
當然,你還可以指定包名替代類名,就像這樣:
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >
- <suite name=“Suite1” verbose=“1” >
- <test name=“Regression1” >
- <packages>
- <package name=“test.sample” />
- </packages>
- </test>
- </suite></span>
<span style="font-family:Microsoft YaHei;"><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Regression1" >
<packages>
<package name="test.sample" />
</packages>
</test>
</suite></span>
不止這些,你同樣可以指定包含或不包含的組和方法,Such as:
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><test name=“Regression1”>
- <groups>
- <run>
- <exclude name=“brokenTests” />
- <include name=“checkinTests” />
- </run>
- </groups>
- <classes>
- <class name=“test.IndividualMethodsTest”>
- <methods>
- <include name=“testMethod” />
- </methods>
- </class>
- </classes>
- </test></span>
<span style="font-family:Microsoft YaHei;"><test name="Regression1">
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test></span>
你同樣可以在 testng.xml 中定義新的組,指定屬性的額外詳細情況,比如:是否並行執行測試,使用多少執行緒,是否執行 JUnit 測試,等等。。。
至於,執行 TestNG 的那些命令,官網上已經說的很清楚了,如果你需要中文的資料,那麼我不會告訴你去找 Goo哥 或者 Baidu,這裡就不再贅述了。需要注意一點的是,TestNG 需要的 JDK 版本是 1.5 以上的。為什麼這樣,想想 JDK 1.5 的新特性,我想你已經知道了,這裡就不再廢話了。
生命週期
使用 TestNG,不僅可以指定測試方法,還可以用專門的標註 @Configuration指定類中的其他特定方法,這些方法叫做 配置方法。配置方法有四種類型:
- beforeTestClass 方法在類例項化之後,但是在測試方法執行之前執行。
- afterTestClass 方法在類中的所有測試方法執行之後執行。
- beforeTestMethod 方法在類中的任何測試方法執行之前執行。
- afterTestMethod 方法在類中的每個測試方法執行之後執行。
結束語
本篇文章,主要是介紹了 TestNG 的基本功能,當然,TestNG 是非常強大的,這裡沒有時間細說,最後分享一個小例子,想學 TestNG 的可以下載下來執行一下。例子非常簡單,可以通過與 JUnit 4 的例子進行對比,你就會發現,其實,他們還是都差不多的。畢竟,JUnit 4 也借鑑了 TestNG 的設計。
學好測試,編寫健壯、漂亮的程式碼,節省下更多的時間學學新技術,陪陪家人,不也都挺好嘛。幹嘛非要跟自己過不去,讓那些混亂的程式碼逼著自己加班,你說是吧?
資料:TestNG 的 Demo (IntelliJ IDEA)
【原創】地址:http://blog.csdn.net/happylee6688/article/details/38225175
前言
上一篇文章《測試工具 JUnit 4》中提到了 JUnit 4,並對 JUnit 4 做了簡單的討論,這篇文章我們將要圍繞另一款測試工具討論 —— TestNG。其實,這篇文章應該寫在《測試工具 JUnit 3》之後,和《測試工具 JUnit 4》之前,為什麼這麼說呢?
那是因為,TestNG 是在 JUnit 3 之後出來了,而 JUnit 4 是在 TestNG 推出之後,綜合 JUnit 3 的優點,並且借鑑了 TestNG 的優勢,才推出的。但是,考慮到,JUnit 3 、4 都是 JUnit 系列的,所以就放到一塊了,而沒有把他們分開。所以,大家知道這裡的關係就好了。
簡介
TestNG是一個用來簡化廣泛的測試需求的測試框架,從單元測試(隔離測試一個類)到整合測試(測試由多個類多個包甚至多個外部框架組成的整個系統,例如應用伺服器)。
步驟
- 編寫測試的業務邏輯並在程式碼中插入 TestNG Annotation
- 將測試資訊新增到 testng.xml 檔案或者 build.xml 中
- 執行 TestNG
一些概念
- suite(套件)
- test(測試)
- class(類)
註解
- @BeforeSuite
- @AfterSuite
- @BeforeTest
- @AfterTest
- @BeforeGroups
- @AfterGroups
- @BeforeClass
- @AfterClass
- @BeforeMethod
- @AfterMethod
配置
呼叫 TestNG 有幾種不同的方法,使用 testng.xml 檔案,使用 ant ,從命令列敲命令。當然,使用 Java IDE的話,可以不用寫 testng.xml 檔案,不過不代表用不到,只不過是 IDE 會自動生成一個 testng.xml 檔案,不用你再手動的寫了。 如果從學習的角度來看,testng.xml 檔案的配置,我們還是要學的,最起碼要了解它是怎麼配置的,以便看到它了不會感到陌生。
testng.xml 檔案可以到 testng 的官網去 copy ,官網介紹的很詳細(如果你英文還說的過去,建議去官網)。
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >
- <suite name=“Suite1” verbose=“1” >
- <test name=“Nopackage” >
- <classes>
- <class name=“NoPackageTest” />
- </classes>
- </test>
- <test name=“Regression1”>
- <classes>
- <class name=“test.sample.ParameterSample”/>
- <class name=“test.sample.ParameterTest”/>
- </classes>
- </test>
- </suite></span>
<span style="font-family:Microsoft YaHei;"><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Nopackage" >
<classes>
<class name="NoPackageTest" />
</classes>
</test>
<test name="Regression1">
<classes>
<class name="test.sample.ParameterSample"/>
<class name="test.sample.ParameterTest"/>
</classes>
</test>
</suite></span>
當然,你還可以指定包名替代類名,就像這樣:
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >
- <suite name=“Suite1” verbose=“1” >
- <test name=“Regression1” >
- <packages>
- <package name=“test.sample” />
- </packages>
- </test>
- </suite></span>
<span style="font-family:Microsoft YaHei;"><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Regression1" >
<packages>
<package name="test.sample" />
</packages>
</test>
</suite></span>
不止這些,你同樣可以指定包含或不包含的組和方法,Such as:
[html] view plain copy print ?
- <span style=“font-family:Microsoft YaHei;”><test name=“Regression1”>
- <groups>
- <run>
- <exclude name=“brokenTests” />
- <include name=“checkinTests” />
- </run>
- </groups>
- <classes>
- <class name=“test.IndividualMethodsTest”>
- <methods>
- <include name=“testMethod” />
- </methods>
- </class>
- </classes>
- </test></span>
<span style="font-family:Microsoft YaHei;"><test name="Regression1">
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test></span>
你同樣可以在 testng.xml 中定義新的組,指定屬性的額外詳細情況,比如:是否並行執行測試,使用多少執行緒,是否執行 JUnit 測試,等等。。。
至於,執行 TestNG 的那些命令,官網上已經說的很清楚了,如果你需要中文的資料,那麼我不會告訴你去找 Goo哥 或者 Baidu,這裡就不再贅述了。需要注意一點的是,TestNG 需要的 JDK 版本是 1.5 以上的。為什麼這樣,想想 JDK 1.5 的新特性,我想你已經知道了,這裡就不再廢話了。
生命週期
使用 TestNG,不僅可以指定測試方法,還可以用專門的標註 @Configuration指定類中的其他特定方法,這些方法叫做 配置方法。配置方法有四種類型:
- beforeTestClass 方法在類例項化之後,但是在測試方法執行之前執行。
- afterTestClass 方法在類中的所有測試方法執行之後執行。
- beforeTestMethod 方法在類中的任何測試方法執行之前執行。
- afterTestMethod 方法在類中的每個測試方法執行之後執行。
結束語
本篇文章,主要是介紹了 TestNG 的基本功能,當然,TestNG 是非常強大的,這裡沒有時間細說,最後分享一個小例子,想學 TestNG 的可以下載下來執行一下。例子非常簡單,可以通過與 JUnit 4 的例子進行對比,你就會發現,其實,他們還是都差不多的。畢竟,JUnit 4 也借鑑了 TestNG 的設計。
學好測試,編寫健壯、漂亮的程式碼,節省下更多的時間學學新技術,陪陪家人,不也都挺好嘛。幹嘛非要跟自己過不去,讓那些混亂的程式碼逼著自己加班,你說是吧?
資料:TestNG 的 Demo (IntelliJ IDEA)
【原創】地址:http://blog.csdn.net/happylee6688/article/details/38225175