測試環境

建構系統與持續整合基礎架構 (在這裡統稱「基礎架構」) 如何探索、匯總和執行測試緊密結合。概略概念是測試作者指定在 GN 中執行測試的方式,並將這項資訊從建構系統套用至基礎架構。

更明確地說

  • 建構作業會為每項指定所需執行環境的測試產生中繼資料檔案。
  • 基礎架構會將測試分成多個共用環境的資料分割。
  • 針對各個資料分割,基礎架構會安排機器人執行這些測試。
  • 所有資料分割的結果都會經過匯總和回報。

環境

測試在 GN 中的 environments 規格會決定測試執行的位置和方式。以下列格式的範圍清單表示:

environments = [
  {
    dimensions = {
       <dimension key> = <value>
       ...
    }
    tags = ["<environment tags...>"]
    netboot = <boolean>
  },
  ...
]

如需範例,請參閱 guest_integration_tests 的說明;如需「維度」和「標記」的定義,請參閱下文

預設行為

如果沒有為測試指定環境,則預設行為如下:

  1. __is_fuchsia__:測試只會在執行 Fuchsia 的 QEMU 執行個體中執行
  2. __is_linux__:測試只會在 Linux 機器上執行
  3. __is_mac__:測試只會在 Mac 機器上執行

(1) 表示硬體為選擇接受;測試作者必須明確指定硬體環境,才能在該環境執行測試。這麼做的原因是,並非所有測試都需要在硬體上執行,測試作者最清楚知道情況是否如此,且該硬體是稀有資源。

預先定義的環境

其中一種可以匯入 //build/testing/environments.gni,並使用其中定義的環境相關便利變數。舉例來說,basic_envs 包含可供所有人使用的所有環境,不需要與基礎架構團隊進行特別諮詢。

尺寸

dimensions 是指暖化維度,其中 Swarming 是基礎架構使用的任務發布系統。維度實際上是一種鍵/值組合,用來描述可供指定的機器人屬性。

標記

標記是可以附加至環境的任意字串。將其設定為從一般測試管道中移除對應的測試量。為了讓測試順利執行,您必須新增新建構工具的基礎架構支援 (針對特定標記執行測試)。標籤可用於需要不同設定的特殊測試。使用標記前,請 fuchsia-infra-team@google.com」

網路啟動 (Netboot)

Netboot 會在針對該環境的資料分割中執行測試前,指定是否要執行 Netboot,而非進行貼上。如果省略這個值,系統會視為 false。

驗證

//build/testing/platforms.gni 中的 test_plaforms 清單是可靠來源,說明哪些平台可供測試,以及這些平台擁有哪些比對條件。假設環境的 dimensions 是後者的子範圍,即「符合」平台項目;假設環境符合 test_platforms 項目,且該環境符合未指定 cpu 值與 current_cpu 的值,則為目前架構「有效」

環境驗證作業於 gn gen 次,且可加總為

  • 使用某些架構時,每個環境都必須有效。

  • 每項測試都必須具備適用於指定架構的環境。

範例

假設 platform.gni 包含

test_platforms = [
  {  # P1
    device_type = "QEMU"
    cpu = "x64"
  },
  { # P2
    device_type = "QEMU"
    cpu = "arm64"
  },
  { # P3
    device_type = "Intel NUC Kit NUC7i5DNHE"
    cpu = "x64"
  },
]

並考量

environments = [
  { # E1
     dimensions = {
       device_type = "Intel NUC Kit NUC7i5DNHE"
     }
  },
  { # E2
     dimensions = {
       device_type = "QEMU"
     }
  },
]

current_cpu 為 x64 時,E1 和 E2 皆有效,而且會分別與 P1 和 P3 進行比對:應在 NUC 和 QEMU 中執行測試。當 current_cpu 為 arm64 時,E1 無效,但由於 E2 有效且與 P2 相符,因此系統會忽略 E1:測試已排定單獨在 QEMU 中執行。