【自動化測試】Web自動化測試 Selenium

?🔥個人主頁:?中草藥

?🔥專欄:【Java】登神長階 史詩般的Java成神之路


測試分類

了解各種各樣的測試方法分類,不是為了墨守成規按照既定方法區測試,而是已了解思維為核心,并了解一些專業名詞

根據測試方法分類

白盒測試

白盒測試(又稱結構測試、透明盒測試)是一種基于對系統內部結構、代碼邏輯和實現細節充分了解的測試方法。測試人員需要查看代碼、算法或架構設計,針對性地設計測試用例,驗證內部邏輯的正確性。白盒測試主要分為兩類

靜態測試

通過人工或工具分析代碼的結構、規范、邏輯,不實際執行程序,發現潛在問題。包括:

  • 桌面檢查:人工閱讀代碼 / 文檔,初步檢查邏輯錯誤、代碼規范等(最基礎的靜態自查)。
  • 代碼審查:團隊(如評審會議)對代碼進行正式檢查,從邏輯、性能、安全等多維度發現缺陷。
  • 代碼走查:模擬代碼執行流程(但不運行),“走讀” 代碼邏輯,檢查每一步的合理性。
  • 代碼掃描工具:借助自動化工具(如 SonarQube、PMD 等),批量檢測語法錯誤、安全漏洞、代碼異味(如重復代碼、冗余邏輯)。

動態測試

動態測試通過執行測試用例,觀察代碼運行時的行為,驗證內部邏輯是否正確。主要包含以下六種,我們以代碼塊為例

if(A && B){func1();
}
if(C && D){func2();
}

語句覆蓋

每個語句至少執行一次。

針對A and B:A為T且B為T

針對C or D:C為T或者D為T

得出用例:

用例1: A為T,B為T,C為T,D為F

判定覆蓋

A and B 為 T? ? ? ? ->? ? ? ? A=T B=T? ? ? ? (1)

A and B 為 F? ? ? ? ->? ? ? ? A=T B=F 或?A=F?B=T?或?A=F?B=F? ? ? ? (2)

C or?D?為 T? ? ? ? ->? ? ? ? C=T D=T?或 C=T D=F 或 C=F D=T? ? ? ? (3)

C or D?為 F? ? ? ? ->? ? ? ? C=F?D=F? ? ? ? (4)

得出用例:

用例1:A=T B=T C=T D=F 滿足(1)(3)

用例2:A=T B=F C=F D=F 滿足(2)(4)

條件覆蓋

A????????T????????F

B? ? ? ? T????????F

C? ? ? ? T????????F

D? ? ? ? T????????F

? ? ? ? (5)(6)

得出用例:

用例1:A=T B=T C=T D=T?

用例2:A=F B=F C=F D=F

判定條件覆蓋

結合判定覆蓋和條件覆蓋

得出用例:

用例1:A=T B=T C=T D=T 滿足(1) (3) (5)

用例2:A=F B=F C=F D=F 滿足(2) (4) (6)

條件組合覆蓋

A? ? ? ? B? ? ? ? C? ? ? ? D

T? ? ? ? T? ? ? ? ?T? ? ? ? T

T? ? ? ? F? ? ? ? ?T? ? ? ? T

F? ? ? ? T? ? ? ? ?T? ? ? ? T

F? ? ? ? F? ? ? ? ?T? ? ? ? T

每一行都可以作為一個用例

路徑覆蓋

以冒泡排序為例

public static void sort(int[] array) {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - 1 - i; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}
}

需要覆蓋的測試路徑:

1) 3,12

2) 3,4,3,12

3) 3,4,5,4,3,12

4) 3,4,5,678,4,3,12

黑盒測試

黑盒測試是一種不關注系統內部結構和實現細節的測試方法。

測試人員將系統視為一個 “黑盒子”,只通過輸入數據和觀察輸出結果來驗證系統是否符合需求規格說明書的要求。因此黑盒測試又稱為數據驅動測試,只注重軟件功能

優點:不需要了解程序內部的代碼以及實現,不關注軟件內部的實現。從用戶角度出發設計測試用例,很容易的知道用戶會用到哪些功能,會遇到哪些問題,鍛煉測試人員的產品思維

缺點:不可能覆蓋所有代碼

灰盒測試

