java verify_JAVA结合testng断言verify(断言失败不中断继续执行)
原理:
1.自已构造一个断言类,把Assert.assertEquals给try catch住。
2.利用testng的监听类在测试方法运行结束后进行分析。
代码:
断言类:
package com.demo;
import java.util.ArrayList;
import java.util.List;
import org.testng.Assert;
public class Assertion {
public static boolean flag = true;
public static List errors = new ArrayList();
public static void verifyEquals(Object actual, Object expected){
try{
Assert.assertEquals(actual, expected);
}catch(Error e){
errors.add(e);
flag = false;
}
}
public static void verifyEquals(Object actual, Object expected, String message){
try{
Assert.assertEquals(actual, expected, message);
}catch(Error e){
errors.add(e);
flag = false;
}
}
}
监听类:
package com.demo;
import java.util.ArrayList;
import java.util.List;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class AssertionListener extends TestListenerAdapter {
@Override
public void onTestStart(ITestResult result) {
Assertion.flag = true;
Assertion.errors.clear();
}
@Override
public void onTestFailure(ITestResult tr) {
this.handleAssertion(tr);
}
@Override
public void onTestSkipped(ITestResult tr) {
this.handleAssertion(tr);
}
@Override
public void onTestSuccess(ITestResult tr) {
this.handleAssertion(tr);
}
private int index = 0;
private void handleAssertion(ITestResult tr){
if(!Assertion.flag){
Throwable throwable = tr.getThrowable();
if(throwable==null){
throwable = new Throwable();
}
StackTraceElement[] traces = throwable.getStackTrace();
StackTraceElement[] alltrace = new StackTraceElement[0];
for (Error e : Assertion.errors) {
StackTraceElement[] errorTraces = e.getStackTrace();
StackTraceElement[] et = this.getKeyStackTrace(tr, errorTraces);
StackTraceElement[] message = new StackTraceElement[]{new StackTraceElement("message : "+e.getMessage()+" in method : ", tr.getMethod().getMethodName(), tr.getTestClass().getRealClass().getSimpleName(), index)};
index = 0;
alltrace = this.merge(alltrace, message);
alltrace = this.merge(alltrace, et);
}
if(traces!=null){
traces = this.getKeyStackTrace(tr, traces);
alltrace = this.merge(alltrace, traces);
}
throwable.setStackTrace(alltrace);
tr.setThrowable(throwable);
Assertion.flag = true;
Assertion.errors.clear();
tr.setStatus(ITestResult.FAILURE);
}
}
private StackTraceElement[] getKeyStackTrace(ITestResult tr, StackTraceElement[] stackTraceElements){
List ets = new ArrayList();
for (StackTraceElement stackTraceElement : stackTraceElements) {
if(stackTraceElement.getClassName().equals(tr.getTestClass().getName())){
ets.add(stackTraceElement);
index = stackTraceElement.getLineNumber();
}
}
StackTraceElement[] et = new StackTraceElement[ets.size()];
for (int i = 0; i < et.length; i++) {
et[i] = ets.get(i);
}
return et;
}
private StackTraceElement[] merge(StackTraceElement[] traces1, StackTraceElement[] traces2){
StackTraceElement[] ste = new StackTraceElement[traces1.length+traces2.length];
for (int i = 0; i < traces1.length; i++) {
ste[i] = traces1[i];
}
for (int i = 0; i < traces2.length; i++) {
ste[traces1.length+i] = traces2[i];
}
return ste;
}
}
测试类:
package com.demo;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({com.demo.AssertionListener.class})
public class Test14 {
@Test
public void testAssert3(){
Assertion.verifyEquals(2, 3, "比较两个数是否相等:");
Assertion.verifyEquals(1, 2, "比较两个数是否相等:");
}
@Test
public void testAssert4(){
Assertion.verifyEquals(4, 3, "比较两个数是否相等:");
Assertion.verifyEquals(2, 2, "比较两个数是否相等:");
}
}
java verify_JAVA结合testng断言verify(断言失败不中断继续执行)相关推荐
- Pytest之pytest-assume同用例多断言,断言1失败会执行后续代码及断言2
一般我们做自动化测试时,一个用例会写多个断言,当第一个断言失败后,后面的代码就不会执行了,于是我们引进了pytest-assume插件可以解决断言失败后继续断言的问题. 一.安装依赖包 pip ins ...
- Python Pytest自动化测试 断言失败后续代码继续执行
Time will tell. 做自动化测试时我们一般会一个用例写多个断言,而当第一个断言失败后,后面的代码就不会执行.这时我们可以引进pytest-assume插件来解决这些问题. 一.安装 pip ...
- bash忽略错误继续执行_shell 执行命令失败则中断执行 类似断言
编写shell脚本时,如果需要在某个命令执行失败则终止执行,可以使用|| 和 && 运算符结合 正常执行 cd ~ || exit 终止执行 cd ~xxxx || exit echo ...
- Jmeter断言-所有断言讲解
Jmeter断言-所有断言讲解 jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似: 用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中 ...
- junit断言_JUnit断言
junit断言 JUnit Assertions allows us to write effective test methods. JUnit 5 is the latest version an ...
- Jmeter断言-响应断言
1:Jmeter断言-响应断言 1.1:添加线程组 1.2:添加http请求 1.3:在http请求下添加"响应断言" 1.4:添加查看结果树和Debug取样器 1:断言成功的结果 ...
- php7 断言,PHP 断言(assert) 详解
PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE.本文带你重新认识 PHP assert() 函数的神(Qi)通(Yin)广(Ji)大(Qiao). 本文基于 PHP Version ...
- 验证断言(立即断言并行断言)
目录 1.何为断言 2.断言的作用: 3.断言的种类 3.1立即断言 3.2并发断言 4.断言层次结构 4.1 sequence 序列 4.2 property 序列 5.sequence和prope ...
- php 断言,PHP 断言(assert) 详解
PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE.本文带你重新认识 PHP assert() 函数的神(Qi)通(Yin)广(Ji)大(Qiao). 本文基于 PHP Version ...
最新文章
- 学习笔记:部署趋势科技企业安全无忧版——服务器端和web控制台的安装(一)...
- CentOS7搭建LNMP--编译安装
- mysql自动备份脚本,及系统定时备份设置!
- ResourceID(frameworks/base/libs/utils/README)
- VMWare vijava –“用户名或密码不正确”异常的奇怪情况
- superagent返回结果乱码
- 2008php多版本共存,ECS Windows 2008 IIS如何同时配置多版本的php
- netsh 禁用端口
- 【ML小结12】隐马尔科夫模型HMM
- 2020-8-4 Codeforces摸鱼报告
- tomcat反向代理,监控,性能优化详细步骤
- Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
- msm8937+android7.1.1显示驱动解决显示残影问题
- zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP
- 智能家居创意产品一智能插座
- 最好听的钢琴曲排行榜 世界上最好听的钢琴曲
- vue.js电商项目--美丽购物街day01首页制作
- SVN:Cannot negotiate authentication mechanism问题
- 机器人机构学基础(朱大昌)第四章部分习题答案
- 利用指示器随机变量计算掷n次骰子总和的期望值
热门文章
- javascript es6常用语法
- SpringBoot启动报错Consider defining a bean of type ‘com.test.springmvc.dao.xx‘ in your configuration.
- vscode配置备忘录
- Leetcode PHP题解--D35 876. Middle of the Linked List
- P2P技术详解(一):NAT详解——详细原理、P2P简介
- 分布式存储系统-Ceph简单分析
- solidworks打开大型装配体特别卡。跑不满内存、CPU、GPU。
- 软件测试--白盒测试、黑盒测试、α测试、β测试
- 浅谈微信公众号怎么涨粉丝
- verilog设计简易正弦波信号发生器_信号发生器入门手册-白皮书 (上)