VTS 儀表板設置

VTS Dashboard 提供了一個用戶後端和用戶界面 (UI),用於查看來自 VTS 持續集成系統的測試結果。它通過測試狀態通知等工具支持測試驅動開發,以幫助開發人員在開發週期中定位和防止回歸區域(包括測試監控和分類支持)。

VTS Dashboard UI 支持 VTS 基礎架構提供的功能(例如本機代碼覆蓋率),並提供持續的性能監控,以支持開發優化和良好表徵的性能工具。

要求

使用 VTS 儀表板需要以下服務:

查看測試覆蓋率依賴於源代碼服務器(例如 Gerrit)的 REST API,它使 Web 服務能夠根據現有的訪問控制列表獲取原始源代碼。

建築學

VTS 儀表板使用以下架構:

圖 1 。 VTS 儀表板架構。

測試狀態結果通過 REST 接口持續上傳到 Cloud Datastore 數據庫。 VTS 運行程序自動處理結果並使用 Protobuf 格式對它們進行序列化。

Web servlet 構成用戶的主要訪問點,用於交付和處理來自 Datastore 數據庫的數據。 servlet 包括:一個用於交付所有測試的主 servlet、一個用於管理用戶收藏的偏好 servlet、一個用於填充測試表的結果 servlet、一個用於準備分析數據的圖形 servlet,以及一個用於為客戶端準備覆蓋數據的覆蓋 servlet .

每個測試模塊都有自己的數據存儲祖先樹,並且測試結果使用測試開始時間的 Unix 時間戳進行索引。數據庫中的覆蓋率數據與測試結果一起存儲為計數向量(即原始源文件中的每一行)和識別信息以從源代碼服務器獲取源代碼。

通知服務使用任務隊列運行,識別測試用例狀態更改,並通知訂閱者。狀態信息存儲在狀態表中,以跟踪數據新鮮度和現有故障。這允許通知服務提供有關單個測試用例故障和修復的豐富信息。

代碼結構

VTS Dashboard 基本組件包括用 Java 實現的 servlet、前端 JSP、CSS 樣式表和配置文件。以下列表詳細說明了這些組件的位置和描述(所有相對於test/vts/web/dashboard的路徑):

  • pom.xml
    定義環境變量和依賴項的設置文件。
  • src/main/java/com/android/vts/api/
    包含用於通過 REST 與數據交互的端點。
  • src/main/java/com/android/vts/entity/
    包含數據存儲實體的 Java 模型。
  • src/main/java/com/android/vts/proto/
    包含 Protobuf 的 Java 文件,包括VtsReportMessage.java ,它是用於描述 VTS 測試結果的 Protobuf 類型的 Java 實現。
  • src/main/java/com/android/vts/servlet/
    包含 servlet 的 Java 文件。
  • src/main/java/com/android/vts/util/
    包含 servlet 使用的實用程序函數和類的 Java 文件。
  • src/test/java/com/android/vts/
    包含 servlet 和 utils 的 UI 測試。
  • src/main/webapp/
    包含與 UI 相關的文件(JSP、CSS、XML):
    • js/ 。包含網頁使用的 Javascript 文件。
    • WEB-INF/ .包含配置和 UI 文件。
    • jsp/ .包含每個網頁的 JSP 文件。
  • appengine-web.xml
    將環境變量加載到變量中的設置文件。
  • web.xml
    定義 servlet 映射和安全約束的設置文件。
  • cron.xml
    定義計劃任務的設置文件(即通知服務)。

設置儀表板

要設置 VTS 儀表板:

  1. 創建一個 Google Cloud App Engine 項目並通過安裝設置部署主機:
    • 爪哇 8
    • 谷歌應用引擎 SDK
    • 馬文
  2. 在 Google Cloud API Manager 中生成 OAuth 2.0 客戶端 ID。
  3. 創建一個服務帳戶並創建一個密鑰文件。
  4. 將電子郵件地址添加到 App Engine 電子郵件 API 授權發件人列表。
  5. 設置一個谷歌分析帳戶。
  6. 在儀表板pom.xml中指定環境變量:
    • 使用 OAuth 2.0 ID 設置客戶端 ID(從步驟 2 開始)。
    • 使用密鑰文件中包含的標識符設置服務客戶端 ID(來自步驟 3)。
    • 指定警報的發件人電子郵件地址(從步驟 4 開始)。
    • 指定將所有電子郵件發送到的電子郵件域。
    • 指定 Gerrit REST 服務器的地址。
    • 指定用於 Gerrit REST 服務器的 OAuth 2.0 範圍。
    • 指定 Google Analytics ID(來自第 5 步)。
    • 構建和部署項目。
  7. 在終端中,運行mvn clean appengine:update

安全注意事項

強大的覆蓋信息需要訪問原始源代碼。但是,某些代碼可能是敏感的,並且它的附加網關可能允許利用現有的訪問控制列表。

為了避免這種威脅,儀表板不使用覆蓋信息提供源代碼,而是直接處理覆蓋向量(即,執行計數向量映射到源文件中的行)。隨著覆蓋向量,儀表板接收 Git 項目名稱和路徑,以便客戶端可以從外部源代碼 API 獲取代碼。客戶端瀏覽器接收到這些信息並使用Javascript中的跨域資源共享(CORS)向源代碼服務器查詢原始源代碼;生成的代碼與覆蓋向量相結合以產生顯示。

這種直接方法不會擴大攻擊面,因為 Dashboard 使用用戶的 cookie 與外部服務進行身份驗證(意味著無法直接訪問源代碼的用戶無法利用 Dashboard 查看敏感信息)。