首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Selenium 自動化測試:Java 封裝軟斷言實現失敗不中斷、批量驗證最終匯總

     編輯:Java 綜合教學

硬斷言與軟斷言的差異

  • 硬斷言:Assert.assertEquals 失敗即拋出 AssertionError,測試立即終止
  • 軟斷言:捕獲異常、記錄失敗、繼續執行,最後統一判定測試結果

自定義軟斷言工具類

package com.baidu.www;

import org.testng.Assert;

public class AssertionUtil {
    private static boolean flag = true;  // 全局標誌位

    /** 驗證兩值相等,可選錯誤信息 */
    public static void verifyEquals(Object actual, Object expected) {
        try {
            Assert.assertEquals(actual, expected);
        } catch (Error e) {
            flag = false;
            System.err.println("[Soft Assert Fail] " + e.getMessage());
        }
    }

    public static void verifyEquals(Object actual, Object expected, String message) {
        try {
            Assert.assertEquals(actual, expected, message);
        } catch (Error e) {
            flag = false;
            System.err.println("[Soft Assert Fail] " + message + " | " + e.getMessage());
        }
    }

    /** 重置標誌位,每個 @Test 開始前調用 */
    public static void reset() {
        flag = true;
    }

    /** 斷言最終結果,失敗則標記測試失敗 */
    public static void assertAll() {
        Assert.assertTrue(flag, "存在軟斷言失敗,請查看上方日誌");
    }
}

測試用例調用示例

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

public class SoftAssertDemoTest {

    @Test
    public void testMultipleChecks() {
        AssertionUtil.reset();  // 1. 重置
        
        int expected = 2;
        for (int i = 0; i < 3; i++) {
            System.out.println("斷言開始: i=" + i);
            AssertionUtil.verifyEquals(i, expected, "驗證 i 與 expected 相等");
            System.out.println("斷言結束: i=" + i);
        }
        
        AssertionUtil.assertAll();  // 2. 統一判定
    }
}

執行流程說明

  1. 循環執行 3 次驗證,i=0,1 失敗,i=2 通過
  2. 每次失敗捕獲 Error,設置 flag=false,打印錯誤但不拋出
  3. 循環結束後調用 assertAll(),檢測到 flag=false,拋出 AssertionError 標記測試失敗
  4. 測試報告會顯示所有失敗詳情,而非僅第一個

進階改進建議

  • 使用 TestNG 內建 SoftAssert:SoftAssert sa = new SoftAssert(); sa.assertEquals(...); sa.assertAll();
  • 集成 Allure/ExtentReports 將軟斷言失敗詳情輸入測試報告
  • 擴展支持 verifyTrue、verifyNull、verifyMatches 等常用斷言
  • 多線程測試時改用 ThreadLocal<Boolean> 隔離標誌位

適用場景

  • 單測試中需驗證多個獨立屬性(如表單多字段)
  • 頁面多元素批量校驗,希望一次運行收集所有差異
  • 數據遷移/對比任務,需完整差異清單而非首錯即停

軟斷言模式讓測試更具診斷價值,配合成熟框架工具,能顯著提升自動化測試的反饋效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved