【转载】结合testng实现用例失败重跑

【知识图谱】一文看懂知识图谱的搭建实践与科普教程(5万字完结篇) 所有可能的实体对:(“Mate40”,“华为”), (“Mate40”,“手机”), (“华为”,“手机”)。送入关系模型分类,预期输出 (“Mate40”,“华为”): 品牌, (“Mate40”,“手机”): 属于类别, (“华为”,“手机”): 无关系。,定义了图谱中概念和关系的类型层次结构,相当于知识图谱的“纲领”和“schema”。训练完成后,当模型看到新的句子,比如“苹果的MacBook笔记本性能强大”,识别出实体“苹果”(品牌)和“MacBook”(产品)后,就能正确输出关系“品牌”。 阅读详情

点击这里查看原文

===============

1.首先需要在项目中添加如下两个类
TestNGRetry.java

package com.imooc.day04;

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

/**
 * 创建类TestNGRetry,实现IRetryAnalyzer接口,并重写retry()方法
 * 
 * @author HW
 *
 * @date 2021年5月4日 下午4:38:36
 *
 */
public class TestNGRetry implements IRetryAnalyzer {
	private int retryCount = 0;
	private int maxRetryCount = 2;// 失败之后重跑2次

	/**
	 * 一旦测试方法失败,就会调用retry(ITestResult result)方法。
	 * 如果想重新执行失败的测试用例,那么就让此方法返回true,如果不想重新执行测试用例,则返回false。
	 */
	@Override
	public boolean retry(ITestResult result) {
		if (retryCount < maxRetryCount) {
			System.out.println("第 " + (retryCount + 1) + " 次重跑失败,测试用例名称是: " + result.getName());
			retryCount++;
			return true;

		}
		return false;
	}
}

RetryListener.java

package com.imooc.day04;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import org.testng.IAnnotationTransformer;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;

/**
 * 创建类 RetryListener(用例重跑监听器),实现注解转换器IAnnotationTransformer接口,并重写transform()方法,实现用例失败时重跑功能
 * @author HW
 *
 * @date 2021年5月4日 下午4:37:18
 *
 */
public class RetryListener implements IAnnotationTransformer {

	@Override
	public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
		IRetryAnalyzer iRetryAnalyzer = annotation.getRetryAnalyzer();
		System.out.println("iRetryAnalyzer:" + iRetryAnalyzer);
		if(iRetryAnalyzer == null) {
			annotation.setRetryAnalyzer(TestNGRetry.class);
		}
	}

}

2.添加完如上两个类以后,需要在LoginTest.xml文件里面添加对应的监听器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
  <listeners>
  	  <listener class-name="com.imooc.day04.RetryListener"/>
  </listeners>
  <test name="Test">
    <classes>
      <class name="com.imooc.day04.LoginTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

3.测试类LoginTest中有5个测试方法,其中有一个测试方法testLogin1()是测试失败的情况

package com.imooc.day04;

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

public class LoginTest {
	// @Test(retryAnalyzer = TestNGRetry.class)
	@Test
	public void testLogin1() {
		Assert.assertEquals(true, false);
	}
	
	@Test
	public void testLogin2() {
		Assert.assertEquals(true, true);
	}
	
	@Test
	public void testLogin3() {
		Assert.assertEquals(true, true);
	}
	
	@Test
	public void testLogin4() {
		Assert.assertEquals(true, true);
	}
	
	@Test
	public void testLogin5() {
		Assert.assertEquals(true, true);
	}
}

4.执行结果如下:

[TestNG] Running:
  D:\develop\Workspaces\WebProjects\AutoTest\LoginTest2.xml

第 1 次重跑失败,测试用例名称是: testLogin1
第 2 次重跑失败,测试用例名称是: testLogin1

===============================================
Suite
Total tests run: 7, Failures: 3, Skips: 0
===============================================

说明:这个结果显然是有问题的,我们只有5个测试,按照如上的重跑机制,结果里却有7个,失败3个,这是由于这个结果统计不合理,将失败的case也计算在内了。

