張曦煌,蔡晶晶,柴志雷,3,奚智雯
(1.江南大學 人工智能與計算機學院,江蘇 無錫 214215;2.無錫太湖學院 智能裝備學院,江蘇 無錫 214064;3.江南大學 江蘇省模式識別與計算智能工程實驗室,江蘇 無錫 214215)
由于敏捷開發技術的興起,Web 應用產品的開發周期逐漸縮短,產品更新升級日趨頻繁。隨著產品不斷迭代更新,Web 應用的規模和系統復雜度增加,對Web 產品的質量要求也隨之越來越高[1]。
傳統手工測試方式效率低、資源消耗大,通常難以滿足大規模Web 應用的測試需求。因此,自動化測試逐漸成為Web 應用測試的主流測試方式[2],該方法不僅節省時間、人力等資源,還能顯著提高測試效率。
然而,在實際操作過程中部署自動化測試時,會存在以下局限性[3]:
(1)測試用例覆蓋率差。在一些復雜測試任務中,仍需要手工進行測試。
(2)測試用例復用性低。當產品迭代升級后,需要重新編寫測試用例,測試人員的工作量較大[4]。
(3)成本投入高。自動化測試前期需要巨額的成本投入,后期如果缺乏成本控制方案和測試計劃,項目往往會因為資金問題而以失敗告終[5]。
為了解決以上問題,文獻[6]提出一種適用于統一建模語言和序列圖生成測試用例方法。Ansari 等[7]借助自然語言處理的功能需求生成測試用例,在減少工作量的同時,提高了工作效率。Verma 等[8]提出一種測試用例優先級比較的方法來檢測Web 應用中存在的錯誤,該方法包括風險策略和多樣性策略。其中,風險策略是指選擇每次迭代中風險最大的測試用例;多樣性策略則通過最大化測試過的測試用例之間的距離來設定測試用例優先級。通過結合以上兩種策略,能夠有效提高Web 應用中缺陷檢測的準確率。高應波[9]結合數據驅動和關鍵字驅動模式,運用圖像匹配算法設計一款混合驅動的自動化測試框架,該框架能夠識別非Web 控件,有效提高Web 應用測試過程中的自動化程度。李吟等[10]設計了一款自動化測試的框架以提高自動化測試的覆蓋率。
在傳統自動化測試方法中,Web 應用更新后與歷史版本相類似的功能測試仍需要編寫測試用例[11]。為此,本文結合Selenium 自動化測試框架和SVM(Support Vector Machines,SVM)模型,從歷史測試經驗中對模型展開訓練。首先,通過測試用例完成Web 前端頁面的功能測試,并對前端頁面功能所采用的測試用例進行分類預測;然后,借助自動化測試平臺執行測試用例得到測試結果;最后,通過測試結果完善Web 應用。此外,為了驗證所提方法的有效性,將該方法應用于一個真實運行的FPGA 公有云平臺中進行Web測試。
自動化測試是Web 應用測試領域的發展趨勢,目的是簡化敏捷開發中重復的測試任務[12]。具體操作為:在測試需求的基礎上,對Web 應用編寫自動運行的測試用例以獲取測試結果[13]。其中,自動化測試的本質是實現自動化機器測試,主要包括開發并執行測試用例、使用自動化測試工具驗證開發需求兩個部分。通過該技術幫助測試人員在規定時間內,盡可能多地執行測試用例[14]。
SVM 屬于有監督分類學習模型,依賴于支持向量分類超平面,具體原理如圖1 所示。由于在SVM 中少數支持向量決定了最終的聚類結果,可通過該特點在實際應用中獲取關鍵樣本,剔除冗余樣本以減少計算量。此外,該方法計算的復雜性取決于支持向量的數目,在一定程度上避免了“維數災難”。

Fig.1 SVM schematic圖1 SVM原理
本文使用SVM 分類Web 元素(文本信息)的測試用例。在實驗過程中,首先將訓練集中的文本數據進行特征提取(數值化處理),將其轉化為特征向量。
然后,依據“間隔最大化”原則尋找一個超平面對樣本進行分割[15],計算公式如下:

其中,w=(w1,w2,w3…wd)為法向量,決定超平面的方向,b為決定超平面與原點間距離的位移項。
接下來,計算兩個異類支持向量到超平面的距離之和d,計算公式如下:

