【TestNG】(4) 重試機制與監聽器的使用

在UI自動化測試用例執行過程中,經常會有很多不確定的因素導致用例執行失敗,比如網絡原因、環境問題等,所以我們有必要引入重試機制(失敗重跑),來提高測試用例成功率。

在不寫代碼的情況沒有提供可配置方式,需要自己實現TestNG提供的接口,并以監聽器的方式提供出來才可使用。

一、結合監聽器配置

step1:新建Java類TestngRetry實現IRetryAnalyzer接口,復寫retry方法

IRetryAnalyzer接口作用:實現此接口可以讓失敗的用例運行重試機制

public class TestngRetry implements IRetryAnalyzer {private static Logger logger = Logger.getLogger(TestngRetry.class);// 表示當前所重試的次數public static int retryCount = 1;// 表示重試最大次數限制public int maxRetryCount = 2;@Overridepublic boolean retry(ITestResult result) {// TODO Auto-generated method stubif (retryCount <= maxRetryCount) {logger.info("開始重試第" + "【" + retryCount + "】次" );retryCount++;// 如果返回為true表示執行重試機制return true;}// 如果返回為false表示不執行重試機制return false;} 
}

step2:新建Java類RetryListener實現IAnnotationTransformer接口,復寫transform方法

IAnnotationTransformer接口作用:在TestNG執行過程中動態修改@Test注解的參數

public class RetryListener implements IAnnotationTransformer {@Overridepublic void transform(ITestAnnotation annotation, Class testClass, ConstructortestConstructor, Method testMethod) {// TODO Auto-generated method stubIRetryAnalyzer iRetryAnalyzer = annotation.getRetryAnalyzer();if (iRetryAnalyzer == null) {annotation.setRetryAnalyzer(TestngRetry.class);} } 
}

step3:在testng.xml配置文件中添加RetryListener監聽器即可

