天天看點

Java SDK內建測試概述及實踐

作為長期專注于區塊鍊底層平台設計和研發的專業團隊,趣鍊科技對産品品質尤其重視。軟體測試可以說是平台的品質保證的最關鍵一環。

底層的技術平台通常會提供對外互動的SDK,在測試環節中,可以通過SDK對系統進行內建測試,進而驗證系統的各項功能是否能夠正常使用。

Java SDK是軟體開發中應用最廣泛的一類,以在BitXMesh項目測試的實踐為背景,介紹Java SDK內建測試的一些心得體會。

系統提供的功能主要有如下幾點:

資源庫中資源管理,包括檔案/資料庫/模型/Restful接口等

聯邦計算

跨節點資源擷取和展示

系統和使用者管理

起初測試工具較為零散,新增子產品或者功能之後往往趨向建立一個小的測試項目進行測試。但是随着功能和客戶越來越多,品質保證的要求不能放松,建構一個完善的測試項目成為必然要求。

本文以該項目為例,詳細介紹測試項目的分析、規劃、實作、具體子產品示例以及最終形成的測試報告。

在測試項目中,最核心的一個環節就是測試用例設計,要想設計出優雅的測試用例,首先要對項目本身有充分的了解,根據對項目的功能和代碼結構分析,将測試項目用例結構分為以下三類:

使用者權限相關測試:驗證不同類型的使用者對子產品操作的權限正常

異常資料測試:包括資料異常和功能邏輯異常

正常功能測試 

單獨的用例實作起來難度不大。

但要充分考慮到後續維護,特别是權限測試和異常測試兩方面。

是以在設計測試用例的時候要秉承以下兩點原則:

優化代碼結構,減少代碼備援,增加可讀性;

測試用例資料和測試代碼分離,友善後面單獨維護測試用例。

TestNG是一個開源自動化測試架構,其靈感來自JUnit和NUnit,但引入了一些新的功能,使其功能更強大,使用更友善,它在很大程度上借鑒了Java注解來定義測試。

本項目使用TestNG進行測試。Excel維護用例資料,封裝函數讀取其中資料,使用dataProvider傳遞給測試函數進行測試。

Java SDK內建測試概述及實踐

由于系統功能耦合性較強,是以單個用例往往包含較多操作。我們把類似流程的測試用例組合到一起,對各個操作進行位置編号,使用Pair

權限相關的測試,每個操作都可能有權限或者沒有權限,是以每個操作完成後直接與預期進行對比進行即可,捕獲到異常就斷言錯誤碼。

流程相關的測試,如果前一個操作對後面操作有影響,檢測到該操作抛出異常後直接對錯誤碼進行斷言,然後退出目前測試,繼續後面測試;反之繼續進行後面操作。

使用觸發器執行自動建構,具體配置參考第六闆塊【持續內建】

用例組織方式

測試用例在内部的Thoughts環境以表格的形式編寫,用例來源于需求文檔和系統測試分析文檔。

在這個項目中使用項目管理工具Maven來管理建構和報告。

版本控制

版本号與待測項目版本号保持一緻,在Git中進行維護。

BitXMesh中有多種不同類型的使用者,這些使用者對不同子產品和資源的操作權限不一樣,是以需要逐一進行權限測試,看是否有遺漏或者越權問題。

另外,BitXMesh需求中對部分輸入資訊有限制,如長度/是否為空/重複/特殊格式等,需要對邊界值和其他相關邏輯進行測試。

子產品中權限主要包括建立/删除/檢視/修改/上傳/下載下傳/賦權操作等。

因為建立是後面操作的基礎,是以單獨指定用例對建立功能進行權限測試;其他操作共用一個用例,每輪對不同使用者執行用例時,讓指定使用者先建立,再執行後面操作。

一個使用者在一個子產品中的所有權限作為一組測試資料;有權限時操作正常完成,沒有權限時抛出異常,狀态碼為指定值;擷取錯誤資訊之後對捕獲到的每個異常狀态碼進行斷言對比即可,目前測試繼續進行。

這裡對子產品功能做全流程測試。當測試程式捕獲到有操作抛出異常的時候就直接傳回,不執行後續測試。

為了友善進行資料驅動測試,我們把用例中每個操作順序進行标注,從1開始遞增;如果期望在第n個操作處捕獲到異常,則可以傳入(n, errCode)進行斷言驗證

編寫部署腳本,使用shell指令運作內建測試

Git webhook檢測到打tag或者主幹分支有合并之後,觸發上遊Jenkins打包任務,生成可執行檔案,并推送到Nexus倉庫

生成可執行檔案任務成功後,觸發內建測試任務,遠端拉取可執行檔案,執行部署和測試

Jenkins slave節點提供的Docker容器。因為單個BitXMesh占用資源不多,是以可以在一個Docker容器中同時運作測試程式和多個BitXMesh節點程式。

本項目使用了maven插件maven-surefire-plugin來生成測試報告。項目測試完成之後,自動生成target/surefire-reports/emailable-report.html報告,在Jenkins中指定相應測試報告路徑即可。

pom.xml中配置如下:

Java SDK內建測試概述及實踐

權限測試和異常測試是測試過程中兩個需要注意的點,需要在自動化測試中提前規劃。

前者容易導緻代碼比較臃腫;後者難以一次性考慮全面,需要後續進行維護。通過合理的資料驅動測試可以解決這兩塊的問題,再加上一些工程化的方式就可以實作比較完善的自動化測試。

大多數測試人員是界面功能測試入門,對背景服務測試需要一定時間進行了解。

Java SDK本質是把系統調用接口封裝成類庫,供用戶端使用;開展內建測試時,需要提前熟悉SDK使用文檔,然後通過分層架構去進行規劃即可。