其中,d為間隔距離。
最后,只需要找到滿足式(3)中約束條件的w、b,使d最大,即為“最大間隔”的超平面,計算公式如下:

式中,最大化間隔僅需最大化||w||-1,等價于最小化||w||2。因此,式(3)可重寫為:

Selenium 框架主要應用于Web 應用自動化測試工具,工作原理如圖2 所示。在處理自動化測試任務時,首先向Selenium 框架中集成的瀏覽器驅動Web Driver 發送請求,在Web Driver 收到測試腳本后對其進行解析;然后將結果發送至對應的瀏覽器;最后由瀏覽器執行測試用例并返回測試結果[16]。
由圖2 可見,Selenium 框架的主要組件包括Selenium IDE、Selenium Web Driver 及Selenium Grid 模塊[17]。其中,Selenium IDE 主要用于錄制用戶操作,生成測試用例;Selenium Web Driver 是在Selenium Remote Control 基礎上優化和升級的新模塊,支持多種編程語言編寫測試用例,可直接給瀏覽器發送命令;Selenium Grid 是運行不同瀏覽器下的Selenium 網格,支持跨平臺運行測試用例。Selenium 自動化測試框架如圖3所示。

Fig.2 Selenium schematic圖2 Selenium 原理

Fig.3 Selenium framework architecture圖3 Selenium 框架架構
實驗架構主要包含數據獲取模塊、機器學習模塊和測試用例執行模塊,用來獲取一個網頁所有網頁功能的測試結果。其中,數據獲取模塊獲取網頁元素;機器學習模塊預測每個Web 元素的測試用例;Selenium 框架模塊執行Web 元素的測試用例并展現測試結果。實驗整體架構如圖4所示。

Fig.4 Overall architecture of the experiment圖4 實驗整體架構
實驗平臺為PyCharm,電腦配置為Intel(R)Core(TM)i7-9700CPU @300GHz,操作系統為Windows 10專業版。
通過Request 函數向指定URL(Uniform Resource Locator)網址發起訪問請求、處理響應請求,以獲取靜態頁面的Web 元素。其中,Web 元素為Web 應用中前端頁面中的HTML(Hyper Text Markup Language)標簽,例如文本框、按鈕等。然后,采用Beautiful Soup 解析Web 頁面數據處理后的網頁元素以提取指定數據。
目前,通常采用Beautiful Soup 模塊提取頁面數據。該模塊不僅能規則化解析頁面數據,還能提供html.parser 和lmxl 兩種頁面解析方式。由于lmxl 解析方式將Web 頁面源碼解析成一個DOM(Document Object Model)樹,便于定位和提取Web 元素,因此本文選擇該方法進行實驗。通過Beautiful Soup 對象中的find、select、find_all 等方法,獲取指定頁面上的a、select、input、button 等標簽如表1所示。

Table 1 Web element table表1 Web元素表
本文選擇FPGA 公有云平臺中前端頁面的數據構建訓練集(見表2)。訓練集和測試集均來源于同一個數據集,共1 700 條數據。在實驗執行過程中,隨機抽取70%數據設置為訓練集,剩余數據設置為測試集。

Table 2 Training set表2 訓練集
由表2 可知,訓練集包含tag_name(標簽名稱)、type(標簽類型)、web_element(元素名稱)、test_case(測試用例)。其中,web_element 作為特征列、test_case 列作為類標簽列。測試用例類別主要包括文本框是否可編輯、按鈕是否可點擊、頁面是否跳轉、圖片顯示是否正常、鏈接標簽是否成功跳轉、單選按鈕是否選中、文件是否可上傳。
在特征提取過程中,首先采用數值化處理方法建立單詞到數字的映射關系,將單詞轉換為數字;然后,采用SVM和決策樹對模型進行擬合,并采用網格搜索和交叉驗證方法尋找模型的最佳參數;最后,將測試數據輸入模型預測每個Web元素的測試用例。
圖5(彩圖掃OSID 碼可見,下同)為采用20 條測試數據對訓練后的模型進行測試的結果。其中,橫軸表示每個測試用例,縱軸表示測試用例的類別,紅色點為每個測試用例的真實類別,藍色點為模型預測類別。如果預測正確,紅色點將完全覆蓋藍色。

