Web應用自動測試系統報告生成服務

慕測科技 發佈 2020-05-08T21:30:48+00:00

監控數據獲取部分主要依靠引入 Crawljax Plugin 中 PreCrawlingPlugin、OnNewStatePlugin 以及 PostCrawlingPlugin 三個監控模塊接口,分別實現執行引擎初始化、運行過程、測試完成三個狀態的監控;


1. 項目意義

隨著網際網路技術的不斷發展,不同用途的 Web 應用不斷出現,用戶對 Web 應用質量的要求不斷提高,Web 應用測試作為其軟體生命周期的一部分,其地位日趨重要。Web 應用自身具備的特徵為應用軟體的測試工作及測試技術的革新帶來了種種挑戰,包括 Web 應用的異構性、分布性、並發性以及平台無關性等。Selenium 測試工具的出現,使得用戶可以通過使用測試腳本模擬用戶操作 Web 應用進行功能測試,解決部分 Web 應用測試痛點。但是編寫 Selenium 腳本需要測試人員熟悉 Selenium 編寫方法和前端語言並且需要編寫大量的測試腳本,門檻高、耗費大。為了減少測試成本,提升測試效率,降低測試門檻,研究 Web 應用自動化測試方法十分必要。

現有的 Web 應用測試技術已經取得一定的進展,利用 Web 測試方法提出了一些 Web 應用自動化測試方法,但是現有的 Web 應用自動化測試方法,未提供可視化測試報告或者提供的測試報告可讀性差、易用性低,如對於發現的缺陷僅展示運行截圖與日誌,缺陷的復現僅依靠簡單的測試路徑與操作信息等。測試人員在閱讀測試報告的過程中,無法通過報告準確定位、判別缺陷,同時需要依靠手動點擊或編寫腳本的方法復現缺陷路徑,需要擁有一定的 Web 應用相關知識與測試能力,影響了測試報告的使用體驗。因此,清晰、易用的測試報告至關重要。

2. 項目內容

本文針對 Web 應用測試的特點,基於對測試執行引擎的監控,實現 Web 應用自動化測試流程,包括測試結果的生成和測試報告、軟體質量評估報告的展示,構建 Web 應用自動化測試系統測試報告服務。根據主要功能實現,測試報告服務可以劃分為執行引擎監控、測試報告、自動化測試用例生成以及軟體質量評估報告四個模塊。如圖 1 所示,測試報告服務通過監控 Web 應用測試執行的整個執行過程,獲取記錄相關參數,利用記錄的日誌、路徑等信息,調用單頁面的分析服務,通過整合這個測試流程中的分析服務結果,生成最終的測試報告以及軟體質量評估報告。在進行單頁面分析的同時,利用記錄的操作記錄、執行路徑等信息,生成基於 Selenium 的 Web 自動化復現用例,便於頁面狀態以及缺陷測試流程的復現。測試報告服務提供了清晰完整的測試報告和簡單易用的復現方法,保障用戶能夠獲取測試結果,以及通過系統自主復現自動化測試檢測出的缺陷,提高測試效率和測試可信度。

執行引擎監控模塊。該模塊負責執行引擎運行過程中的數據採集,根據後續模塊的數據需求,獲取的執行過程信息主要包括執行引擎環境配置信息、瀏覽器性能日誌、瀏覽器日誌、瀏覽器執行截圖、執行測試路徑信息以及測試流程圖。監控數據獲取部分主要依靠引入 Crawljax Plugin 中 PreCrawlingPlugin、OnNewStatePlugin 以及 PostCrawlingPlugin 三個監控模塊接口,分別實現執行引擎初始化、運行過程、測試完成三個狀態的監控;數據交互部分使用 Redis 緩存中間件實現,監控器在獲取信息後存儲到 Redis,利用其高效性,能夠保證運行過程中分析的實時性。此外,引入 OSS 文件系統實現數據交互部分截圖文件存儲;信息交互部分使用 RabbitMQ 消息中間件,監控器使用消息隊列觸發分析流程,利用其穩定性,能夠保證多執行引擎情況下分析的可用性。