灰盒測試是介于黑盒測試和白盒測試之間的一種測試方法。測試人員不需要完全了解系統內部的所有細節,但會基于部分內部結構信息(如接口設計、數據庫結構、模塊交互邏輯)來設計測試用例,兼顧功能驗證和內部邏輯檢查。

灰盒測試多用于集成測試階段,不僅關注輸入輸出的正確性,也關注程序內部的情況


根據測試階段分類

單元測試

與編碼同步進行,針對軟件的最小組成單元(通常是函數、方法、類或模塊)進行測試,主要采用白盒測試方法,從被測對象的內部結構出發設計測試用例。它是測試金字塔(單元測試→集成測試→系統測試)的基石,也是敏捷開發、持續集成(CI)等流程的核心支撐。

核心目標

  • 驗證單元功能正確性:確保單個函數 / 方法在各種輸入下返回預期結果,符合設計邏輯。
  • 早期發現缺陷:在開發初期(編碼階段)暴露問題,避免缺陷流入后續集成或系統測試階段,降低修復成本。
  • 支持快速迭代:為代碼重構、優化或需求變更提供 “安全網”,確保修改后原有功能不受影響。

java中提供很多單元測試框架,如Junit提供很多注解與斷言函數,有效提升開發單元測試腳本效率

測試階段:編碼后或者編碼前(TDD)

測試對象:最小模塊

測試人員:白盒測試工程師或開發工程師

測試依據:代碼和注釋+詳細設計文檔

測試方法:白盒測試

測試內容:模塊接口測試、局部數據結構測試、路徑測試、錯誤處理測試、邊界測試


集成測試

集成測試(也稱 “組裝測試”)是在單元測試通過后,將多個已測試的模塊(或組件)按照設計要求組合起來,驗證模塊之間的接口、交互邏輯是否正確的測試過程。

核心目標

  • 發現模塊間交互的問題:例如模塊 A 傳遞給模塊 B 的數據格式錯誤、接口參數不匹配、依賴關系沖突(如模塊 A 未完成時模塊 B 提前調用)等。
  • 驗證 “模塊組合” 是否符合設計預期:單個模塊功能正確≠組合后功能正確,集成測試確保模塊協作時整體邏輯無誤。

測試階段:一般單元測試之后進行

測試對象:模塊間的接口

測試人員:白盒測試工程師或開發工程師

測試依據:單元測試的模塊+概要設計文檔

測試方法:黑盒測試與白盒測試相結合

測試內容:模塊之間數據傳輸、模塊之間功能沖突、模塊組裝功能正確性、全局數據結構、單模塊缺陷對系統的影響


系統測試

系統測試是在集成測試通過后,將整個軟件系統作為一個完整的實體,在接近真實的環境中,驗證系統是否滿足需求規格說明書(用戶需求)的測試過程。

測試階段:集成測試通過之后

測試對象:整個系統(軟、硬件)

測試人員:吳黑盒測試工程師

測試依據:旁需求規格說明文檔

測試方法:黑盒測試

測試內容:功能、界面、可靠性、易用性、性能、兼容性、安全性等


冒煙測試

冒煙測試起源于硬件測試:如果電路板通電后 “冒煙”(無法正常啟動),就無需進行后續復雜測試。在軟件中,它是對軟件最核心、最基礎功能的快速驗證

通常在軟件開發早期階段進行,目的是判斷軟件是否 “可測”—— 即是否穩定到足以支持后續更詳細的測試(如集成測試、系統測試)

核心目標

  • 快速排查阻斷性缺陷:驗證軟件的核心流程是否能跑通,是否存在導致測試無法進行的嚴重問題(如無法啟動、登錄失敗、核心功能崩潰等)。
  • 過濾 “無效版本”:避免將時間浪費在明顯不穩定的版本上(例如開發剛提交的版本連基本功能都用不了,就無需進行耗時的系統測試)。

回歸測試

回歸測試是指在軟件發生修改(如修復 bug、新增功能、優化代碼)后,重新驗證原有功能是否依然正常的測試過程。其核心邏輯是:“修改可能引入新問題,需要確認歷史功能未受影響”。

在軟件開發的后期,通常在每次代碼修改或新增功能后執行

核心目標

  • 發現 “修改后遺癥”:防止因代碼變更(即使是微小修改)導致原有正常功能出現異常(例如修復了支付 bug,卻導致訂單狀態更新失敗)。
  • 保障軟件穩定性:確保軟件在迭代過程中,歷史功能的正確性不被破壞,維持整體質量。