Fig.5 Scatter plot of test case prediction圖5 預測測試用例散點圖
由圖5 可見,僅有4 條數據的分類結果發生錯誤,原因可能是訓練數據量較少,在對數據集進行特征提取時發生特征相似的情況。
準確率是衡量分類模型分類正確的次數,如果預測樣本標簽與真實標簽集嚴格匹配,則精度為1,否則精度為0。準確率計算公式如式(5)所示:

其中,ntotal為總樣本個數,ncorrect為被正確分類的樣本個數。
混淆矩陣(見圖6)屬于模型評估的一部分,能夠快速計算分類任務的準確率。

Fig.6 Confusion matrix圖6 混淆矩陣
圖6 中,T(True)代表正確,F(False)代表錯誤,P(Positive)為1,表示正例,N(Negative)為0,表示負例;TP 表示實際為正且被預測為正的樣本數量;FP 表示實際為負但被預測為正的樣本數量;FN 表示實際為正卻被預測為負的樣本數量;TN 代表TN 表示實際為負被預測為負的樣本的數量。結合混淆矩陣,準確率可表達為:

在為每個Web 元素所需要的測試用例進行分類預測后,基于Selenium 框架的自動化測試系統將開始執行測試用例。該系統可詳細展示測試用例的執行情況,并且支持在瀏覽器上運行。此外,還能夠在多種瀏覽器下完成測試任務,便于測試人員對Web 應用進行跨平臺、跨瀏覽器的兼容性測試。
Selenium 的Web 自動化測試系統基于Selenium Web Driver 驅動原理,結合了Web 開發與數據可視化的技術。該系統支持在網頁上構建測試計劃、執行測試用例、日志記錄、測試報告的生成、郵件通知等功能,能夠讓測試人員清晰了解每個測試用例的執行情況,同時降低測試成本。自動化測試系統的功能模塊如圖7所示。

Fig.7 Function block of automated test system圖7 自動化測試系統功能模塊
自動化測試系統的整體架構包括測試用例執行模塊、瀏覽器驅動模塊、SVM 預測測試用例模塊、測試結果反饋模塊,如圖8所示。

Fig.8 Architecture of automated test system圖8 自動化測試系統架構
由圖8 可見,執行模塊包含測試用例預測、測試用例加載、數據驅動和結果收集;SVM 模塊使用Python 對SVM分類模型進行封裝,以獲取目標頁面的元素并預測測試用例分類。
測試人員登錄自動化系統,將分類結果輸入自動化測試系統中完成以下流程:構建測試用例運行計劃、運行計劃中測試用例、查看測試用例運行結果、反饋測試結果。
本文采用網格搜索和交叉驗證方法(Grid Search CV)確定SVM 和決策樹模型中的參數。該方法在指定參考范圍內,利用參數訓練學習器,根據步長依次調整參數值尋找模型準確率最高的參數值。
通過該方法,最終確定模型的兩個主要參數,如表3所示。其中,Kernel 代表算法使用的內核模型;C 代表誤差項的正則化參數;Gamma 為用于非線性SVM 的超參數,隱含地決定了數據映射到新特征空間后的分布狀況。

Table 3 Main parameters表3 主要參數
在控制模型核心參數相同的條件下,分別對FPGA 公有云平臺前端頁面中的Web 元素功能進行自動化測試,得到模型的主要評價指標,如表4所示。

Table 4 Evaluation index of classification model表4 分類模型的評價指標(%)
由表4 可知,SVM 的準確率相較于決策樹模型提高4.43%;相較于樸素貝葉斯分類模型,準確率提高5.12%。
將測試用例輸入自動化測試系統,執行兩個頁面的測試任務,預測96 個Web 元素的測試用例,測試結果如表5所示。

Table 5 Test case operation status表5 測試用例運行狀況
本文為解決現有Web 應用的自動化測試任務中,測試用例只能根據測試人員設定好的順序執行,無法鏈接新的Web 元素,尤其在頁面更新后,仍需要重寫測試用例的問題。借助SVM 根據歷史測試經驗,對新頁面進行測試。
實驗結果表明,SVM 相較于決策樹及樸素貝葉斯模型,分類效果更優。借助該系統執行Web 元素的測試任務,可實時獲取測試用例的執行狀況,及時將遇見的問題反饋給開發人員。下一步,將持續優化測試用例的覆蓋率,以提高測試自動化程度。