VTS 儀表板設置

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

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

要求

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

查看測試覆蓋依賴於一個REST API的源代碼服務器(例如格里特),這使得web服務根據現有的訪問控制列表來提取原始的源代碼。

建築學

VTS 儀表板使用以下架構:

圖1。 VTS 儀表板架構。

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

Web servlet 構成用戶的主要訪問點,提供和處理來自 Datastore 數據庫的數據。這些 servlet 包括:用於提供所有測試的主 servlet、用於管理用戶收藏夾的首選項 servlet、用於填充測試表的結果 servlet、用於準備分析數據的圖形 servlet 和用於為客戶端準備覆蓋數據的覆蓋 servlet .

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

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

代碼結構

VTS 儀表板的基本組件包括用 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 ,這是一個Java實現的Protobuf類型的用來描述VTS的測試結果。
  • 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. 設置 Google Analytics 帳戶。
  6. 指定儀表板中的環境變量pom.xml
    • 使用 OAuth 2.0 ID(來自第 2 步)設置客戶端 ID。
    • 使用密鑰文件中包含的標識符設置服務客戶端 ID(來自步驟 3)。
    • 指定警報的發件人電子郵件地址(來自第 4 步)。
    • 指定所有電子郵件將發送到的電子郵件域。
    • 指定 Gerrit REST 服務器的地址。
    • 指定用於 Gerrit REST 服務器的 OAuth 2.0 範圍。
    • 指定 Google Analytics ID(來自第 5 步)。
    • 構建和部署項目。
  7. 在終端,運行mvn clean appengine:update

安全考慮

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

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

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