被測試項目已部署:登錄頁面http://123.249.78.82:8080/login.html
一、項目背景
1.1 測試目標
驗證系統功能完整性,確保用戶管理、消息傳輸、好友管理等核心模塊符合需求。
1.2 項目技術棧
后端:Spring Boot/Spring MVC/WebSocket
數據庫:MySQL
前端:原生HTML/CSS
1.3 文檔引用
1.3.1 項目需求文檔:
在線聊天平臺(Online-Chat)需求文檔
1.3.2 項目接口文檔:
在線聊天平臺(Online-Chat)接口文檔
1.4 項目源碼:
在線聊天平臺(Online-Chat)項目源碼
1.5. 測試環境
類別 | 配置/版本 |
---|---|
硬件 | Lenovo Y9000P 2022 |
手動測試瀏覽器 | Microsoft Edge 125.0.2535.85 |
開發工具 | IntelliJ IDEA 2023.3.1 |
自動化測試工具 | Selenium 4.21.0 |
操作系統 | Windows 11 家庭中文版 |
自動化測試瀏覽器 | Google Chrome 137.0.7151.41 |
二、測試分類:
2.1 需求分析測試
1. 用戶管理模塊
需求覆蓋性
注冊/登錄功能滿足基礎用戶認證需求,但缺乏密碼安全機制(如強度校驗、重復密碼輸入、驗證碼)
改進建議:
增加密碼復雜度規則(如至少8位,含字母和數字)
2. 主界面模塊
改進建議:
明確昵稱來源:注冊時增加“昵稱”字段,或默認使用用戶名
3. 好友管理模塊
需求覆蓋性
模糊搜索功能需明確匹配規則(如前綴匹配、全字段匹配),避免性能問題,
好友申請流程完整,但未說明申請記錄存儲方式(如數據庫表設計)
改進建議:
優化搜索性能:后端分頁查詢 + 緩存機制。
補充好友申請狀態管理(如“待處理”“已通過”“已拒絕”)。
4. 會話管理模塊
需求覆蓋性
首次選中好友自動生成會話合理,但未定義會話刪除或歸檔邏輯
歷史消息加載需考慮數據量過大時的分頁加載策略
改進建議:
增加會話刪除功能
歷史消息采用懶加載或分頁機制,提升響應速度
5. 消息傳輸模塊
需求覆蓋性
實時消息推送(WebSocket)與非實時存儲(MySQL)方案合理,但未設計消息去重或重試機制
改進建議:
補充消息狀態標識(如“已發送”“已送達”“已讀”)
增加消息存儲策略(如超過1年的消息自動歸檔)
6. 非功能需求
可行性分析
實時性:WebSocket 適合小規模高并發,需結合負載均衡技術應對大規模場景
數據持久化:MySQL 需設計索引優化查詢效率(如按用戶ID、時間戳索引)
2.2 功能測試
2.2.1測試用例設計
登錄頁面測試:
注冊頁面測試:
主頁面測試:
2.2.2 手動測試系統
1. 注冊頁面
正常注冊:
重復用戶注冊:
2. 登錄頁面
正常登錄:
密碼或者用戶名錯誤登錄:
3. 主界面:
4. 會話消息列表
5. 實時信息交流
2.2.3 功能測試結果:
測試用例:105
覆蓋率:90%
測試方式:手動測試
通過率:99%,出現bug一處,已解決(用戶注冊模塊用戶名長度校驗缺失)
2.3 UI自動化測試:
2.3.1 自動化測試覆蓋模塊:
注冊頁面,登錄頁面,“關于我們”,主頁面,添加好友頁面,好友頁面,會話頁面,消息發送頁面
2.3.2 自動化測試源碼鏈接:
Online-Chat 自動化測試源碼
部分自動化代碼展示:
工具類:
package common;public class Utils {public static WebDriver driver = null;public WebDriverWait wait = null;//調用driver對象public Utils(String url){driver = createDriver();driver.get(url);wait = new WebDriverWait(driver, Duration.ofSeconds(3));}private WebDriver createDriver() {//獲取驅動對象if(driver==null){//下載驅動//WebDriverManager.chromedriver().setup();//使用本地驅動System.setProperty("webdriver.chrome.driver", "D:/chromedriver-win64 (4)/chromedriver-win64/chromedriver.exe"); //添加配置,允許訪問所有網站ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");//創建驅動對象driver = new ChromeDriver(options);}//顯示等待wait = new WebDriverWait(driver, Duration.ofSeconds(5));return driver;}/*** 屏幕截圖* 屏幕截圖文件目錄* ./src/test/java/images/* /2025-04-29/* /test01-20123010.png* /test02-20133510.png* /2025-04-30/* /test01-20123010.png* * /test02-20133510.png**str:方法名/類名*/public void ScreenShot(String str) throws IOException {//年月日SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");//時分秒SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());//圖片文件名:路徑+圖片名稱// ./src/test/java/images/2025-04-29/test01-20123010.pngString filename = "./src/test/java/images/" + dirTime + "/" + str + "-" + fileTime + ".png";//獲取WebDriver實例的截圖并保存為文件File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//將截圖文件復制到目標文件路徑FileUtils.copyFile(srcFile,new File(filename));}/*** 銷毀driver對象——關閉瀏覽器*/public static void quit(){if(driver != null)driver.quit();}}
主頁面測試方法:
package Tests;public class ClientPage extends Utils {public static String url = "http://123.249.78.82:8080/client.html";public ClientPage() {super(url);}public void searchAndAddFriends() {WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));// 輸入搜索內容wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-input"))).sendKeys("u");// 點擊搜索按鈕wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-button"))).click();wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-input"))).clear();//等待結果列表可見wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#friend-result:not(.hide)")));// 點擊第一個結果按鈕wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#friend-result > div:first-child > button"))).click();// 處理彈窗wait.until(ExpectedConditions.alertIsPresent());driver.switchTo().alert().accept();
}public void createSession() {WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));// 1. 點擊好友標簽切換視圖wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#friend-tab"))).click();// 2. 等待好友列表可見wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#friend-list:not(.hide)")));// 3. 等待列表項加載完成wait.until(d -> d.findElements(By.cssSelector("#friend-list > li")).size() > 0);// 4. 使用JavaScript點擊確保穩定性WebElement lastFriend = driver.findElement(By.cssSelector("#friend-list > li:last-child"));((JavascriptExecutor)driver).executeScript("arguments[0].click();", lastFriend);}public void sendMessage() throws IOException {// 1. 等待會話列表容器可見wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list")));driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/textarea")).clear();driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/textarea")).sendKeys("hello");ScreenShot(Thread.currentThread().getStackTrace()[1].getMethodName());driver.findElement(By.cssSelector("#buttonsendtext")).click();}public void cilckSession() {// 定位到 session-list 下的第一個 <li> 元素并點擊driver.findElement(By.xpath("//*[@id='session-list']/li[1]")).click();//隱式等待1000毫秒driver.manage().timeouts().implicitlyWait(Duration.ofMillis(5000));}public void cilckSession2() {driver.manage().timeouts().implicitlyWait(Duration.ofMillis(5000));// 定位到 session-list 下的第一個 <li> 元素并點擊driver.findElement(By.xpath("//*[@id='session-list']/li[1]")).click();}
}
2.3.3?自動化測試結果
測試用例:15
覆蓋率:90%
框架:Selenium+Maven
通過率:98%,發現bug兩處,已修復(登錄輸入未注冊用戶卡死、注冊密碼單個字符也可成功)
自動化屏幕關鍵截圖:
三、測試結論與建議
3.1 測試結果匯總
功能測試結果
????????測試用例:105
????????覆蓋率:90%(覆蓋核心功能及部分非功能性需求)
????????測試方式:手動測試
????????通過率:99%,發現1處Bug(用戶注冊模塊用戶名長度校驗缺失),已修復。
自動化測試結果
????????測試用例:20
????????覆蓋率:90%(覆蓋主流程及關鍵交互場景)
????????框架:Selenium + Maven
????????通過率:98%,發現2處Bug(登錄輸入未注冊用戶卡死、注冊密碼單個字符也可成功),
????????已修復。
????????自動化屏幕關鍵截圖:已歸檔至測試報告源碼代碼包。
需求覆蓋性總結
基于2.1需求分析測試,各模塊需求覆蓋情況如下:
-
用戶管理模塊:覆蓋基礎注冊/登錄功能,但密碼安全機制未完全實現(如復雜度校驗)。
-
好友管理模塊:模糊搜索功能覆蓋。
-
會話管理模塊:會話生成功能通過,刪除與歷史消息分頁邏輯未測試。
-
消息傳輸模塊:實時推送與存儲方案驗證通過,消息狀態標識未補充。
3.2 通過項
核心功能通過率99%,包括:
????????用戶注冊/登錄流程
????????好友添加與申請管理
????????實時消息收發
????????會話自動生成與歷史消息加載
3.3 風險項
高風險項
高并發場景未充分測試:當前僅驗證WebSocket單節點性能,未結合負載均衡進行分布式壓測。
建議:使用JMeter模擬1000+并發用戶,驗證消息推送延遲及MySQL連接池穩定性。
遺留風險
????????部分需求未完全覆蓋:
??????????????? 密碼復雜度規則未實現(需開發補充)。
????????????????好友搜索緩存機制未落地(潛在性能瓶頸)。
????????測試時間緊張:
????????????????主功能優先,部分邊緣場景(如昵稱默認規則、消息自動歸檔)未覆蓋。
3.4 上線建議
上線條件:
????????主功能測試通過,修復Bug已驗證,風險可控,建議按計劃上線。
上線后監控措施:
????????高優觀察項:
????????????????實時消息推送延遲(重點關注高峰時段)。
????????????????好友搜索接口響應時間(監控ES或緩存命中率)。
????????用戶反饋:
????????????????收集用戶密碼設置體驗,評估安全機制補充優先級。
????????????????跟蹤會話刪除需求反饋,納入迭代優化。
后續優化建議:
????????需求側補充:
????????????????密碼強度校驗(至少8位,字母+數字組合)。
????????????????消息狀態標識(“已讀/未讀”)及年度歸檔策略。
????????技術側優化:
????????????????引入Redis緩存好友搜索結果,降低數據庫壓力。
????????????????歷史消息分頁加載(每頁20條,懶加載觸發)。