谈谈单元测试之(四):测试工具 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 ,官网介绍的很详细(如果你英文还说的过去,建议去官网)。

  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>

当然,你还可以指定包名替代类名,就像这样:

  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:

  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 的设计。

学好测试,编写健壮、漂亮的代码,节省下更多的时间学学新技术,陪陪家人,不也都挺好嘛。干嘛非要跟自己过不去,让那些混乱的代码逼着自己加班,你说是吧?




【原创】地址: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 ,官网介绍的很详细(如果你英文还说的过去,建议去官网)。

  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>

当然,你还可以指定包名替代类名,就像这样:

  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:

  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 的设计。

学好测试,编写健壮、漂亮的代码,节省下更多的时间学学新技术,陪陪家人,不也都挺好嘛。干嘛非要跟自己过不去,让那些混乱的代码逼着自己加班,你说是吧?




【原创】地址:http://blog.csdn.net/happylee6688/article/details/38225175

猜你喜欢

转载自blog.csdn.net/miss_yingHao/article/details/78790980