(一)TestNG-常用注解参数
原文: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("这个是组运行之后的方法***");
}
- 在注解@Test后加groups="组名" ,一个组的方法,都要加上
- 如果需要@BeforeGroups和@AfterGroups这两个注解,要在这两个注解后,加上指定的组名("组名")
- @BeforeGroups 在当前组所有测试方式运行之前运行
- @AfterGroups 在当前组所有测试方式之后运行
组测试:类分组
- 在每个类上方加注解@Test
- 编写对应的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-常用注解参数的更多相关文章
- 【转】TestNG常用注解
http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...
- TestNG常用注解
原文链接:https://www.yiibai.com/testng/basic-annotations.html 以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...
- swagger2的常用注解,传递参数的注意使用方法
背景介绍: 刚开始的时候,在controller层使用@RequestParam的时候,发现这个参数是必须要输入值的,但是我们有时候必须查询的时候允许参数为空,使用这个注解就不行了. 在集成了swag ...
- 结合参数接收响应转换原理讲解SpringBoot常用注解
一.常用注解回顾 1.1 @RequestBody与@ResponseBody //注意并不要求@RequestBody与@ResponseBody成对使用. public @ResponseBody ...
- 16 SpringMVC 的请求参数的绑定与常用注解
1.SpringMVC 绑定请求参数 (1)支持的数据类型 基本类型参数: 包括基本类型和 String 类型POJO 类型参数: 包括实体类,以及关联的实体类数组和集合类型参数: 包括 List 结 ...
- testNG 常用的注解
常用注解介绍: @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次 @AftereSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次 @BeforeClass ...
- testng 的常用注解
常用注解如下: @BeforeSuite: 此注解的方法会在当前测试集合中的任一测试用例前执行 @AfterSuite: 此注解的方法会在当前测试集合中的所有测试程序结束后执行 @BeforeTest ...
- TestNG基本注解
TestNG的注解: 注解 描述 @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中. @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后. @Befor ...
- springmvc常用注解与类型转换
springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...
- SpringMVC常用注解,返回方式,路径匹配形式,验证
常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...
随机推荐
- 【新手引导】MAC如何允许安装任何来源的软件(安装第三方软件/应用)
1 打开系统偏好设置,找到安全性与隐私(第一行第六个) 2 进入安全性与隐私,点击左下角一个锁的按钮,输入自己电脑密码,允许从以下位置下载的应用: 新电脑应该是两个选项 1.APP store 2.A ...
- web项目——启动时tomcat报错:Server Tomcat v7.0 Server at localhost failed to start.
报错信息:Server Tomcat v7.0 Server at localhost failed to start. 报错截图: 原因分析:在使用SSM框架时,生成的mapping与系统配置文件不 ...
- PHP关于syntax error语法错误的问题(Parse error: syntax error, unexpected end of file in xxxxxxxx)
在php程序出现类似 Parse error: syntax error, unexpected end of file in xxxxxxxx on line xx 的错误. 如图 如果发现php ...
- 允许远程用户登录访问mysql
方法1.本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改为”%” mysql -u root -proot use mysql; ...
- ubuntu18.04.4安装k8s
k8s部署 1.集群所有主机关闭swap sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab 如果重启后swap还是自动挂载执行sy ...
- 阿里P9精心编写高并发设计手册,来看大厂是如何进行系统设计
在看这篇文章的应该都是IT圈的朋友吧,不知道你们有没有考虑过这样几件事: 淘宝双11的剁手狂欢为什么天猫没崩掉? 为什么滴滴打车高峰如何滴滴依旧可以平稳运行? 为什么疫情期间,钉钉能支撑那么多人同时上 ...
- vue采用history路由的服务器部署问题
发现部署问题 在部署的时候发现打开的页面是空白 之前部署原理 之前的页面都是作为静态文件形式打包上传到服务器上 http://www.xiedashuaige.cn/bolg2.0/#/home 就和 ...
- [COCOS2DX-LUA]0-003.根据COCOS2DX热更新
一.最近有需求就是要基于COCOS2DX-LUA进行游戏的增量更新,找了资料,发现了COCOS2DX有自带一个热更新的类,就是AssetsManager,但是该接口对于我来说有以下的缺陷 1.版本号在 ...
- 拨号vps,拨号vps是什么意思干什么用的,如何使用拨号vps
首先,拨号vps是动态IP的VPS.vps虚拟服务器.拨号服务器.有些业务,如刷单.投票等操作对ip地址有限制,不能过多的使用.而拨号VPS通过拨号上网,每拨号一次号,就变一次IP,完成ip地址的动态 ...
- mybatis精讲(七)--动态sql
目录 常用标签 if元素 choose元素 trim元素 forearch bind元素 在我们传统的开发中我们会通过拼接sql达到数据库的操作.java中的拼接不仅效率低下而且代码很长不易维护.而M ...