原文:https://www.cnblogs.com/starstarstar/p/11305733.html

注解@Test标签

package com.course.testng;

import org.testng.annotations.Test;

public class BasicAnnotation {
@Test
public void testCase01(){
System.out.println("ddd");
}
}

@Test:是最基本的注解,用来把方法标记为测试的一部分,是最基本的注解

@BeforeTest 在<test> 标记内的类所有的测试方法之前运行

@AfterTest 在<test>标记内的类所有的测试方式之后运行

注解@BeforeMethod和@AfterMethod标签

@BeforeMethod
public void beforeMethod(){
System.out.println("在测试方法之前运行");
} @AfterMethod
public void afterMethod(){
System.out.println("在测试方法之后");
}

@BeforeMethod 在每个方法之前运行;@AfterMethod 在每个方法之后运行

@BeforeMethod 在每一个测试方式运行之前运行

@AfterMehod 在每一个测试方法之后运行

注解@BeforeClass和@AfterClass标签

@BeforeClass
public void beforeClass(){
System.out.println("在类之前");
}
@AfterClass
public void afterClass(){
System.out.println("在类运行之后");
}

@BeforeClass 在类之前运行;@AfterClass 在类之后运行

@BeforeClass 在当时类所有测试方法之前运行

@AfterClass 在当前类所有测试方法之后运行

注解@BeforeSuit和@AfterSuit标签

@BeforeSuite
public void beforeSuite(){
System.out.println("在套件suit之前");
}
@AfterSuite
public void afterSuite(){
System.out.println("在套件suit之后");
}  

@BeforeSuite 在此套件所有的测试方式之前运行,

@AfterSuite 在此套件所有的测试方式之后运行

注解运行顺序总结:

package com.course.testng;

import org.testng.annotations.*;

public class BasicAnnotation {

    @Test
public void testCase01(){
System.out.println("ddd");
} @Test
public void testCase02(){
System.out.println("ddd2");
} @BeforeMethod
public void beforeMethod(){
System.out.println("在测试方法之前运行");
} @AfterMethod
public void afterMethod(){
System.out.println("在测试方法之后");
} @BeforeClass
public void beforeClass(){
System.out.println("在类之前");
}
@AfterClass
public void afterClass(){
System.out.println("在类运行之后");
} @BeforeSuite
public void beforeSuite(){
System.out.println("在套件suit之前");
}
@AfterSuite
public void afterSuite(){
System.out.println("在套件suit之后");
}
}

运行结果:beforesuit->beforeclass->beforemethod->方法1->aftermethod->beforemethod->方法2->aftermethod->afterclass->aftersuit

在套件suit之前
在类之前
在测试方法之前运行
ddd
在测试方法之后
在测试方法之前运行
ddd2
在测试方法之后
在类运行之后
在套件suit之后

忽略测试

@Test(enabled = false)
public void testCase02(){
System.out.println("ddd2");
}

在标签@Test后面加关键字enabled = false,该方法就不被执行了

组测试

组测试:方法分组

@Test(groups = "server")
public void testCase02() {
System.out.println("server端测试方法1");
} @Test(groups = "server")
public void testCase03() {
System.out.println("server端测试2");
} @BeforeGroups("server")
public void beforeGroups() {
System.out.println("***这个是组运行之前的方法");
} @AfterGroups("server")
public void afterGroups() {
System.out.println("这个是组运行之后的方法***");
}
  1. 在注解@Test后加groups="组名" ,一个组的方法,都要加上
  2. 如果需要@BeforeGroups和@AfterGroups这两个注解,要在这两个注解后,加上指定的组名("组名")
  1. @BeforeGroups 在当前组所有测试方式运行之前运行
  2. @AfterGroups 在当前组所有测试方式之后运行

组测试:类分组

  1. 在每个类上方加注解@Test
  2. 编写对应的xml文件,其中可以指定运行全部,也可以指定运行某一个分组
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="suitename">
<!--运行所有类-->
<test name="runAll">
<classes>
<class name="com.course.testng.groups.Groups1"></class>
<class name="com.course.testng.groups.Groups2"></class>
<class name="com.course.testng.groups.Groups3"></class>
</classes>
</test>
<!--运行指定的分组-->
<test name="runGroup1">
<groups>
<run>
<include name="client"></include>
</run>
</groups>
<classes>
<class name="com.course.testng.groups.Groups1"></class>
<class name="com.course.testng.groups.Groups2"></class>
</classes>
</test> </suite>

异常测试

//异常测试
@Test(expectedExceptions = RuntimeException.class)
public void testCase01() {
System.out.println("Groups1-01");
throw new RuntimeException();
}

@Test(expectedExceptions = 异常类),放在方法上

依赖测试

方法二依赖方法一:先执行方法一,如果方法一失败了,方法二就不执行了

@Test
public void testCase02() {
System.out.println("Groups1-testCase02");
throw new RuntimeException();
} @Test(dependsOnMethods = {"testCase02"})
public void testCase03() {
System.out.println("方法三");
}

@Test(dependsOnMethods = {"被依赖的方法"})

多线程测试

