TestNG 入门教程 (转)

上一篇 / 下一篇  2017-02-06 11:50:20 / 个人分类:接口

我的栏目
  • 栏目:
Refer to: http://www.cnblogs.com/TankXiao/p/3888070.html

w6?B P%_-h0

阅读目录

s$@,H{,nWj`0
  1. TestNG介绍
  2. 在Eclipse中在线安装TestNG
  3. 在Eclipse中离线安装Testng
  4. TestNG最简单的测试
  5. TestNG的基本注解
  6. TestNG中如何执行测试
  7. 使用testtng.xml 文件执行 case 
  8. TestNG按顺序执行Case
  9. TestNG异常测试
  10. TestNG组测试
  11. TestNG参数化测试
  12. TestNG忽略测试
  13. TestNG 依赖测试
  14. TestNG测试结果报告

qC#LK-Lj051Testing软件测试网i9WSjmn_

 51Testing软件测试网XI'R3|!qK*b%A&@

TestNG介绍

TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便

{F'bS&i0

Java中已经有一个JUnit的测试框架了。  TestNG比JUnit功能强大的多。  测试人员一般用TestNG来写自动化测试。  开发人员一般用JUnit写单元测试51Testing软件测试网H/`1D$w9Rl1~ hm

官方网站: http://testng.org/doc/index.html

#jkIXT2M0

 

(k q*XA^-ok?+G3e^0

在Eclipse中在线安装TestNG

打开Eclipse   Help ->Install New Software ,   然后Add   "http://beust.com/eclipse"

W^n%zk)i,a?^#l0

51Testing软件测试网mcfE+G7eOCc$T

 51Testing软件测试网8rT|8Po

在Eclipse中离线安装Testng

首先下载testng离线包:  http://pan.baidu.com/s/1hrEaX6k

{C)[\$F:i3~1I0

 51Testing软件测试网XY K!_2w

1. 将解压后的文件..\eclipse-testng离线包\features\org.testng.eclipse_6.9.9.201510270734   文件夹 放到      eclipse--》features目录下

H v-tII$C,s/N Z){0

2. 将解压后的文件..\eclipse-testng离线包\plugins\org.testng.eclipse_6.9.8.201510130443  文件夹  放到                 eclipse--》plugins目录下51Testing软件测试网,U5^,B m8W'SG%u-_

3. 重启eclipse51Testing软件测试网Z GD!T-s+b

4. 验证是否安装成功,file-->new-->other-->TestNg51Testing软件测试网J,ah~6d QM-Xh

51Testing软件测试网3U6[5SyK"EFkX;f

TestNG最简单的测试

 下面是TestNG的最简单的一个例子

U_-Z2Ds0
复制代码
packageTankLearn2.Learn;importorg.junit.AfterClass;importorg.junit.BeforeClass;importorg.testng.annotations.Test;publicclassTestNGLearn1 {

    @BeforeClasspublicvoidbeforeClass() {
        System.out.println("this is before class");
    }

    @TestpublicvoidTestNgLearn() {
        System.out.println("this is TestNG test case");
    }

    @AfterClasspublicvoidafterClass() {
        System.out.println("this is after class");
    }
}
复制代码

 

P9a'K$N.G4n0

TestNG的基本注解

 

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

 

%X7Yg+H L;vp0

TestNG中如何执行测试

第一种直接执行:右键要执行的方法,  点Run As ->TestNG Test51Testing软件测试网+iw\)\2K$n

51Testing软件测试网j|0aAb_8D:G E1|/r;|

 

OS-B J"F0J0

!dfpL"T0

使用testtng.xml 文件执行 case 

第二种:  通过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml,   点Run As51Testing软件测试网2wBu0Uq`D

testng.xml51Testing软件测试网 sl)m-K2~ s+M4Fr8h

复制代码
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test12">
        <classes>
            <classname="TankLearn2.Learn.TestNGLearn1" />
        </classes>
    </test>
</suite>
复制代码

51Testing软件测试网Na(^Y1eo/B7^

 

E1XP!F D4e0

TestNG按顺序执行Case

在testng.xml中,可以控制测试用例按顺序执行。  当preserve-order="true"是,可以保证节点下面的方法是按顺序执行的51Testing软件测试网'w_ {slB!gA!NUB

复制代码
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suitename="Suite1"><testname="test12"preserve-order="true"><classes><classname="TankLearn2.Learn.TestNGLearn1"><methods><includename="TestNgLearn3"/><includename="TestNgLearn1"/><includename="TestNgLearn2"/></methods></class></classes></test></suite>
复制代码

 51Testing软件测试网]s3F2sj }9G W\

 

H[5A}8WV%jd0

 51Testing软件测试网(k:oL jO

TestNG异常测试

测试中,有时候我们期望某些代码抛出异常。51Testing软件测试网y;j*L j-R2Q7m

TestNG通过@Test(expectedExceptions)  来判断期待的异常, 并且判断Error Message

GJ5N4F ["F0
复制代码
packageTankLearn2.Learn;importorg.testng.annotations.Test;publicclassExceptionTest {
    
    @Test(expectedExceptions= IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")publicvoidtestException(){thrownewIllegalArgumentException("NullPoint");
    }
}
复制代码

 51Testing软件测试网iq;a a/PH

TestNG组测试

TestNG中可以把测试用例分组,这样可以按组来执行测试用例比如:51Testing软件测试网6? b3t%F%@o;I

复制代码
packageTankLearn2.Learn;importorg.testng.annotations.Test;publicclassGroupTest {
    
    @Test(groups= {"systemtest"})publicvoidtestLogin(){
        System.out.println("this is test login");
    }
    
    @Test(groups= {"functiontest"})publicvoidtestOpenPage(){
        System.out.println("this is test Open Page");
    }
}
复制代码

 

{1]Fh CcVO'G9r0

然后在testng.xml中 按组执行测试用例51Testing软件测试网f-B,c3O)A;y

复制代码
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suitename="Suite1"><testname="test1"><groups><run><includename="functiontest"/></run></groups></test></suite>
复制代码

 

)WU9?Vj6Y+s Czl0

TestNG参数化测试

软件测试中,经常需要测试大量的数据集。 测试代码的逻辑完全一样,只是测试的参数不一样。  这样我们就需要一种 “传递测试参数的机制”。 避免写重复的测试代码51Testing软件测试网e3FZk#K Ih3W

TestNG提供了2种传递参数的方式。

}pw4q0gtm0j}?0

第一种: testng.xml 方式使代码和测试数据分离,方便维护

{ NPRg,D)`['v0

第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)51Testing软件测试网A.akG9^ {Rn0c Z

 

c+eI^&?Z q0

方法一: 通过testng.xml 传递参数给测试代码51Testing软件测试网p|pj\,y

复制代码
packageTankLearn2.Learn;importorg.testng.annotations.Parameters;importorg.testng.annotations.Test;publicclassParameterizedTest1 {
    
    @Test
    @Parameters("test1")publicvoidParaTest(String test1){
        System.out.println("This is " +test1);
    }
}
复制代码

testng.xml51Testing软件测试网I:W$_W(N5r3j1q

复制代码
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suitename="Suite1"><parametername="test1"value="Tank"/><parametername="test1"value="Xiao"/><testname="test12"><classes><classname="TankLearn2.Learn.ParameterizedTest1"/></classes></test></suite>
复制代码

 

N%mA.pk0

方式二:   通过DataProvider传递参数51Testing软件测试网 mJj}'\l

复制代码
packageTankLearn2.Learn;importorg.testng.annotations.DataProvider;importorg.testng.annotations.Test;publicclassDataProviderLearn {
    
    @DataProvider(name="user")publicObject[][] Users(){returnnewObject[][]{
                {"root","passowrd"},
                {"cnblogs.com", "tankxiao"},
                {"tank","xiao"}
        };
    }
    
    @Test(dataProvider="user")publicvoidverifyUser(String userName, String password){
        System.out.println("Username: "+ userName + " Password: "+password);
    }
}
复制代码

 51Testing软件测试网_l:q;{[V

TestNG忽略测试

有时候测试用例还没准备好, 可以给测试用例加上@Test(enable = false),  来禁用此测试用例

qZD#t u:e0
复制代码
packageTankLearn2.Learn;importorg.testng.annotations.Test;publicclassTesgNGIgnore {
    
    @Test(enabled=false)publicvoidtestIgnore(){
        System.out.println("This test case will ignore");
    }
}
复制代码

 51Testing软件测试网S8E{CX pb \Z.x$D

TestNG 依赖测试

有时候,我们需要按顺序来调用测试用例,  那么测试用例之间就存在依赖关系。 TestNG支持测试用例之间的依赖51Testing软件测试网td6I.qJ(\ Ph5a-J2j

复制代码
packageTankLearn2.Learn;importorg.testng.annotations.Test;publicclassDependsTest {
    
    @TestpublicvoidsetupEnv(){
        System.out.println("this is setup Env");
    }
    
    @Test(dependsOnMethods= {"setupEnv"})publicvoidtestMessage(){
        System.out.println("this is test message");
    }
}
复制代码

 

;m\+]C5J}3P0

TestNG测试结果报告

测试报告是测试非常重要的部分.  51Testing软件测试网4]XFbf8W:I

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.

&eKpKg0

51Testing软件测试网"HT"L3oZ3PO(l

 51Testing软件测试网/@Kh'hf.hO}(g3m

当然我们也可以设置测试报告的内容级别. 

d5Lg$E_r0

verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细51Testing软件测试网Y1JX'O @n0s

复制代码
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suitename="Suite1"><testname="test12"verbose="2"><classes><classname="TankLearn2.Learn.TestNGLearn1"/></classes></test></suite>
复制代码

TAG:

引用 删除 zzcheng0414   /   2017-02-15 17:16:07
5
 

评分:0

我来说两句

Open Toolbar