如要推廣測試重複使用,Fuchsia 測試套件元件應避免直接使用 RealmBuilder。測試應改用 FIDL 呼叫獨立的測試領域工廠元件 (TRF),該元件會建立測試領域並傳回 RealmProxy 連線。RealmProxy 連線可讓您存取領域公開的功能。
這個模式可讓您輕鬆在 CTF 中重複使用測試,因為測試套件和測試領域工廠會由 FIDL 介面分開,使測試套件的不同版本能針對相同的測試領域工廠執行,反之亦然。遵循這個模式的測試日後也會可用於不同類型的測試。
快速入門
如需其他協助,請參閱下方的範例清單。
測試拓撲
測試應使用 FIDL 呼叫建立測試運作範圍的測試領域工廠元件,而非直接使用 RealmBuilder。運作範圍工廠元件會傳回 RealmProxy FIDL 連線,這個測試套件可用來連線至領域已公開公開的功能。依照慣例,RealmFactory FIDL 通訊協定接受測試專用的 RealmOptions
FIDL 資料表做為引數,以便支援設定。
套件結構
測試套件和測試領域工廠必須屬於不同的套件。這樣就能在 CTF 中發布測試套件的套件,而不必同時發布測試領域工廠。在建構期間,子封裝會將這兩個元件合併為單一套件。
RealmFactory SDK 規定
如果 CTF 測試會使用 RealmFactory FIDL 通訊協定,則應具備 FIDL 可用性註解。您也必須將通訊協定新增至 partner_internal
SDK 類別,以指出該 API 可用於 CTF 測試且必須維持回溯相容性,但不得向 SDK 使用者或 partner
類別公開,前提是該通訊協定應可供 SDK 使用者使用。
常見的測試模式
Puppet 元件
Puppet 是在測試領域中執行,且僅供測試的元件,會將 FIDL 通訊協定公開給測試套件。測試套件會使用 RealmProxy 連線連線至通訊協定,而 Puppet 會依照測試套件傳送的指令,與領域中的其他元件互動。
小狗可讓測試與測試領域互動,而不必公開運作範圍的實作詳細資料。舉例來說,木偶可用於提供測試輸入資料給元件,或檢查其狀態。
如要支援單一測試,或是可做為一般用途的元件,可在不同的測試領域中重複使用。
如需布偶元件的範例,請參閱 Archivist 測試 puppet 會發出記錄,並檢查資料給 Archivist,並且由此 FIDL 通訊協定控管。任何測試都可以使用 Archivist 測試 Puppet 插入任意記錄,以及檢查資料到測試領域。
插入測試資料
部分測試會將輸入資料提供給要測試的元件,例如結構化設定值或從目錄讀取的資料。使用測試領域工廠元件時,至少可透過兩種方式將輸入資料提供給元件:
- 使用
RealmOptions
FIDL 資料表的部分欄位,將 FIDL 呼叫中的資料傳送至RealmFactory/CreateRealm
。 - 建立 Puppet 來提供資料。
第一種方法是最簡單,當元件開始執行前就必須提供測試資料,通常是必要步驟,但協作者應謹慎使用這個方法,避免出現漏光。舉例來說,如果元件會從 /config/data
目錄能力讀取輸入資料,請考慮從測試套件傳遞資料 (以 VMO 形式傳遞),讓測試領域提供此目錄,而不是將控制代碼傳遞至 fuchsia.io.Directory
能力。
模擬 FIDL 互動
RealmBuilder 可讓您定義「本機元件」至虛設常式 FIDL 通訊協定,或記錄 FIDL 流量。不過,只要使用 TRF,測試套件和測試領域就會在不同的程序中執行。請考慮改為建立 puppet 元件,讓測試套件用來將虛設常式要求或回應傳送至測試中的元件。
範例
以下是一些測試套件和測試領域工廠元件的範例。
測試套件 | 運作範圍工廠元件 |
---|---|
WLAN Hw SIM 卡測試 | WLAN Hw-sim 測試領域工廠 |
診斷偵測測試 | 診斷偵測測試領域工廠 |
診斷樣本測試 | 診斷樣本測試領域工廠 |
pkgdir 測試 | pkgdir 測試領域工廠 |
CTF 範例 Rust 測試 | CTF 測試領域工廠 |
CTF 範例 C++ 測試 | CTF 測試領域工廠 |
模擬 hwinfo 測試領域工廠 |
常見問題
何時應該將此模式套用到測試?
如果測試使用 RealmBuilder 執行及測試元件,則應改為將所有 RealmBuilder 程式碼納入測試領域工廠元件。即使您不打算在 CTF 中執行測試,仍須採用此模式,才能利用 Fuchsia 團隊未來的計畫,以便在效能測試、系統 (非密封) 測試和端對端測試等不同情境中重複使用測試。
如何模擬、偽造或虛設元件的 FIDL 通訊協定?
請參閱本節的「模擬 FIDL 互動」一節。
已知問題
我的測試無法存取領域中的非通訊協定功能
RealmProxy 通訊協定不會提供非通訊協定功能的存取權。請考慮建立 puppet 來調節非通訊協定功能的存取權。