建構系統與持續整合基礎架構 (在這裡統稱「基礎架構」) 如何探索、匯總和執行測試緊密結合。概略概念是測試作者指定在 GN 中執行測試的方式,並將這項資訊從建構系統套用至基礎架構。
更明確地說
- 建構作業會為每項指定所需執行環境的測試產生中繼資料檔案。
- 基礎架構會將測試分成多個共用環境的資料分割。
- 針對各個資料分割,基礎架構會安排機器人執行這些測試。
- 所有資料分割的結果都會經過匯總和回報。
環境
測試在 GN 中的 environments
規格會決定測試執行的位置和方式。以下列格式的範圍清單表示:
environments = [
{
dimensions = {
<dimension key> = <value>
...
}
tags = ["<environment tags...>"]
netboot = <boolean>
},
...
]
如需範例,請參閱 guest_integration_tests 的說明;如需「維度」和「標記」的定義,請參閱下文
預設行為
如果沒有為測試指定環境,則預設行為如下:
__is_fuchsia__
:測試只會在執行 Fuchsia 的 QEMU 執行個體中執行__is_linux__
:測試只會在 Linux 機器上執行__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 中執行。