 <listener class-name="com.lemon.listener.RetryListener"></listener>

引入的問題

在運行重試的機制的時候我們會發現一個問題:

如果有引入dataprovider,那么dataprovider的第二組數據以后的用例失敗后是不會正常的運行重試機制的

原因:

TestNG自帶BUG,新建類TestResultListener繼承于TestListenerAdapter,重寫里面的onTestSuccess()和onTestFailure方法,在里面將當前的重試次數給置為1

public class TestResultListener extends TestListenerAdapter{@Overridepublic void onTestSuccess(ITestResult tr) {// TODO Auto-generated method stubsuper.onTestSuccess(tr);System.out.println("當前用例執行成功");//修復了TestNG的bug:dataprovider和重試機制沖突問題//用例重試機制有這種情況:當他運行到第一次重試or第二次重試or第三次(沒有達到最大的重試次數的時候),有可能執行成功//用例此時會成功TestngRetry.currentRetryCount=1; }@Overridepublic void onTestFailure(ITestResult tr) {// TODO Auto-generated method stubsuper.onTestFailure(tr);System.out.println("當前用例執行失敗");TestngRetry.currentRetryCount=1; }@Overridepublic void onTestSkipped(ITestResult tr) {// TODO Auto-generated method stubsuper.onTestSkipped(tr);System.out.println("當前用例執行跳過");} 
}

二、不配置監聽器

public class MyRetry implements IRetryAnalyzer {private int retryCount = 0;private static final int maxRetryCount = 3;@Overridepublic boolean retry(ITestResult result) {if (retryCount < maxRetryCount) {retryCount++;return true;}//如果多個@Test方法中用了該注解,因為testng的bug,它new的是同一個MyRetry對象//那么count不清0會報錯,因為是一個MyRetry對象,可以人為置為0,但是官網不推薦這么做retryCount = 0return false;}
}使用重試:
//在用例類里面 添加重試屬性@Test(retryAnalyzer = MyRetry.class)public void failedLogin3() {}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716769.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql 慢查詢日志

查詢是否開啟慢SQL日志 show variables like %slow_query_log; 開啟慢查詢日志 set global slow_query_logON; 可以通過修改MySQL的配置my.cfg或者my.ini永久生效 slow_query_logON # 開啟慢查詢日志開關 slow_query_log_file/var/lib/mysql/alvin-slow.log # 慢查詢日志…

1.2 在卷積神經網絡中,如何計算各層感受野的大小

1.2 在卷積神經網絡中&#xff0c;如何計算各層感受野的大小 分析與解答&#xff1a; 在卷積神經網絡中&#xff0c;由于卷積的局部連接性&#xff0c;輸出特征圖上的每個節點的取值&#xff0c;是由卷積核在輸入特征圖對應位置的局部區域內進行卷積而得到的&#xff0c;因此這…

COM - IWbemClassObject對象屬性的遍歷

文章目錄 COM - IWbemClassObject對象屬性的遍歷概述筆記場景封裝好的函數bool CWmiBase::enumObjVaule(IWbemClassObject* obj, std::wstring& val)bool CWmiBase::appendVarToString(BSTR& strName, VARIANT& var, std::wstring& val)bool CWmiBase::get_var…

【筆試強訓錯題選擇題】Day5.習題(錯題)解析

文章目錄 前言 錯題題目 錯題解析 總結 前言 錯題題目 1. ? ? 2. 3. ? 4. ? 5. ? 錯題解析 1. 移位運算符的使用 2. 3. 4. 5. 總結

如何用TCC實現分布式事務?

TCC事務介紹 TCC&#xff08;Try-Confirm-Cancel&#xff09;是除可靠消息隊列以外的另一種常見的分布式事務機制&#xff0c;它是由數據庫專家帕特 赫蘭德&#xff08;Pat Helland&#xff09;在2007年撰寫的論文《Life beyond Distributed Transactions: An Apostate’s Op…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的體育賽事目標檢測系統(Python+PySide6界面+訓練代碼)

摘要&#xff1a;開發和研究體育賽事目標檢測系統對于增強體育分析和觀賞體驗至關重要。本篇博客詳細講述了如何運用深度學習技術構建一個體育賽事目標檢測系統&#xff0c;并提供了完整的實現代碼。系統基于先進的YOLOv8算法&#xff0c;對比了YOLOv7、YOLOv6、YOLOv5的性能&a…

【webrtc】p2p_transport_channel 中忽略Hyper-V

【win11】更改網絡適配器設置 刪掉了hype-v,這時候wsl2 打不開了,但是重啟后,還是存在hyper-v那么,讓webrtc自己不適用hyper-v的網絡Hyper-V 的全程:Hyper-V Virtual Ethernet Adapter https://github.com/SophistSolutions/Stroika/blob/2cd5e8bf4ee01cb5c423367b4df628f…

MFC 模態對話框退出機制的探究

一位讀者問了這樣一個問題: ” 如果我創建了一個可見的模態對話框,卻對用戶來說不可用。舉個例子,假設我在程序中的其他位置收到一個事件,并且我從事件中調用模態 CDialog 上的 DestroyWindow。我注意到 OnDestroy 是在 CDialog 上調用的,但在將 WM_QUIT 消息發送到模態對…

在MyBatis中自定義JsonTypeHandler

在MyBatis中使用自定義的JsonTypeHandler 在處理數據庫中的JSON字段時&#xff0c;我們經常需要將JSON字符串映射到Java對象&#xff0c;或者將Java對象序列化為JSON字符串以存儲在數據庫中。MyBatis作為一個流行的Java持久層框架&#xff0c;允許我們通過自定義類型處理器&am…

爬蟲入門到精通_實戰篇7(Requests+正則表達式爬取貓眼電影)_ 抓取單頁內容,正則表達式分析,保存至文件,開啟循環及多線程

1 目標 貓眼榜單TOP100&#xff1a;https://www.maoyan.com/board 2 流程框架 抓取單頁內容&#xff1a;利用requests請求目標站點&#xff0c;得到單個網頁HTML代碼&#xff0c;返回結果。正則表達式分析&#xff1a;根據HTML代碼分析得到電影名稱,主演,上映時間,評分,圖片…

跨域問題與解決方法

跨域問題與解決方法 同源策略 瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協議域名端口"三者相同&#xff0c;即便兩個不同的域名指向同一個ip地址&#xff0c;也非同源。 同源策略限制以下幾種行為&#xff1a; Cookie、LocalStorage 和 IndexDB 無法讀取 DO…

C語言中的分支和循環語句:從入門到精通

分支和循環語句 1. 前言2. 預備知識2.1 getchar函數2.2 putchar函數2.3 計算數組的元素個數2.4 清屏2.5 程序的暫停2.6 字符串的比較 3. 結構化3.1 順序結構3.2 分支結構3.3 循環結構 4. 真假性5. 分支語句&#xff08;選擇結構&#xff09;5.1 if語句5.1.1 語法形式5.1.2 else…

Java網絡通信UDP

目錄 網絡通信基礎 UDP通信 服務器 1.想要使用UDP通信 要先打開DatagramSocket文件 端口號可以手動指定或系統隨機分配 2.阻塞等待接收客戶端數據&#xff1b;創建DatagramPacket接收客戶端傳來的數據 3.處理客戶端傳來的數據&#xff0c;并進行業務處理&#xff08;這里…

MySQL 教程 2.4

MySQL UNION 操作符 本教程為大家介紹 MySQL UNION 操作符的語法和實例。 描述 MySQL UNION 操作符用于連接兩個以上的 SELECT 語句的結果組合到一個結果集合&#xff0c;并去除重復的行。 UNION 操作符必須由兩個或多個 SELECT 語句組成&#xff0c;每個 SELECT 語句的列數…

Python降維數據庫之umap使用詳解

概要 在數據科學和機器學習領域,數據通常是高維度的,而高維度數據不僅難以可視化,還會增加建模的復雜性。降維是一種處理高維數據的關鍵技術,而Python UMAP(Uniform Manifold Approximation and Projection)是一種強大的降維工具,它在保留數據結構的同時,將高維數據映…

uni-app引用外部js文件

全局引用 在App.vue文件中添加如下代碼 這樣在全局所有頁面中都可以直接使用該外部js中的函數 onLaunch: function() {var script document.createElement(script);script.src "https://www.test.com/api/testapi.js";document.body.appendChild(script); }, 單…

【IDEA+通義靈碼插件】實現屬于你的大模型編程助手

目錄 1.前言 2.下載安裝 3.解釋代碼 4.生成單元測試 5.生成注釋 6.智能補全 1.前言 大模型到底該以一種什么方式落地&#xff0c;從而嵌入我們的工作當中&#xff0c;助力我們工作效率的提升&#xff0c;其實最好的方式也許就是虛擬助手的方式&#xff0c;就像鋼鐵俠的&…

【OpenCV基礎(三)】Ubuntu系統下EasyPR環境配置

環境配置 1、資源下載2、環境配置2.1、1、將EasyPR壓縮包拷貝到Ubuntu 三種方法任選一種2.2、解壓得到EasyPR文件夾(文件夾一層進入后EasyPR資源內容)2.3、終端命令修改權限**chmod -R 777 ./ EasyPR**2.4、查找EasyPR/include/easypr/config.h&#xff0c;使用gedit方式打開2.…

uni-app app實現web-view H5圖片長按下載

問題和使用場景描述&#xff1a; uniapp app web-view中圖片無法長按保存&#xff0c;IOS下是正常的&#xff0c;但是Android下長按無反應 解決方案&#xff1a; 下載mui.min.js&#xff0c;放到項目中的static下(下載見最上面的壓縮包) 在static目錄下新建script.js mui.…

vue2本地開發環境正常,生產環境下this.$router.push({ name: ‘login‘ })不跳轉

如果在Vue.js 2中在本地開發環境下正常運行,但在生產環境下使用??this.$router.push({ name: login })??不起作用,可能有幾個原因需要檢查和解決: 路由配置問題: 確保你的路由配置正確,特別是確保在生產環境中,路由的配置和本地開發環境一致。檢查是否正確設置了name…