TestNG 使用教程讲解

TestNG 使用教程讲解

一、Testng 介绍

Testng是一套开源测试框架,是从Junit继承而来;TestNG支持多种注解,可以进行各种组合,如下进行简单的说明

1、最常用的注解及描述如下:
@BeforeClass 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次
@AfterClass 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@Test 将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法
@Listeners 定义测试类上的侦听器

2、比较常用的注解及描述如下:

@BeforeTest 注释的方法将在属于test标签内的类的所有测试方法运行之前运行
@AfterTest 注释的方法将在属于test标签内的类的所有测试方法运行之后运行
@BeforeMethod 注释方法将在每个测试方法之前运行
@AfterMethod 注释方法将在每个测试方法之后运行
@Parameters 描述如何将参数传递给@Test方法

2、了解即可的注解及描述如下:
@BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次
@AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次
@BeforeGroups 配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行
@AfterGroups 此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行
@DataProvider 标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称
@Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []

二、在pom.xml中引入testng测试框架

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

三、使用Test运行测试用例

1、运行单个测试用例

import org.testng.annotations.Test;
 
public class testng {
    @Test
    public void abc(){
        System.out.println("这里是abc");
    }
}

2、运行多个测试用例

import org.testng.annotations.Test;
 
public class testng {
    @Test
    public void abc(){
        System.out.println("这里是abc");
    }
 
    @Test
    public void abc1(){
        System.out.println("这里是abc1");
    }
 
    @Test
    public void abc2(){
        System.out.println("这里是abc2");
    }
 
}

三、最常用的注解使用

1、最常用注解使用:
①、@BeforeClass & @AfterClass
在运行类之前或之后执行一次,@BeforeClass 中可写入初始数据,@AfterClass 清除数据

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class testng_before_after_class {
 
    //    运行testng_before_after_class类的时,会执行一次
    @BeforeClass
    public void BeforeClass(){
        System.out.println("BeforeClass被运行");
    }
 
    @AfterClass
    public void AfterClass(){
        System.out.println("AfterClass被运行");
    }
 
//    运行每个测试方法进都会被执行到
    @Test
    public void abc(){
        System.out.println("这里是abc");
    }
 
    @Test
    public void abc1(){
        System.out.println("这里是abc1");
    }
 
    @Test
    public void abc2(){
        System.out.println("这里是abc2");
    }
 
}

②、创建xml文件
class name需要与测试的class类名一致 ,一个测试套件可以包含多个类
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--可以同时开启多条线程进行测试任务-->
<suite name="Suite1"  parallel="methods" thread-count="2">
    <test name="test12">
        <classes>
 
            <class name="TestXxyx" >
            </class>

        </classes>
    </test>
</suite>

③、运行testng.xml
在这里插入图片描述
④、控制台打印结果
在这里插入图片描述
2、@AfterMethod & @BeforeMethod

import org.testng.annotations.*;
 
public class testng_method {
//    运行每个测试方法进都会被执行到
    @BeforeMethod
    public void BeforeMethod(){
    System.out.println("BeforeMethod被运行");
}
 
    @AfterMethod
    public void AfterMethod(){
        System.out.println("AfterMethod被运行");
    }
    @Test
    public void abc(){
        System.out.println("这里是abc");
    }
 
    @Test
    public void abc1(){
        System.out.println("这里是abc1");
    }
 
    @Test
    public void abc2(){
        System.out.println("这里是abc2");
    }
 
}

在这里插入图片描述
3、@Test(enabled = false)

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class testng_enable {
 
    @Test(enabled = false)
    public void abc(){
        System.out.println("这里是abc");
    }
 
    @Test
    public void abc1(){
        System.out.println("这里是abc1");
    }
 
    @Test
    public void abc2(){
        System.out.println("这里是abc2");
    }
 
}

在这里插入图片描述
4、执行顺序
①、按xml中方法顺序执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--可以同时开启多条线程进行测试任务-->
<suite name="Suite1"  parallel="methods" thread-count="2">
    <test name="test12">
        <classes>
 
            <class name="testng_enable" >
                    <methods>
                        <include name="abc2" />
                        <include name="abc1" />
                    </methods>
            <!--<class name="testng_base" >-->
            </class>
 
        </classes>
    </test>
</suite>

在这里插入图片描述

②、按默认顺序执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--可以同时开启多条线程进行测试任务-->
<suite name="Suite1"  parallel="methods" thread-count="2">
    <test name="test12" preserve-order="true">
        <classes>
 
            <class name="testng_enable" >
                    <methods>
                        <include name="abc2" />
                        <include name="abc1" />
                    </methods>
            <!--<class name="testng_base" >-->
            </class>
 
        </classes>
    </test>
</suite>

在这里插入图片描述
5、构造参数化@Parameters(“”)

import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
 
public class testng_parameters {
    //参数化
    @Test
    @Parameters("username")
    public void function8(String test1) {
        System.out.println("name == " + test1);
    }
}

6、引入testng断言

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
 
 
public class testng_assert {
 
    @Test
    public void assertTest(){
 
        String str1 = "testerhome";
        String str2 = "testerhome";
        Assert.assertEquals(str1,str2,"判断是否相等");
 
 
        boolean bl = true;
        boolean b2 = false;
        Assert.assertTrue(bl,"判断是否为true");
        Assert.assertFalse(b2,"判断是否为false");
 
 
        Object str3 = null ;
        Assert.assertNull(str3,"判断是否为nul");
        Assert.assertNotNull(str3,"判断是否不为null");
 
    }
}

在这里插入图片描述

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
 
 
public class testng_assert {
 
 
    @Test
    public void assertTest(){
 
        String str1 = "testerhome";
        String str2 = "testerhome1";
        Assert.assertEquals(str1,str2,"判断是否相等");
 
 
        boolean bl = true;
        boolean b2 = false;
        Assert.assertTrue(bl,"判断是否为true");
        Assert.assertFalse(b2,"判断是否为false");
 
 
        Object str3 = null ;
        Assert.assertNull(str3,"判断是否为nul");
        Assert.assertNotNull(str3,"判断是否不为null");
 
    }
}

在这里插入图片描述
6、@Listener
监听器

package Listener;

import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult;

public class CustomListener1 implements IInvokedMethodListener {
    @Override
    public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        System.out.println("beforeInvocation:" + iTestResult.getTestClass().getName() + "-->" + iInvokedMethod.getTestMethod().getMethodName());
    }

    @Override
    public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        System.out.println("beforeInvocation" + iTestResult.getTestClass().getName() + "-->"  + iInvokedMethod.getTestMethod().getMethodName());
    }
}

监听方法

package ListenerDemo;

import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import Listener.CustomListener1;

@Listeners(CustomListener1.class)//通过注释调用监听器
public class ListenerTest {
    @Test(alwaysRun = true)
    public void test() {
        System.out.println("test()");
        Assert.assertTrue(false);
    }

    @Test
    public void test2() {
        System.out.println("test2()");
        Assert.assertTrue(true);
    }
}

testng.xml中的配置

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Regression Test">
    <test name="Application name" preserve-order="false">
        <classes>
            <class name="ListenerDemo.ListenerTest"></class>
        </classes>
    </test>
</suite>

运行testng.xml结果如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小志老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值