Ttestng的用法浅析

转至元数据起始



testNG比较于junit,功能很强大:

它的一些特点或者是功能:

•注解


•TestNG使用Java和面向对象的功能


•支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)


•独立的编译时间测试代码运行时配置/数据信息


•灵活的运行时配置


•主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等


•支持依赖测试方法,并行测试,负载测试,局部故障


•灵活的插件API


•支持多线程测试


编写TestNG测试基本上包括以下步骤:

•测试和编写业务逻辑,在代码中插入TestNG的注解


•添加一个testng.xml文件或build.xml中在测试信息(例如类名,您想要运行的组,等..)


•运行 TestNG


TestNG有以下几种不同的方法来执行用例:

• testng.xml 文件


• ant


• 命令行




这里主要介绍下testng.xml文件的方式

看一个XML 文件的编写,来看下testNG.xml文件需要的元素:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

  <suite name="Suite1">

    <test name="test1">

     <classes>

         <class name="TestEmployeeDetails"/>

      </classes>

    </test>

  </suite>

•suite代表一个XML文件。它可以包含一个或多个测试,并被定义由<suite>标记; suite是根目录。


•标签<test>代表一个测试,并可以包含一个或多个TestNG的类


•<class>的标签代表一个TestNG的类是一个Java类,它包含至少一个TestNG的注解。它可以包含一个或多个测试方法


每个suite可以接受的合法属性如下

1.annotations 在测试中使用注释的类型。
2.name 此套件的名称。这是一个强制性的属性。必须存在
3.parallel 由TestNG 运行不同的线程来运行此套件。
4.thread-count 使用的线程数,如果启用并行模式(忽略其他方式)。
5.time-out 默认的超时时间,将用于本次测试中发现的所有测试方法。
6.verbose 这个运行级别或冗长。

testng中的注解



@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@DataProvider
标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
@AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
@AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
@BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
@AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@AfterMethod 被注释的方法将被运行后,每个测试方法。

与junit不同的是:

该注解也会和xml文件中的标签结合起来

注解中的BeforeMethod/AfterMethod对应每个测试方法; BeforeClass/AfterClass指的是xml文件中的class标签; BeforeTest/AfterTest 指的是xml文件中的test标签; BeforeSuite/AfterSuite对应xml文件中的suite标签;类似BeforeGroup/AfterGroup。

每个测试用例的执行在BeforeMethod/AfterMethod之间。



忽略某个测试用例的方法

在测试方法上添加注解,@Test(enable=false)




组测试

group测试是通过注解的方法,来决定哪些用例来执行。

比如:

现在有两个组:主功能一般不会变更的部分(checkin)和全功能回归(包括所有的功能点funtest);每次上线的时候希望去执行下checkin组,保证功能不挂;全回归的时候,需要执行funtest组。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<groups> 
<run>
<include name="functest" />
</run>
</groups>
<classes>
<class name="GroupTestExample" />
</classes>
</test>
</suite>

此xml文件只会运行GroupTestExample类中的funtest组(方法上标注为groups = functest)。

<run></run>中定义了将要运行的组名



自定义组:

组的组合(多个组 或者 排斥组)

关键字:define

示例如下:

组中组
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<groups>
<define name="all">
<include name="functest"/>
<include name="checkintest"/>
</define>
<run>
<include name="all"/>
</run>
</groups>
<classes>
<class name="GroupTestExample"/>
</classes>
</test>
</suite>

该xml文件会运行GroupTestExample类中的funtest组和checkintest组的用例。




排斥组:关键字exclude
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<groups>
<define name="all">
<exclude name="functest"/>
<include name="checkintest"/>
</define>
<run>
<include name="all"/>
</run>
</groups>
<classes>
<class name="GroupTestExample" />
</classes>
</test>
</suite>

该xml文件只会运行GroupTestExample类中checkintest组的用例。

以上两种情况,在有很多个组的时候,效果会比较明显。





疑问:classes标签下的组可以有多个么?看到所有的例子中,此处都只有一个class;group可以跨组么??




异常测试

可以在注解中指定测试中抛出的异常类型。

如:@Test(expectedExceptions = ArithmeticException.class)





依赖测试

包括:方法依赖(dependsOnMethods)和 组依赖(dependsOnGroups)


可以依赖多个方法或者多个组,也可以使用正则匹配,来匹配多个组。

如:
@Test(dependsOnGroups = { "init.*" }) 组名为init开头的都会先于该方法执行。

如果依赖的方法执行失败,该方法会跳过,跳过和失败不是一样的。




参数化测试

两种方式:
1. testng.xml文件中定义
在测试用例中的使用方式:
@Test
@Parameters("myName") 
  public void parameterTest(String myName)
  { System.out.println("Parameterized value is : " + myName); }
  参数可以在test,suite级别来定义,默认先去找类所对应的test,如果找不到再去找包围该类的suite
  可以在同一个xml文件中定义多个同名的值,test中的值会对应该test下面对应的类,suite中的值会对应没有定义该值的其它部分。


2. Dateprovider方式
该方法主要用于构建复杂的参数列表。

在测试用例中通过注解标明该方法为Dateprovider,有一个参数为它的名字;在测试用例中通过注解来调用来DataProvider来映射
Dateprovider返回的结果为对象数组,方法中的参数可以传递对象,也可以传递其它的基本数据类型。

testNg可以运行junit编写的测试用例。

testNg可以自定义测试报告中包含的内容,默认会生成html 或者 xml的测试报告。



这里只罗列了一些功能,还有更强大的功能来慢慢挖掘;问题也要在使用中慢慢的发现;不过testng真的是个好东西;要多多得用起来

猜你喜欢

转载自liqian5251.iteye.com/blog/2303878
今日推荐