5.接着创建一个TestNGListener.java的类实现ITestListener 的接口,如下所示:

package com.imooc.day04;

import java.util.Iterator;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class TestNGListener extends TestListenerAdapter {
	@Override
	public void onTestSuccess(ITestResult tr) {
		super.onTestSuccess(tr);
	}

	@Override
	public void onTestFailure(ITestResult tr) {
		super.onTestFailure(tr);
	}

	@Override
	public void onTestSkipped(ITestResult tr) {
		super.onTestSkipped(tr);
	}

	@Override
	public void onTestStart(ITestResult result) {
		super.onTestStart(result);
	}

	@Override
	public void onFinish(ITestContext testContext) {
		super.onFinish(testContext);
		Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator();
		while (listOfFailedTests.hasNext()) {
			ITestResult failedTest = (ITestResult) listOfFailedTests.next();
			ITestNGMethod method = failedTest.getMethod();
			if (testContext.getFailedTests().getResults(method).size() > 1) {
				listOfFailedTests.remove();
			} else {
				if (testContext.getPassedTests().getResults(method).size() > 0) {
					listOfFailedTests.remove();
				}

			}
		}
	}
}

然后在LoginTest.xml文件里面添加对应的监听器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
  <listeners>
  	  <listener class-name="com.imooc.day04.RetryListener"/>
  	  <listener class-name="com.imooc.day04.TestNGListener"/>
  </listeners>
  <test name="Test">
    <classes>
      <class name="com.imooc.day04.LoginTest2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

6.再次执行LoginTest.xml,期望得到下面的结果,但实际上仍是Total tests run: 7, Failures: 3,网上查了好久资料,仍没有得到如下所示的结果。。。

[TestNG] Running:
  D:\develop\Workspaces\WebProjects\AutoTest\LoginTest2.xml

第 1 次重跑失败,测试用例名称是: testLogin1
第 2 次重跑失败,测试用例名称是: testLogin1

===============================================
Suite
Total tests run: 5, Failures: 1, Skips: 0
===============================================

 

2024顶级提示工程工具:提升效率的12个神器 LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。 阅读详情

相关推荐

JAVA单元测试框架-14-实现TestNG失败案例重跑

