51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2702|回复: 3
打印 上一主题 下一主题

TestNG入门教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-2 16:36:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
TestNG介绍

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

Java中已经有一个JUnit的测试框架了。  TestNG比JUnit功能强大的多。  测试人员一般用TestNG来写
自动化测试。  开发人员一般用JUnit写单元测试。

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



在Eclipse中在线安装TestNG

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

在Eclipse中离线安装Testng

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



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

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

3. 重启eclipse

4. 验证是否安装成功,file-->new-->other-->TestNg

TestNG最简单的测试

下面是TestNG的最简单的一个例子
  1. package TankLearn2.Learn;

  2. import org.junit.AfterClass;
  3. import org.junit.BeforeClass;
  4. import org.testng.annotations.Test;

  5. public class TestNGLearn1 {

  6.     @BeforeClass
  7.     public void beforeClass() {
  8.         System.out.println("this is before class");
  9.     }

  10.     @Test
  11.     public void TestNgLearn() {
  12.         System.out.println("this is TestNG test case");
  13.     }

  14.     @AfterClass
  15.     public void afterClass() {
  16.         System.out.println("this is after class");
  17.     }
  18. }
复制代码
TestNG的基本注解



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


TestNG中如何执行测试

第一种直接执行:右键要执行的方法,  点Run As ->TestNG Test

使用testtng.xml 文件执行 case

第二种:  通过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml,
  点Run As

testng.xml
  1. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  2. <suite name="Suite1">
  3.     <test name="test12">
  4.         <classes>
  5.             <class name="TankLearn2.Learn.TestNGLearn1" />
  6.         </classes>
  7.     </test>
  8. </suite>
复制代码

TestNG按顺序执行Case

在testng.xml中,可以控制测试用例按顺序执行。  当preserve-order="true"是,可以保证节点下面的
方法是按顺序执行的
  1. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  2. <suite name="Suite1">
  3.     <test name="test12" preserve-order="true">
  4.         <classes>
  5.             <class name="TankLearn2.Learn.TestNGLearn1">
  6.                 <methods>
  7.                     <include name="TestNgLearn3" />
  8.                     <include name="TestNgLearn1" />
  9.                     <include name="TestNgLearn2" />
  10.                 </methods>
  11.             </class>
  12.         </classes>
  13.     </test>
  14. </suite>
复制代码
TestNG异常测试

测试中,有时候我们期望某些代码抛出异常。

TestNG通过@Test(expectedExceptions)  来判断期待的异常, 并且判断Error Message
  1. package TankLearn2.Learn;

  2. import org.testng.annotations.Test;

  3. public class ExceptionTest {
  4.    
  5.     @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")
  6.     public void testException(){
  7.         throw new IllegalArgumentException("NullPoint");
  8.     }
  9. }
复制代码
TestNG组测试

TestNG中可以把测试用例分组,这样可以按组来执行测试用例比如:
  1. package TankLearn2.Learn;

  2. import org.testng.annotations.Test;

  3. public class GroupTest {
  4.    
  5.     @Test(groups = {"systemtest"})
  6.     public void testLogin(){
  7.         System.out.println("this is test login");
  8.     }
  9.    
  10.     @Test(groups = {"functiontest"})
  11.     public void testOpenPage(){
  12.         System.out.println("this is test Open Page");
  13.     }
  14. }
  15. 复制代码


  16. 然后在testng.xml中 按组执行测试用例

  17. 复制代码
  18. <?xml version="1.0" encoding="UTF-8"?>
  19. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  20. <suite name="Suite1">
  21.     <test name="test1">
  22.         <groups>
  23.         <run>
  24.         <include name="functiontest" />
  25.         </run>
  26.     </groups>
  27.     </test>
  28. </suite>
复制代码
TestNG参数化测试

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

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

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

第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)



方法一: 通过testng.xml 传递参数给测试代码
  1. package TankLearn2.Learn;

  2. import org.testng.annotations.Parameters;
  3. import org.testng.annotations.Test;

  4. public class ParameterizedTest1 {
  5.    
  6.     @Test
  7.     @Parameters("test1")
  8.     public void ParaTest(String test1){
  9.         System.out.println("This is " + test1);
  10.     }
  11. }
  12. 复制代码
  13. testng.xml

  14. 复制代码
  15. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  16. <suite name="Suite1">
  17.         <parameter name="test1" value="Tank" />
  18.         <parameter name="test1" value="Xiao" />
  19.     <test name="test12">
  20.         <classes>
  21.             <class name="TankLearn2.Learn.ParameterizedTest1" />
  22.         </classes>
  23.     </test>
  24. </suite>
  25. 复制代码


  26. 方式二:   通过DataProvider传递参数

  27. 复制代码
  28. package TankLearn2.Learn;

  29. import org.testng.annotations.DataProvider;
  30. import org.testng.annotations.Test;

  31. public class DataProviderLearn {
  32.    
  33.     @DataProvider(name="user")
  34.     public Object[][] Users(){
  35.         return new Object[][]{
  36.                 {"root","passowrd"},
  37.                 {"cnblogs.com", "tankxiao"},
  38.                 {"tank","xiao"}
  39.         };
  40.     }
  41.    
  42.     @Test(dataProvider="user")
  43.     public void verifyUser(String userName, String password){
  44.         System.out.println("Username: "+ userName + " Password: "+ password);
  45.     }
  46. }
复制代码
TestNG忽略测试

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

  2. import org.testng.annotations.Test;

  3. public class TesgNGIgnore {
  4.    
  5.     @Test(enabled = false)
  6.     public void testIgnore(){
  7.         System.out.println("This test case will ignore");
  8.     }
  9. }
复制代码
TestNG 依赖测试

有时候,我们需要按顺序来调用测试用例,  那么测试用例之间就存在依赖关系。 TestNG支持测试用
例之间的依赖
  1. package TankLearn2.Learn;

  2. import org.testng.annotations.Test;

  3. public class DependsTest {
  4.    
  5.     @Test
  6.     public void setupEnv(){
  7.         System.out.println("this is setup Env");
  8.     }
  9.    
  10.     @Test(dependsOnMethods = {"setupEnv"})
  11.     public void testMessage(){
  12.         System.out.println("this is test message");
  13.     }
  14. }
复制代码
TestNG测试结果报告

测试报告是测试非常重要的部分.  

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

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

verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细
  1. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  2. <suite name="Suite1">
  3.     <test name="test12" verbose="2">
  4.         <classes>
  5.             <class name="TankLearn2.Learn.TestNGLearn1" />
  6.         </classes>
  7.     </test>
  8. </suite>
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

  • TA的每日心情

    2024-5-20 21:29
  • 签到天数: 996 天

    连续签到: 1 天

    [LV.10]测试总司令

    3#
    发表于 2018-3-7 09:18:24 | 只看该作者
    感谢分享。已收藏
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-27 13:42 , Processed in 0.075960 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表