1. 程式人生 > >談談單元測試之(四):測試工具 TestNG

談談單元測試之(四):測試工具 TestNG


前言


上一篇文章《測試工具 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(套件)
由 xml 檔案描述,它包含一個或多個測試並被定義為 <suite> 標籤。
  • test(測試)
由 <test> 描述,幷包含一個或者多個 TestNG 類。
  • class(類)
由一個或多個方法組成。

註解

  • @BeforeSuite
被註解的方法,會在當前 suite 中所有測試方法執行之前被呼叫。
  • @AfterSuite
被註解的方法,會在當前 suite 中所有測試方法執行之後被呼叫。
  • @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 ?
  1. <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >  
  2.     
  3. <suite name=“Suite1” verbose=“1” >  
  4.   <test name=“Nopackage” >  
  5.     <classes>  
  6.        <class name=“NoPackageTest” />  
  7.     </classes>  
  8.   </test>  
  9.    
  10.   <test name=“Regression1”>  
  11.     <classes>  
  12.       <class name=“test.sample.ParameterSample”/>  
  13.       <class name=“test.sample.ParameterTest”/>  
  14.     </classes>  
  15.   </test>  
  16. </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 ?
  1. <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >  
  2.   
  3. <suite name=“Suite1” verbose=“1” >  
  4.   <test name=“Regression1”   >  
  5.     <packages>  
  6.       <package name=“test.sample” />  
  7.    </packages>  
  8.  </test>  
  9. </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 ?
  1. <span style=“font-family:Microsoft YaHei;”><test name=“Regression1”>  
  2.   <groups>  
  3.     <run>  
  4.       <exclude name=“brokenTests”  />  
  5.       <include name=“checkinTests”  />  
  6.     </run>  
  7.   </groups>  
  8.     
  9.   <classes>  
  10.     <class name=“test.IndividualMethodsTest”>  
  11.       <methods>  
  12.         <include name=“testMethod” />  
  13.       </methods>  
  14.     </class>  
  15.   </classes>  
  16. </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(套件)
由 xml 檔案描述,它包含一個或多個測試並被定義為 <suite> 標籤。
  • test(測試)
由 <test> 描述,幷包含一個或者多個 TestNG 類。
  • class(類)
由一個或多個方法組成。

註解

  • @BeforeSuite
被註解的方法,會在當前 suite 中所有測試方法執行之前被呼叫。
  • @AfterSuite
被註解的方法,會在當前 suite 中所有測試方法執行之後被呼叫。
  • @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 ?
  1. <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >  
  2.     
  3. <suite name=“Suite1” verbose=“1” >  
  4.   <test name=“Nopackage” >  
  5.     <classes>  
  6.        <class name=“NoPackageTest” />  
  7.     </classes>  
  8.   </test>  
  9.    
  10.   <test name=“Regression1”>  
  11.     <classes>  
  12.       <class name=“test.sample.ParameterSample”/>  
  13.       <class name=“test.sample.ParameterTest”/>  
  14.     </classes>  
  15.   </test>  
  16. </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 ?
  1. <span style=“font-family:Microsoft YaHei;”><!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >  
  2.   
  3. <suite name=“Suite1” verbose=“1” >  
  4.   <test name=“Regression1”   >  
  5.     <packages>  
  6.       <package name=“test.sample” />  
  7.    </packages>  
  8.  </test>  
  9. </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 ?
  1. <span style=“font-family:Microsoft YaHei;”><test name=“Regression1”>  
  2.   <groups>  
  3.     <run>  
  4.       <exclude name=“brokenTests”  />  
  5.       <include name=“checkinTests”  />  
  6.     </run>  
  7.   </groups>  
  8.     
  9.   <classes>  
  10.     <class name=“test.IndividualMethodsTest”>  
  11.       <methods>  
  12.         <include name=“testMethod” />  
  13.       </methods>  
  14.     </class>  
  15.   </classes>  
  16. </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