当前位置:网站首页>TestNG使用教程详解

TestNG使用教程详解

2022-08-09 09:11:00 止语---

目录

 

一、前言

二、安装与配置

三、TestNG基本使用

3.1、直接运行TestNG Test

3.2、运行xml文件


一、前言

TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便。
详细使用说明请参考官方链接TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。 TestNG的创始人是Cedric Beust(塞德里克·博伊斯特)。因此基于巨人的肩膀上,推出了TestNG

二、安装与配置

安装TestNG既可以使用maven安装也可以使用插件进行安装,如果使用maven进行安装,则在pom.xml中加入依赖如下:

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.10</version>
      <scope>test</scope>
</dependency>

如果是使用插件进行安装,则有如下方式(ide为eclipse 4.8):

使用Install New Softwore进行安装

或者是在help/Eclipse Marketplace中search testng进行安装

TestNG安装完成之后为了方便下次建立TestNG类,可以按照如下方式进行设置

设置成功后,在新建中可以快速创建TestNG类

 这里苟勋Annotations,注意这里这里的Source flder和Package name按照Maven工程的路径进行选择即可。


三、TestNG基本使用

新建一个RandomEmailGenerator类放在源程序中

package zhiyu.com.TestNGStudy;

public class RandomEmailGenerator {
    public String generate() {
        return "[email protected]";
    }
}

新建一个testNG类放置在测试程序中

package zhiyu.com.TestNGStudy;

import org.testng.annotations.Test;
import org.testng.Assert;

public class TestHelloWorld {

  @Test()
  public void testEmailGenerator() {

      RandomEmailGenerator obj = new RandomEmailGenerator();
      String email = obj.generate();

      Assert.assertNotNull(email);
      Assert.assertEquals(email, "[email protected]");
      }


}

目录层级如下所示:

3.1、直接运行TestNG Test

输出结果如下:

[RemoteTestNG] detected TestNG version 7.3.0
PASSED: testEmailGenerator

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

3.2、运行xml文件

按照如下层级建立xml文件

 其中xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="zhiyu.com.TestNGStudy.TestHelloWorld"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

注意:这里的name为测试程序的名称,包含了package.*

 这里输出结果中提示如果使用xml的形式,需要加入一个头声明行

[RemoteTestNG] detected TestNG version 7.3.0
[TestNGContentHandler] [WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >" at the top of your file, otherwise TestNG may fail or not work as expected.

===============================================
Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

四、注释说明

TestNG中使用注释非常方便,使用注释/注解的一些好处:

  • TestNG通过查找注释/注解来识别它感兴趣的方法。 因此,方法名称不限于任何模式或格式。

  • 可以将其他参数传递给注释。

  • 注释是强类型的,所以编译器会马上标记任何错误。

  • 测试类不再需要扩展任何东西(如TestCase,对于JUnit3)

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

这样陈列出来,似乎不是很好理解@*中的区别,通过如下的示例:

package zhiyu.com.TestNGStudy;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;

public class TestDiffOfAttri {

	  @Test(groups="group1")
	  public void test1() {
		  System.out.println("test1 from group1");
		  Assert.assertTrue(true);
	  }
	  
	  @Test(groups="group1")
	  public void test11() {
		  System.out.println("test11 from group1");
		  Assert.assertTrue(true);
	  }
	  
	  @Test(groups="group2")
	  public void test2() 
	  {
		  System.out.println("test2 from group2");
		  Assert.assertTrue(true);
	  }
	  
	  @BeforeTest
	  public void beforeTest() 
	  {
		  System.out.println("beforeTest");
	  }
	  
	  @AfterTest
	  public void afterTest() 
	  {
		  System.out.println("afterTest");
	  }
	  
	  @BeforeClass
	  public void beforeClass() 
	  {
		  System.out.println("beforeClass");
	  }
	  
	  @AfterClass
	  public void afterClass() 
	  {
		  System.out.println("afterClass");
	  }
	  
	  @BeforeSuite
	  public void beforeSuite() 
	  {
		  System.out.println("beforeSuite");
	  }
	  
	  @AfterSuite
	  public void afterSuite() 
	  {
		  System.out.println("afterSuite");
	  }
	  
	  //只对group1有效,即test1和test11
	  @BeforeGroups(groups="group1")
	  public void beforeGroups() 
	  {
		  System.out.println("beforeGroups");
	  }
	  
	  //只对group1有效,即test1和test11
	  @AfterGroups(groups="group1")
	  public void afterGroups() 
	  {
		  System.out.println("afterGroups");
	  }
	  
	  @BeforeMethod
	  public void beforeMethod() 
	  {
		  System.out.println("beforeMethod");
	  }
	  
	  @AfterMethod
	  public void afterMethod() 
	  {
		  System.out.println("afterMethod");
	  }


}

输出结果:

[RemoteTestNG] detected TestNG version 7.3.0
beforeSuite
beforeTest
beforeClass
beforeMethod
test1 from group1
afterMethod
beforeMethod
test11 from group1
afterMethod
beforeMethod
test2 from group2
afterMethod
afterClass
afterTest
PASSED: test1
PASSED: test11
PASSED: test2

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================

afterSuite

===============================================
Default suite
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================


 

原网站

版权声明
本文为[止语---]所创,转载请带上原文链接,感谢
https://blog.csdn.net/rhx_qiuzhi/article/details/110731997