posts - 32,comments - 75,trackbacks - 0

3.         TestNG 的灵魂

配置文件(testng.xml

Junit中要定义测试任务是要写TestSuit的,居然要写硬编码,而TestNG全部写在testng.xml(名字可以自定义的)中的,然后可以通过ant来调用。

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

<suite name="my suite">

<test name="test1">

       <groups>

       <run name="group1">

       </run>

       </groups>

<classes>

<class name="ClassA"  />

</classes>

</test>

<test name="test2"  >

       <groups>

       <run name="group2">

       </run>

       </groups>

<classes>

<class name="ClassB"/>

<class name="ClassC"/>

</classes>

</test>

</suite>

上面包含了配置文件的基本的主干,一个配置文件只有一个Suite,基本上一个项目写一个配置文件就可以了,当然如果你的项目足够大,可能需要几个配置文件。测试是按照从大到小的顺序进行的,先执行suitetestclass,其中的groupclass是平级的,在讲group的时候再详细的解释。有了这个文件,我们就可以很清楚的理解@configuration里面的类型

public boolean beforeSuite() default false;

public boolean afterSuite() default false;

 

public boolean beforeTest() default false;

public boolean afterTest() default false;

 

public boolean beforeTestClass() default false;

public boolean afterTestClass() default false;

 

public boolean beforeTestMethod() default false;

public boolean afterTestMethod() default false;

从字面意思可以看出方法的执行顺序,唯一的疑惑是执行的次数,官方的文档的解释是相当让人疑惑的,好在我们可以自己测试,beforeTestMethod是当类中任何方法调用都要执行的,beforeTestbeforeTestClass在一个Test中是只执行一次的(没试过把2个相同的类写到一个Test里面),而beforeSuite在一个配置文件中只执行一次。上面都没有考虑分组的情况,分组会更加的复杂,似乎灵活过头了,但是考虑到项目的复杂性,每个测试方法的初始化都可能不同,现在我们做的项目要求每天要将单元测试写进daily buildbuild文件里面自动执行,似乎只有用TestNG这样灵活的配置才能达到。

 

4.         分组

将一个测试方法或者配置方法分组是很容易的。

@Configuration(beforeTestClass=truegroups=“group1)

@Test(groups=”group1”)

只要象上面写就可以了,名字随便取,而且不需要预先定义。

我们在一个类做2个组,看看效果

@Configuration(beforeTestClass=truegroups=“group1)

Public void C1(){}

@Test(groups=”group1”)

Public void T1(){}

@Configuration(beforeTestClass=truegroups=“group2)

Public void C2(){}

@Test(groups=”group2”)

Public void T2(){}

只选group1

…………………

       <groups>

       <run name="group1">

       </run>

       </groups>

…………

       执行C1        T1

 

只选group2