前面是通过java代码指定重跑,本节是讲解通过实现IAnnotationTransformer接口实现失败案例重跑 创建MyRetry 实现IRetryAnalyzer 接口 package Listener; import org.testng.IRetryAnalyzer; import org.testng.ITestResult; public class MyRetry implements IRetryAnalyzer { // 设置当前失败执行的次数 privat.

程序员路同学 362

grpc安装与简单demo测试

grpc安装: 由于工作需要,最近在学google的rpc开源框架;由于本人菜鸟一枚,而且是从Windows开发转到Linux;由于之前版本控制使用的是svn,没有使用过git,所以从GitHub上下载代码是通过浏览器下载zip格式的压缩文件,折腾了好几天了,发现了各种坑,各种缺少库,各种不知道怎么把这个库给装机器上。对于一个不熟悉Linux的人来说,这个体验简直糟糕透了。没办法了又在机器上装了...

old__captain的博客 4833

如何解决testng执行用例失败自动重跑问题

今天给大家分享一下testng执行用例失败自动重跑问题的解决办法,为什么要写这篇博客?有人会说了,网上找一车一车的,干嘛自己搁这儿写这个。。。 没错,网上是有很多,只是我感觉按照网上的说法去做不一定一次点亮,可能跟我们每个人的理解不一样,也可能是网上说的也不一定都准确,这个大家都能理解,所以呢,老套路:我想用我自己的方式,站在大家也有被此问题困惑的角度写出解决办法,我认为这个是最重要的。好了,废

M.Blog 5996

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1914

从VoLTE高清通话到5G新通话:手把手带你用Wireshark抓包分析QCI 1, 2, 5, 9的建立与切换过程

本文详细解析了从VoLTE高清通话到5G新通话的QCI(QoS Class Identifier)建立与切换过程,通过Wireshark抓包实战演示如何分析QCI 1、2、5、9的承载机制。内容涵盖QCI基础概念、实验环境搭建、VoLTE通话建立过程分析以及5G新通话中的QoS演进,为网络工程师和通信技术爱好者提供实用的技术指南和优化建议。

weixin_30788619的博客 342

失败用例的重跑,实践

1. 在Testng.xml配置文件,在Test标签下增加监听 //增加RetryListener的监听 2.增加RetryListener类 package swiftcoder2_0; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import org.testng.I

chenmo604的专栏 1008

计组实验5:cache大小测量与 cache line 大小测量

前言 今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 头文件,可以在 https://github.com/fabiensanglard/CpuCacheMountainViewer 这里找到。 ⚠ 我没有在 Linux 下试过课本上面的代码。。。 我是在 win10 下测试的。。。 所以 。。。 我并不确定我的代码是否正确。

AKGWSB 's blog 1万+

junit依赖_TestNG之失败重跑&JUnit支持

一.重跑失败的测试用例 每次每个测试套件中有测试用例执行失败,TestNG都会在测试结果路径下生成一个testng-failed.xml文件,这个xml文件包含了一些重跑那些失败方法的必要信息,允许你只执行那些失败的方法,而不需要再次执行所有的测试方法。一个典型的例子如下:java -classpath testng.jar;%CLASSPATH% org.testng.TestN...

weixin_39849239的博客 265

【TC397第2篇】TC397 EB MCAL开发指南:ADS MCAL Demo集成深度解析

通过本文的指导,我们完成了TC397 EB MCAL与ADS的深度集成,并成功运行了一个简单的MCAL Demo。这个案例不仅帮助我们理解了MCAL在实际开发中的应用,同时也展示了ADS作为一个强大的开发工具在嵌入式系统开发中的优势。在接下来的系列文章中,我们将进一步探讨MCAL的高级应用、优化技巧以及更多实用的开发案例。敬请关注,共同探索TC397 EB MCAL开发的更多精彩!

一直在水些技术小文 452

畅游Diffusion数字人(0):专栏文章导航

畅游Diffusion数字人(0):专栏文章导航

沉迷单车的追风少年 1421

Java之Retry重试机制详解

应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作。这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务上传数据后对返回的结果进行处理;第二步拿到第一步结果或者捕捉异常,如果出现错误或异常实现重试上传逻辑,否则继续接下来的功能业务操作。 常规解决方案 try-catch-redo简单重试模式 在包装正常上传逻辑基础上,通过判断返回结果或监听异常决定是否...

weixin_34247032的博客 876

真随机数与伪随机数

前面我们学习了LFSR,这个玩意落地到具体的应用是什么呢?没错是寄存器,这里在网络找到了几个回答,这里做个记录,下面一起来学习一下吧。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1062

testNG-失败用例重跑机制

下面简单介绍下testNG的失败重跑的实现方法: 1.首先编写一个类,实现IRetryAnalyzer类,重写其中的retry方法。 public class TestNGRetry implements IRetryAnalyzer { private int retryCount = 1;//设置当前的重跑次数 private static final int ...

weixin_30509393的博客 358

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

selenium实现失败重运行

UI自动化脚本执行过程中存在非常多的不稳定性,例如网络的不稳定,浏览器无响应等等,这些失败往往并不是产品中的错误。那么这时我们往往需要对执行失败的测试用例进行多次重跑,确认其是否确实失败。 那么失败重跑我们可以通过TestNG的功能来实现。 一旦测试方法失败,就会调用TestNG的IRetryAnalyzer接口的retry方法。如果您想重新执行失败的测试用例,那么就让此方法返回tru...

weixin_30561425的博客 1640

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

testNG-失败用例重跑方法探究

实现IRetryAnalyzer类,重写其中的retry方法public class TestNGRetry implements IRetryAnalyzer { private int retryCount = 1; private static final int maxRetryCount = 3; @Override public boole...

weixin_30918415的博客 161

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能

本文转载自孔庆云kevin《TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能》 使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,下面介绍一下不修改Testng的源码,通过监听器的方式来实现自动截图、重跑、自定义Html结果文件功能。 自动截图功能 1、新建一个Java类继承TestListenerAdapter 2、重写onT

SophiesBlog的博客 827

Re-run failed tests in testng

自动化测试过过程中,有些testcase会因为各种原因失败,比如网络问题/服务器问题/数据库问题/系统问题/浏览器问题等等,作为自动化测试者,我们需要再次执行失败的测试用例,对于testng框架使用者,这里有两种方案来执行失败的用例。 方案一. 使用“testng-failed.xml”来执行失败的测试用例. steps: 1. 在第一次执行完自动化测试之后,刷新项目文件夹。    2. 一...

weixin_30788619的博客 438

testng重跑和框架亮点

testng重跑设置: tr.setAttribute("RETRY", new Integer(count)); //次数 第一种重跑方式:实现retry listener TestngListener:OnTestFailed设置重跑失败数统计,重跑的方法失败后,可以设置状态为skip,或其他 失败截图 RetryListener:设置retry的次数 if (cou...

weixin_30344795的博客 109

光荣之路 做梦的人 testng--失败重跑(五)

背景:因为这里只是想单独展示失败的重跑的案例,所以先暂时把app这块的运行注释掉,只跑一个简单的demo,就一个简单类,类中就3个测试方法,失败重跑的原理是,运行方法是成功状态,就不重跑,如果是失败的,就在继续执行方法,直到他设置的最大重跑次数时就停止失败重跑很关键的是,要先添加这个一个类,实现IRetryAnalyzer 这个方法,以下就是一个retry 类。 这个类RetryListen...

weixin_30565199的博客 127

testng实现用例失败重跑

          转自https://blog.youkuaiyun.com/achang21/article/details/73469623

yeluowuhen的专栏 320

linux下运行testng,关于testNG----转载

TestNG是一个不错的测试框架,尤其是用于模块测试,以及大范围的测试。相对于JUnit来说,更为灵活。随着JUnit4的推出,很多功能都与TestNG相似,但相对于JUnit4,TestNG还是有很多部分是有区别的。TestNG的IDE支持也不错,对于Eclipse,Idea,Ant都有很好的支持。先来看一看怎么使用TestNG,当然首先需要下载TestNG包。目前的版本为5.1,下载地址如下:...

weixin_42510645的博客 414

【转载】TestNG 简易指南

转载---原文地址:http://dev.sei.pku.edu.cn/trac/pkuas/wiki/testng TestNG 简易指南 本文内容包括: • 属性介绍• TestNG 的示例代码 • 运行 TestNG 的 Ant 脚本 • 重新运行前次运行失败的测试用例 • 分布式测试特性 • TestNG 的多线程支持 • 总结 • 参考资料 • 关于作者 随着项目的成

bwgang 921

testNG实现test失败后重复执行,

test失败自动执行大大提高测试结果的准确性, 1、修改testNG源码实现test失败自动执行, 首先获取testng的源码, 获取源代码,构建过程: $ git clone git://github.com/cbeust/testng.git 然后修改src/main/java/org.testng/SuiteRunner.java文件, pri...

weixin_30716141的博客 222

Testng用例失败重新运行

在ui测试用例的运行过程中,发现有很多不确定的因素会导致用例失败,比如网络原因,比如屏幕滑动失败等。想到需要让测试用例,在失败后重新运行来提高测试成功率。 在github找到了一个现有的轮子:arrow 使用方法如下 测试工程中需要引入testng.jar,log4j.jar以及arrow.jar 需要在项目的根目录下加入config.properties文件 testng.xml中加入监听配置...

weixin_30912051的博客 110

testng执行用例失败自动重跑

Some docs to refer to:https://blog.youkuaiyun.com/menofgod/article/details/72846649 转载于:https://www.cnblogs.com/alicegu2009/p/9171586.html

weixin_30342827的博客 91
上一篇: split()分割字符串时,分隔符右侧为空时报ArrayIndexOutOfBoundsException的问题
下一篇: Java Selenium学习笔记(十六):发送邮件
小蝌蚪找玛玛
博客等级 码龄8年 131粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值