測試報告模塊。該模塊負責缺陷分析的調用、單頁面分析結果的存儲以及完成測試報告的生成以及展示,主要包括單頁面分析和測試報告生成兩個業務流程。單頁面分析流程用於獲取和存儲單網頁頁面的缺陷分析結果,當執行引擎搜索並進入了一個新的頁面狀態後,執行引擎監控模塊會將獲取的執行過程信息存儲到 Redis 中,並向 RabbitMQ 發送一個分析消息,測試報告模塊隨即調用測試分析服務和測試用例生成模塊並存儲結果。考慮日誌信息過大影響 Redis 性能,兩個模塊之間實現的 CompressUtils 壓縮工具對獲取的日誌信息進行壓縮和解壓。測試報告生成流程將所有的分析服務的結果進行整合,並基於執行環境、缺陷級別和缺陷類型進行統計,生成測試報告進行展示。測試報告展示主要包括測試結果總覽以及缺陷詳情。測試結果總覽涵蓋測試任務基本信息、缺陷統計、缺陷列表等。缺陷詳情提供缺陷所在網頁、相關頁面資源、缺陷截圖、復現方法等。

自動化測試用例生成模塊。該模塊使用執行引擎監控模塊獲取的瀏覽器配置、執行路徑等信息,基於 Selenium 的語法,生成 Selenium 自動化測試用例。Selenium 能夠支持語言,為了保障測試用例語言的可擴展性,該模塊使用工廠模式設計,目前支持 Java 語言的 Selenium 測試用例。用例代碼生成過程中,將代碼拆分為多個部分,使用不同的工具類相應實現。Selenium 命令是測試用例代碼核心部分,其中輸入操作尤為複雜,需要兼容不同的輸入對象,如單選框、複選框、文本框等。為了將獲取的操作更好地映射到不同處理邏輯,實現過程中引入 Java Reflection 機制優化工具類結構。生成的測試用例腳本通過 OSS 服務上傳,在測試報告中使用作為缺陷詳情報告的補充,便於測試人員可以快速、便捷地復現測試流程,驗證缺陷,提高測試報告易用性。

軟體質量評估報告模塊。該模塊通過測試報告模塊的測試結果以及測試過程數據,調用測試分析服務對被測 Web 應用的軟體質量進行評估,並對評估結果進行展示。軟體質量評估包含五個維度的評估,涵蓋功能、性能、健壯性、兼容性、穩定性,因此多維評估報告內容包括評估結果雷達圖以及各個維度的詳細報告。其中功能、兼容性評估的詳細報告的展示依賴測試流程圖,軟體質量評估模塊需要從執行引擎中獲取測試流程圖。由於獲取測試流程圖的過程屬於測試任務執行的一部分,而報告展示需要異步展示測試流程圖,因此使用 MongoDB 資料庫對測試流程圖進行存儲。前端展示過程中使用 ECharts 對測試流程圖展示進行優化,使其可視化程度更高。

3. 項目效益

測試報告服務通過測試流程的實現和測試報告的展示,向測試人員提供清晰、易用的測試報告。本服務提供測試報告具有可讀性高以及易用性強的特點。

可讀性體現在提供內容豐富、完備的缺陷測試報告和質量評估報告,缺陷測試報告展示了如上文所述完整的缺陷上下文內容,質量評估報告對測試人員關心的維度進行針對性地挖掘和分析。如下圖所示是某網站的部分質量評估報告,該網站在性能維度中未獲得滿分,測試人員即可通過雷達圖進入性能維度詳細報告。性能問題列表展示存在問題的請求內容,包括請求類型、請求種類、響應時間、資源及其大小,測試人員可以直觀的查看其可能存在的性能問題。

易用性體現在提供便捷的缺陷復現方法,對於測試人員關注的缺陷,可以用過缺陷詳情頁面下載自動化測試用例,用於復現該缺陷,使測試人員能夠更高效的定位、分析缺陷。在未提供缺陷路徑的情況下測試人員需要利用測試路徑信息,如操作元素、步驟等手動點擊操作復現或編寫測試用例,需要測試人員具備一定的測試能力。如上圖所示的是軟體測試大賽決賽參賽選手依照測試說明文檔(包括操作元素、步驟),編寫測試用例的耗時情況,提交的用例需達到一定分數(用例較為完整可靠),從圖中可以看出編寫可靠用例成本很高,耗時均超過 1 小時。因此,服務提供的測試用例能使測試人員使用更加便捷。

目前系統已經上線運行,並能夠提供 Web 應用自動化測試系統中提供測試報告服務,通過直觀的測試報告和便捷的復現方法,幫助用戶高效地對 Web 應用進行測試並反饋測試結果,提高測試效率、降低測試成本。

4. 致謝

本文由南京大學軟體學院智能軟體工程實驗室 2018 級碩士生張晨劍撰寫

感謝國家自然科學基金項目:中央高校基本科研業務費專項資金資助項目:基於群智協同的眾包測試技術(14380021),2020-2020

關鍵字: