原理:

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(断言失败不中断继续执行)相关推荐

  1. Pytest之pytest-assume同用例多断言,断言1失败会执行后续代码及断言2

    一般我们做自动化测试时,一个用例会写多个断言,当第一个断言失败后,后面的代码就不会执行了,于是我们引进了pytest-assume插件可以解决断言失败后继续断言的问题. 一.安装依赖包 pip ins ...

  2. Python Pytest自动化测试 断言失败后续代码继续执行

    Time will tell. 做自动化测试时我们一般会一个用例写多个断言,而当第一个断言失败后,后面的代码就不会执行.这时我们可以引进pytest-assume插件来解决这些问题. 一.安装 pip ...

  3. bash忽略错误继续执行_shell 执行命令失败则中断执行 类似断言

    编写shell脚本时,如果需要在某个命令执行失败则终止执行,可以使用|| 和 && 运算符结合 正常执行 cd ~ || exit 终止执行 cd ~xxxx || exit echo ...

  4. Jmeter断言-所有断言讲解

    Jmeter断言-所有断言讲解 jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似: 用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中 ...

  5. junit断言_JUnit断言

    junit断言 JUnit Assertions allows us to write effective test methods. JUnit 5 is the latest version an ...

  6. Jmeter断言-响应断言

    1:Jmeter断言-响应断言 1.1:添加线程组 1.2:添加http请求 1.3:在http请求下添加"响应断言" 1.4:添加查看结果树和Debug取样器 1:断言成功的结果 ...

  7. php7 断言,PHP 断言(assert) 详解

    PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE.本文带你重新认识 PHP assert() 函数的神(Qi)通(Yin)广(Ji)大(Qiao). 本文基于 PHP Version ...

  8. 验证断言(立即断言并行断言)

    目录 1.何为断言 2.断言的作用: 3.断言的种类 3.1立即断言 3.2并发断言 4.断言层次结构 4.1 sequence 序列 4.2 property 序列 5.sequence和prope ...

  9. php 断言,PHP 断言(assert) 详解

    PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE.本文带你重新认识 PHP assert() 函数的神(Qi)通(Yin)广(Ji)大(Qiao). 本文基于 PHP Version ...

最新文章

  1. 学习笔记:部署趋势科技企业安全无忧版——服务器端和web控制台的安装(一)...
  2. CentOS7搭建LNMP--编译安装
  3. mysql自动备份脚本,及系统定时备份设置!
  4. ResourceID(frameworks/base/libs/utils/README)
  5. VMWare vijava –“用户名或密码不正确”异常的奇怪情况
  6. superagent返回结果乱码
  7. 2008php多版本共存,ECS Windows 2008 IIS如何同时配置多版本的php
  8. netsh 禁用端口
  9. 【ML小结12】隐马尔科夫模型HMM
  10. 2020-8-4 Codeforces摸鱼报告
  11. tomcat反向代理,监控,性能优化详细步骤
  12. Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
  13. msm8937+android7.1.1显示驱动解决显示残影问题
  14. zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP
  15. 智能家居创意产品一智能插座
  16. 最好听的钢琴曲排行榜 世界上最好听的钢琴曲
  17. vue.js电商项目--美丽购物街day01首页制作
  18. SVN:Cannot negotiate authentication mechanism问题
  19. 机器人机构学基础(朱大昌)第四章部分习题答案
  20. 利用指示器随机变量计算掷n次骰子总和的期望值

热门文章

  1. javascript es6常用语法
  2. SpringBoot启动报错Consider defining a bean of type ‘com.test.springmvc.dao.xx‘ in your configuration.
  3. vscode配置备忘录
  4. Leetcode PHP题解--D35 876. Middle of the Linked List
  5. P2P技术详解(一):NAT详解——详细原理、P2P简介
  6. 分布式存储系统-Ceph简单分析
  7. solidworks打开大型装配体特别卡。跑不满内存、CPU、GPU。
  8. 软件测试--白盒测试、黑盒测试、α测试、β测试
  9. 浅谈微信公众号怎么涨粉丝
  10. verilog设计简易正弦波信号发生器_信号发生器入门手册-白皮书 (上)