測試領域工廠

如要推廣測試重複使用,Fuchsia 測試套件元件應避免直接使用 RealmBuilder。測試應改用 FIDL 呼叫獨立的測試領域工廠元件 (TRF),該元件會建立測試領域並傳回 RealmProxy 連線。RealmProxy 連線可讓您存取領域公開的功能。

這個模式可讓您輕鬆在 CTF 中重複使用測試,因為測試套件和測試領域工廠會由 FIDL 介面分開,使測試套件的不同版本能針對相同的測試領域工廠執行,反之亦然。遵循這個模式的測試日後也會可用於不同類型的測試

快速入門

  • 如要編寫新測試,請執行 testgen 來產生測試樣板。
  • 如要重構現有測試,請執行 testgen 並將舊測試程式碼複製到產生的測試中。

如需其他協助,請參閱下方的範例清單。

測試拓撲

測試應使用 FIDL 呼叫建立測試運作範圍的測試領域工廠元件,而非直接使用 RealmBuilder。運作範圍工廠元件會傳回 RealmProxy FIDL 連線,這個測試套件可用來連線至領域已公開公開的功能。依照慣例,RealmFactory FIDL 通訊協定接受測試專用的 RealmOptions FIDL 資料表做為引數,以便支援設定。

trf_topology.png

套件結構

測試套件和測試領域工廠必須屬於不同的套件。這樣就能在 CTF 中發布測試套件的套件,而不必同時發布測試領域工廠。在建構期間,子封裝會將這兩個元件合併為單一套件。

trf_ctf_packages.png

RealmFactory SDK 規定

如果 CTF 測試會使用 RealmFactory FIDL 通訊協定,則應具備 FIDL 可用性註解。您也必須將通訊協定新增至 partner_internal SDK 類別,以指出該 API 可用於 CTF 測試且必須維持回溯相容性,但不得向 SDK 使用者或 partner 類別公開,前提是該通訊協定應可供 SDK 使用者使用。

常見的測試模式

Puppet 元件

Puppet 是在測試領域中執行,且僅供測試的元件,會將 FIDL 通訊協定公開給測試套件。測試套件會使用 RealmProxy 連線連線至通訊協定,而 Puppet 會依照測試套件傳送的指令,與領域中的其他元件互動。

trf_toplogy_with_puppet.png

小狗可讓測試與測試領域互動,而不必公開運作範圍的實作詳細資料。舉例來說,木偶可用於提供測試輸入資料給元件,或檢查其狀態。

如要支援單一測試,或是可做為一般用途的元件,可在不同的測試領域中重複使用。

如需布偶元件的範例,請參閱 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 來調節非通訊協定功能的存取權。