根據實施組織分類

α 測試(Alpha Testing)

α 測試是軟件開發接近完成時,由開發團隊內部或指定的內部用戶(如公司員工、QA 團隊)在模擬的用戶環境中進行的測試。

核心特點

  • 測試人員:以內部人員為主,不對外開放。
  • 測試環境:通常是開發方搭建的 “模擬用戶環境”(盡量接近真實使用場景,但仍受開發方控制)。
  • 測試階段:在軟件功能基本完成、但可能仍有較多缺陷時進行(早于 β 測試)。
  • 主要目的:發現軟件的功能性缺陷、邏輯錯誤、界面問題等,驗證核心功能是否可用,排除明顯的 “硬傷”。
  • 結果處理:測試中發現的問題會直接反饋給開發團隊,快速修復后再進入下一階段。

β 測試(Beta Testing)

β 測試是軟件基本完成開發、經過 α 測試修復主要問題后,由真實用戶在實際使用環境中進行的測試,相當于 “公開試用”。

核心特點

  • 測試人員:外部用戶(可能是特定用戶群體,也可能是公開招募的試用者)。
  • 測試環境:用戶自己的真實環境(如個人電腦、手機等),不受開發方控制。
  • 測試階段:晚于 α 測試,是發布前的最后一輪大規模測試。
  • 主要目的:收集用戶實際使用中的反饋,發現 α 測試中未暴露的問題(如兼容性問題、性能瓶頸、用戶體驗缺陷等),驗證軟件在真實場景下的穩定性。
  • 結果處理:用戶反饋的問題會被整理后交給開發團隊,作為最終優化的依據,修復后即可正式發布。

自動化測試

自動化測試是指通過工具、腳本或代碼自動執行測試用例,替代或輔助人工測試的過程。其核心是將重復、機械的測試操作(如點擊按鈕、輸入數據、驗證結果等)轉化為可自動運行的程序,從而提高測試效率、降低人為誤差,并支持軟件在快速迭代中持續驗證質量。

Web自動化測試

Web 自動化測試是指通過自動化工具或腳本模擬用戶在 Web 瀏覽器中的操作(如點擊按鈕、輸入文本、跳轉頁面等),對 Web 應用的功能、兼容性、性能等進行自動化驗證的測試手段。

要實現Web的自動化測試 我們需要 Web+驅動+Selenium

這三者的交互關系如下所示

1. 通過selenium編寫的自動化腳本代碼中在ChromeDriverService中創建一個服務

2.通過創建好的服務打開webdriver,安裝在本地的驅動服務IP為localhost,PORT為ChromeDriverService中創建的端口號,該服務地址為selenium向webdriver發送請求的服務地址。

3.向瀏覽器驅動程序發送HTTP請求,瀏覽器驅動程序解析請求,打開瀏覽器,并獲得sessionid,如果再次對瀏覽器操作需攜帶此id

4.打開瀏覽器后,所有的selenium的操作(訪問地址,查找元素等)均通過創建好的服務鏈接到webdriver,然后使用execute發送請求

5.驅動收到請求并對請求進行解析,轉成瀏覽器能夠解析的腳本并發送給瀏覽器,瀏覽器通過請求內容執行對應動作

6.瀏覽器再把執行的動作結果通過瀏覽器驅動程序返回給測試腳本


<dependencies><dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency>
</dependencies>

WebDriverManager是一個開源Java庫,以完全自動化的方式對Selenium WebDriver所需的驅動程序(如chromedriver、geckodriver、msedgedriver等)進行管理(即下載、設置和維護),自版本5起,WebDriverManager還提供了其他相關功能,如發現本地系統中安裝的瀏覽器的能力,構建WebDriver對象(如ChromeDriver、FirefoxDriver、EdgeDriver等)

Selenium 是目前最流行的開源 Web 自動化測試框架,由一系列工具組成,支持跨瀏覽器、跨平臺、多編程語言,廣泛用于 Web 應用的功能測試和回歸測試。

