TestNG与Junit的基本区别

自动化的框架选择webdriver+TestNG+Ant,是因为便于Daily Build Ant的集成,而单元测试框架选择TestNG是由于具有以下优势,最主要体现"直接用Excel做为数据源"和"在xml中定义测试任务"

1.对于注解类的支持

功能
JUnit TestNG
标注为类/方法为测试类和方法 @Test @Test
标注为在suite中所有测试之前运行
@BeforeSuite
标注为在suite中所有测试之后运行 @AfterSuite
标注为在测试之前运行 @BeforeTest
标注为在测试之后运行 @AfterTest
标注为在测试Group中第一个测试方法之前运行 @BeforeGroups
标注为在测试Group中最后一个测试方法之后运行 @AfterGroups
标注为当前测试类中第一个测试方法之前运行 @BeforeClass @BeforeClass
标注为当前测试类中最后一个测试方法之后运行 @AfterClass @AfterClass
标注为在每次测试方法之前运行 @Before @BeforeMethod
标注为在每次测试方法之后运行 @After @AfterMethod
忽略某测试,让其不执行 @Ignore @Test(enable=false)
期待测试抛出什么异常 @Test(expected=XXXException.class) @Test(exceptedExceptions=XXXException.class)
测试超时,如果测试的执行时间超过了毫秒为单位设置的时间,那么就停止测试并且标记为失败
@Test(timeout=1000) @Test(timeout=1000)
Junit的执行顺序:

Setup( )   test1( )    tearDown( )      Setup( )     test2( )      tearDown( )

TestNG的执行顺序:

Setup( )   test1( )    test2( )      tearDown( )

2.定义测试任务

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

3.测试参数化

Junit是不带任何参数的,不论是测试方法还是配置方法,而TestNG都是可以添加参数的,有2种方法

(1)使用Parameter参数(试用的场景比较少):

public class TestNGTest6_1_0 {          
       	@Test
       	@Parameters(value="number")
       public void parameterIntTest(int number) {
          System.out.println("Parameterized Number is : " + number);
       }                                               
 }
然后,在我们的Testng.xml文件中,我们把参数的具体值设置进来,如下:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
  <test name="testing">                     
    <parameter name="number" value="2"/> 
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest6_0" />
    </classes>
  </test>
</suite>
(2)DataProvider(实际应用场景可参考博客:解析Excel,通过Excel驱动测试数据参数化http://blog.csdn.net/luozhuwang/article/details/9701491
我们用一个DataProvider属性来给被测试的方法上声明它需要的数据,然后平行的,用@DataProvider注解来标注一个方法,让这个方法的返回值返回具体的数据

@Test(dataProvider = "Data-Provider-Function")
public void parameterIntTest(TestNGTest6_3_0 clzz) {
   System.out.println("Parameterized Number is : " + clzz.getMsg());
   System.out.println("Parameterized Number is : " + clzz.getNumber());
}  
然后相应的我们用@DataProvider来标注一个方法,这个方法提供了数据:

@DataProvider(name = "Data-Provider-Function")
public Object[][] parameterIntTestProvider() {     
        TestNGTest6_3_0 obj = new TestNGTest6_3_0();
        obj.setMsg("Hello");
        obj.setNumber(123);                  
        return new Object[][]{
          {obj}
        };
}
4.测试依赖性

对于JUnit 来说,所有的测试彼此之间都是独立的,毫无依赖性。

但是对于 TestNG来说,我们完全可以让测试彼此之间有依赖性,做法就是dependsOnMethods属性来标识一个被依赖的测试方法:

@Test
public void method1() {
   System.out.println("This is method 1");
}
@Test(dependsOnMethods={"method1"})
public void method2() {
    System.out.println("This is method 2");
}
自动化测试过程中的实用性不是很强,用例之间尽量保持独立性




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值