一、使用xml文件实现

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="threadSuiteName" parallel="methods" thread-count="2">
<!--多线程的级别是method方法级别的:parallel="methods"-->
<!--多线程的数量是2:thread-count="2"-->
<!--
tests级别:不同的test tag 下的用例,可以在不同的线程下执行;相同的test tag下的用例,只能在同一个线程中执行
classes级别:不同的class tag 下的用例,可以在不同的线程下执行;相同的class tag下的用例,只能在同一个线程中执行
methods级别:所有用例都可以在不同线程中执行
thread-count:代表最大并发线程数
xml:这种使用xml配置的多线程,不能指定线程池,只能在方法上指定线程池
-->
<test name="thread">
<classes>
<class name="com.course.testng.multiThread.Thread01"></class>
<class name="com.course.testng.BasicAnnotation"></class>
</classes>
</test>
</suite>

超时测试

 @Test(timeOut = 3000) //在3000毫秒,期望得到响应值
public void test01() throws InterruptedException {
Thread.sleep(2000); //sleep了2000毫秒,在3000内有响应值,该用例通过
} @Test(timeOut = 3000) //在3000毫秒,期望得到响应值
public void test02() throws InterruptedException {
Thread.sleep(3500); //3500毫秒之后,才响应,该用例报错
}

@Test(timeOut = 毫秒数) 表示期望多少毫秒内,取得响应值;如果没有,该用例就报错  

  

  

  

  

  

  

  

  

  

  

  

  

(一)TestNG-常用注解参数的更多相关文章

  1. 【转】TestNG常用注解

    http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...

  2. TestNG常用注解

    原文链接:https://www.yiibai.com/testng/basic-annotations.html    以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...

  3. swagger2的常用注解,传递参数的注意使用方法

    背景介绍: 刚开始的时候,在controller层使用@RequestParam的时候,发现这个参数是必须要输入值的,但是我们有时候必须查询的时候允许参数为空,使用这个注解就不行了. 在集成了swag ...

  4. 结合参数接收响应转换原理讲解SpringBoot常用注解

    一.常用注解回顾 1.1 @RequestBody与@ResponseBody //注意并不要求@RequestBody与@ResponseBody成对使用. public @ResponseBody ...

  5. 16 SpringMVC 的请求参数的绑定与常用注解

    1.SpringMVC 绑定请求参数 (1)支持的数据类型 基本类型参数: 包括基本类型和 String 类型POJO 类型参数: 包括实体类,以及关联的实体类数组和集合类型参数: 包括 List 结 ...

  6. testNG 常用的注解

    常用注解介绍: @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次 @AftereSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次 @BeforeClass  ...

  7. testng 的常用注解

    常用注解如下: @BeforeSuite: 此注解的方法会在当前测试集合中的任一测试用例前执行 @AfterSuite: 此注解的方法会在当前测试集合中的所有测试程序结束后执行 @BeforeTest ...

  8. TestNG基本注解

    TestNG的注解: 注解 描述 @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中. @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后. @Befor ...

  9. springmvc常用注解与类型转换

    springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...

  10. SpringMVC常用注解,返回方式,路径匹配形式,验证

    常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...

随机推荐

  1. 还不会K8S吗?先从kubeadm开始吧

    目录 1. 准备工作 1.1 机器准备 1.2 系统配置 1.2.1 主机名及域名解析 1.2.2 免密登录 1.2.3 配置yum源 1.2.4 安装必要依赖包 1.2.5 关闭防火墙.SELinu ...

  2. 阿里云部署Java开发环境

    阿里云部署Java网站和微信开发调试心得技巧(上) 本文主要是记录在阿里云服务器从零开始搭建Java执行环境并且部署web project的过程,方面以后查阅. 一.申请阿里云服务器 购买阿里云服务器 ...

  3. Javascript书写位置

    1.行内式js(很少使用) 以on开头,如onclick HTML中推荐双引号,JS推荐单引号 2.内嵌式js(常用) <script> alert('hello world'); < ...

  4. Java IO(五)字节流 FileInputStream 和 FileOutputStream

    Java IO(五)字节流 FileInputStream 和 FileOutputStream 一.介绍 字节流 InputStream 和 OutputStream 是字节输入流和字节输出流的超类 ...

  5. 五、Java - 集合

    一.集合 Java 中的集合类存放于 java.util 包中,是一个存放对象的容器. 集合存放的是对对象的引用,对象本身还是存在于 JVM 堆内存中. 存放的是对象,即引用数据类型,对于基本数据类型 ...

  6. axios发送post form请求

    axios发送post form请求 只需修改url和data即可 axios({ url: '/user', method: 'post', data: { firstName: 'Fred', l ...

  7. ASP.NET Core 3.x API版本控制

    前言 一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发. 我们其 ...

  8. 快速搭建基于Spring Boot + Spring Security 环境

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.Spring Security 权限管理框架介绍 简介: Spring Security 提供了基于 ...

  9. ASP.NET防止自己网站的资源被盗(通过IHttpHandler 带样例说明)

    我这里用的图片被盗举例子 一个正常的网页 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind ...

  10. Java实现 蓝桥杯 算法提高 学霸的迷宫

    算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...