用一個demo來驗證它的功能

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class AutoTest {public void test01(){WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();//允許訪問所有連接options.addArguments("--remote-allow-origins=*");WebDriver driver = new ChromeDriver(options);//請求地址driver.get("https://www.baidu.com/");driver.findElement(By.xpath("//*[@id=\"chat-textarea\"]")).sendKeys("Java");driver.findElement(By.xpath("//*[@id=\"chat-submit-button\"]")).click();driver.quit();}
}


善于利用零星時間的人,才會做出更大的成績來。——華羅庚

🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部內容啦,若有錯誤疏忽希望各位大佬及時指出💐

? 制作不易,希望能對各位提供微小的幫助,可否留下你免費的贊呢🌸?

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

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

相關文章

2025 電賽 C 題完整通關攻略:從單目標定到 2 cm 測距精度的全流程實戰

摘要 2025 年全國大學生電子設計競賽 C 題要求“僅用一顆固定攝像頭”在 5 s 內完成 100 cm~200 cm 距離、誤差 ≤2 cm 的單目測距&#xff0c;并實時顯示功耗。本文整合國一選手方案、CSDN 高分博文、B 站實測視頻及官方說明&#xff0c;給出從硬件選型→離線標定→在線算法→…

Day 10: Mini-GPT完整手寫實戰 - 從組件組裝到文本生成的端到端實現

Day 10-2: Mini-GPT完整手寫實戰 - 從組件組裝到文本生成的端到端實現 ?? 今日學習目標 掌握GPT架構組裝:將Transformer組件組裝成完整的生成模型 理解生成式預訓練:掌握自回歸語言建模的核心機制 端到端代碼實現:從數據預處理到模型訓練的完整流程 文本生成實戰:訓練Mi…

深入解析Prompt緩存機制:原理、優化與實踐經驗

深入解析Prompt緩存機制&#xff1a;原理、優化與實踐經驗 概述 在大型語言模型應用中&#xff0c;API請求的延遲和成本始終是開發者關注的核心問題。Prompt緩存&#xff08;Prompt Caching&#xff09;技術通過智能地復用重復內容&#xff0c;有效減少了API響應時間和運行成本…

CV 醫學影像分類、分割、目標檢測,之【3D肝臟分割】項目拆解

CV 醫學影像分類、分割、目標檢測&#xff0c;之【3D肝臟分割】項目拆解第1行&#xff1a;from posixpath import join第2行&#xff1a;from torch.utils.data import DataLoader第3行&#xff1a;import os第4行&#xff1a;import sys第5行&#xff1a;import random第6行&a…

Mybatis學習筆記(七)

Spring Boot集成 簡要描述&#xff1a;MyBatis-Plus與Spring Boot的深度集成&#xff0c;提供了自動配置、啟動器等特性&#xff0c;大大簡化了配置和使用。 核心概念&#xff1a; 自動配置&#xff1a;基于條件的自動配置機制啟動器&#xff1a;簡化依賴管理的starter配置屬性…

機器人伴侶的智能升級:Deepoc具身智能模型如何重塑成人伴侶體驗

引言&#xff1a;機器人伴侶市場的技術變革需求隨著人工智能技術的飛速發展和人們情感需求的多元化&#xff0c;機器人成人伴侶市場正在經歷前所未有的增長。傳統機器人伴侶已經能夠滿足基礎的交互需求&#xff0c;但在智能化、情感化和個性化方面仍存在明顯不足。這正是深算紀…

metabase基礎使用技巧 (dashboard, filter)

這是metabase系列分享文章的第2部分。本文將介紹metabase的基礎概念和使用介紹 question question是metabase中提供的通過UI化操作就能實現簡單的 快捷 直接的BI查詢。 點擊右側的New -> Question即可創建Question&#xff0c;可以理解為一個格式化的查詢&#xff1a; 這里…

機器人成人伴侶的智能化升級:Deepoc具身模型賦能沉浸式體驗

引言&#xff1a;成人機器人市場的技術革新需求隨著人工智能和機器人技術的快速發展&#xff0c;成人陪伴機器人行業正經歷從簡單機械運動到智能化交互的轉型。據市場研究數據顯示&#xff0c;全球成人機器人市場規模預計將在2026年突破100億美元&#xff0c;年復合增長率保持在…

Go語言企業級權限管理系統設計與實現

最近跟著學長再寫河南師范大學附屬中學圖書館的項目&#xff0c;學長交給了我一個任務&#xff0c;把本項目的權限管理給吃透&#xff0c;然后應用到下一個項目上。 我當然是偷著樂吶&#xff0c;因為讀代碼的時候&#xff0c;總是莫名給我一種公費旅游的感覺。 本來就想去了解…

Java應用快速部署Tomcat指南

將Java應用部署到Apache Tomcat服務器是開發Web應用過程中常見的任務。Tomcat是一個免費且開源的Servlet容器,它為Java應用提供了運行環境。本文將介紹如何準備你的Java應用,并將其部署到Tomcat服務器上。 Java 應用部署 tomcat 的根目錄結構 Tomcat中默認網站根目錄是$CAT…

Java 學習筆記(基礎篇2)

1. 分支結構① if 語句&#xff1a;(1) 雙分支&#xff1a;if (條件) {// 語句體1 } else {// 語句體2 }(2) 多分支if (條件1) {// 語句體1 } else if (條件2) {// 語句體2 } else {// 語句體N }② switch 語句&#xff1a;(1) 語法&#xff1a;如果都不是&#xff08;default&…

谷歌云代理商:用 AI 啟航,Gemini 重塑旅游酒店行業新體驗

本文由谷歌云谷歌地圖官方授權代理商、高級合作伙伴 CloudAce云一 整理發布。谷歌云谷歌地圖在中國授權代理商名單&#xff1a;Cloud Ace云一&#xff0c;全球20分公司&#xff0c;國內核心城市多個據點&#xff0c;谷歌云與谷歌地圖代理商、頂級合作伙伴&#xff08;Premier P…

springboot+vue實現通過poi完成excel

前端1、按鈕<el-buttontype"text"size"mini"click"handleExport">導出</el-button>2、方法//導出async handleExport() {if (!this.activityId) {this.$message.warning(活動ID不存在);return;}try {this.loading true;const res …

JMeter性能測試詳細版(適合0基礎小白學習--非常詳細)

01性能測試的概念 02性能測試的概念 基準測試 負載測試 穩定性測試 其他&#xff1a;并發測試、壓力測試、回歸測試等 壓力測試就是在系統強負載的情況下&#xff0c;是否會出現功能隱患問題&#xff0c;出現問題后是否可以盡快恢復 負載測試和壓力測試的區別: 1,核心目標不…

QT6(創建第一個QT項目)

編寫第一個QT項目 QT官網 安裝完QT后的界面 創建第一個項目 這里我們選擇第一個就好 下一步 下一步 選擇CMake&#xff0c;QMake是QT的CMAKE&#xff08;現在官方自己都不推薦了&#xff09; 下一步 選擇QWidget我們先創建一個最簡單的窗口程序 QMainWindow&#xff1a;主窗…

Golang指針操作

在 Go 語言&#xff08;Golang&#xff09;中&#xff0c;* 和 & 是與指針相關的兩個重要操作符。 理解它們對于掌握 Go 的內存管理和函數參數傳遞機制非常關鍵。 文章目錄一、& 操作符&#xff1a;取地址&#xff08;Address-of&#xff09;示例&#xff1a;二、* 操…

微服務從0到1

微服務從0到1實施步驟與注意事項一、核心實施步驟??需求分析與架構設計??明確業務邊界?&#xff1a;根據業務模塊&#xff08;如用戶管理、訂單系統&#xff09;劃分服務職責&#xff0c;避免服務職責重疊或耦合?。?定義接口契約?&#xff1a;通過 OpenAPI/Swagger 規范…

小程序排名優化:功能迭代如何助力排名攀升

小程序的功能不是一成不變的&#xff0c;持續的功能迭代不僅能滿足用戶不斷變化的需求&#xff0c;也是提升排名的重要途徑。平臺更傾向于推薦那些不斷更新、功能完善的小程序&#xff0c;因為它們能為用戶提供更優質的服務。合理規劃功能迭代方向和節奏&#xff0c;能讓小程序…

Unity TextMeshPro(二)優化

文章目錄前言一、字體打包優化二、ab打包冗余1、問題1、解決方法三、字體靜態優化四、擴展總結前言 優化TextMeshPro包體大小的方法記錄。 一、字體打包優化 游戲開發階段通常使用Fast打包方式&#xff0c;在正式項目發布的時候需要切換一下打包方式&#xff0c;重新將字體打…

C++ 之 【簡介 set、multiset、map、multimap 的使用】

目錄 1.序列式、關聯式容器 2.鍵值對 3.set 3.1set的簡介 3.2set的常用函數 4.multiset 5.map 5.1map的簡介 5.2map的常用函數 6.multimap 7.練習題 1.序列式、關聯式容器 vector、deque、list、forward_list、array等是CSTL中的序列式容器 其核心特性是 元素按插入…