RFC-0202:測試管理員即服務 | |
---|---|
狀態 | 已接受 |
領域 |
|
說明 | 專為測試管理員即服務設計。 |
問題 | |
毛皮變化 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2022-07-22 |
審查日期 (年-月-日) | 2022-12-14 |
摘要
目前在 Fuchsia 中進行測試是做為測試管理工具的動態子項。 這項設計讓測試管理員在任何領域 (該產品) 中啟動測試 擁有者有權建立),並允許測試作者 無須變更測試管理工具即可。
提振精神
Test Manager 以動態子項的形式啟動測試,提供各式各樣的 密封/非密封的能力,以及樹狀結構內跑者。Google 目前的設計 測試管理工具是使用一組靜態的內建測試執行器來執行,並進行測試 運作範圍不得加入樹狀結構外 (OOT) 和樹狀客戶內 為自己的測試跑者和必要的功能 而隨著我們開發的客源增加 就必須支援他們的用途本文件建議 的功能」讓客戶可以在 可能與測試經理的運作領域不同這樣一來, 負責將必要的系統功能轉送給測試經理 進行測試。
相關人員
講師:davemoore@google.com
審查人員:geb@google.com、shayba@google.com、richkadel@google.com、 kjharland@google.com、crjohns@google.com、cgonyeo@google.com、 aaronwood@google.com、satsukiu@google.com、xbhatnag@google.com、 yaneury@google.com、hjfreyer@google.com、akbiggs@google.com
諮詢:
元件架構團隊曾諮詢能力相關問題 此設計中使用的轉送、架構和測試 API
社交功能:
這個 RFC 經過了測試架構的設計審查 元件架構團隊
設計
在此設計產品中,產品擁有者將決定測試的執行位置和測試 執行程式 (ffx test/run-test-suite) 會將必要資訊傳入 測試經理。我們會在 RunBuilder 通訊協定中新增方法 稱為 AddSuiteInRealm 等資料庫服務,然後傳入必要的領域資訊
AddSuiteInRealm(resource struct {
// The realm which contains the collection to launch the test in
realm client_end:fuchsia.component.Realm;
// All offers from the realm to the test collection
offers: Vec<Capabilities>
// the test collection to launch the test in.
test_collection: string
// ... existing fields from AddSuite
});
測試管理員會使用上述資訊,在 使用 Realm Builder 進行收集,同時提供獨立的記錄器、涵蓋率 集合、樹狀結構內執行器等,以便支援測試執行。元件管理員 會將 LifecycleController 和 RealmQuery 通訊協定 (範圍為「/」) 轉送至 測試執行程式
測試領域可由平臺本身或產品擁有者編寫 來解決整體問題目前,只有平台可以定義 研究領域,設法讓測試領域的定義開放所有人存取 和管理 AI 的方式
此設計假設使用者分為兩種類型。
- 測試領域作者:這位使用者會建立並維護 測試將會執行 (他們應有權在 拓撲)。
- 測試作者:測試的作者,會在 領域作者。
測試運作範圍作者:建立測試領域、設定測試運作範圍,並與建構作業整合 協助「測試作者」執行測試。使用者必須 測試運作領域中的Realm Builder 資料分割,才能讓這項功能正常運作。
測試領域範例:
{
include: [
"sys/component/realm_builder.shard.cml",
],
collections: [
// The collection to launch test in
{
name: "tests",
environment: "#test_env",
durability: "transient",
},
],
offer: [
{
protocol: [
// Some system or mocked protocol
"fuchsia.foo.bar",
...
],
from: "parent",
to: [
"#tests",
],
},
...
],
environments: [
{
name: "test_env",
extends: "realm",
runners: [
// Offer some OOT runner to the test
{
runner: "fuchsia_oot_runner",
from: "parent",
},
// TODO(https://fxbug.dev/42063673): Abstract out into a shard.
// This is important so that Realm Builder can work.
{
runner: "realm_builder",
from: "#realm_builder_server",
},
],
resolvers: [
// This is important so that Realm Builder can work.
{
resolver: "realm_builder_resolver",
from: "#realm_builder_server",
scheme: "realm-builder",
},
],
},
]
}
領域作者會提供建構工具的整合功能,以便進行測試 執行器可以在執行期間讀取路徑名稱和測試集合。
倫理學一節簡短探討幾項可傳遞的解決方案 測試執行程式的路徑名稱和測試集合名稱,並提供詳細討論 則不在本文件的範圍內。
測試作者將使用其中一項人體工學解決方案 (待定) 執行測試。 這些指令會傳入資訊,用於測試執行程式來執行測試。
測試執行工具會使用 RealmQuery API 查詢 領域內的領域物件,以及所有優惠傳送至測試集合並通過 他們可以使用提議的 AddSuiteInRealm API 來測試管理員
也會使用 LifecycleController API 解決問題 視需要路徑名稱
這個設計需要進行以下變更:
- 修改 RealmQuery API 以讀取「offer」宣告內容
- 將修改 Realm Builder Rust 用戶端程式庫,允許建構
和提供的
fuchsia.component/Realm
Proxy 的領域。 - 測試管理工具會使用 Realm Builder 程式庫中的新方法啟動 使用範圍限定為自訂領域的 Realm Builder 測試執行個體。
- 測試管理員會使用提供的
offers
,並透過運作範圍轉送這些變數 建立工具 - 測試管理員會設定獨立的記錄器、偵錯資料通訊協定、樹狀結構內 呼叫器等
測試管理員現在可以從測試領域連線至所有功能,因為現在這項功能 都能取得元件執行個體的控制代碼
測試管理工具會收集所有構件,並在 測試結束。測試可以存取父項領域的任何能力 並提供測試架構提供的所有密封功能
這種方法的優點
- 開發人員可以自備跑者。
- 你現在可以做到這一點了。不必等待任何其他 接著介紹網際網路通訊層 包括兩項主要的安全防護功能
其他福利
- 開發人員可以視需要設定測試領域,不必 核心產品或測試架構所需的變更。
- 不需要支援自訂測試類型。
這項解決方案的缺點如下:
- 開發人員可以自行建立非密封的領域並進行測試,因此, 我們就會訂出一堆非密封的測試,這些測試可以 不費吹灰之力
- 直接使用
ffx test
的開發人員需要提供自己路徑名稱 集合名稱提供給工具- ffx 測試是基本工具,因此開發人員建議使用其他工具 呼叫 ffx 測試,而您不需要手動傳遞 路徑名稱。
這個測試拓撲圖 可以做為測試經理 課程中也會快速介紹 Memorystore 這是 Google Cloud 的全代管 Redis 服務
實作
- 變更 Realm Builder,允許其以任意運作範圍啟動元件,方法是: 接受 fuchsia.component.Realm 物件
- 變更測試執行程式,接受領域資訊查詢篩選作業的必要資訊 可能不準確或不適當
- 變更測試管理員,導入新的 FIDL API,並利用提供的 領域和集合。
- 記錄異動內容和說明指南
- 與 OOT 開發人員合作,建立包含 OOT 跑者的領域。
- 將目前的 OOT 測試移植至新的領域
未來工作:
- 使用自訂測試類型將測試轉移至自己的領域。
- 瞭解如何移除對單手內容的依附元件。
- 請從測試管理工具中移除所有測試運作範圍,然後發布至產品中 運作範圍
成效
這項變更不會影響成效,也不會減少影響。 測試的啟動方式,只會影響 拓撲
人體工學
本節說明一些要傳入路徑名稱和測試集合的解決方案 測試執行程式詳細的解決方案不在本文件的討論範圍內。
與建構作業整合
定義自訂領域後,產品負責人就可以在 建構系統測試作者會使用該類別和建構系統 會產生對應的路徑名稱和測試集合,做為測試的輸入項目 執行程式
將資訊新增至測試資訊清單
我們可以在測試 facet 內嵌入路徑名稱和測試收集資訊。測試 執行程式必須解析及讀取元件資訊清單檔案 這些資訊
為提升作業效率,Test Realm 作者會提供資訊清單資料分割, 測試作者可以包含在測試資訊清單中。
回溯相容性
我們會持續支援目前的測試,並持續進行記憶測試 而不需要自訂執行器。
安全性考量
- 開發人員可以在系統中的任何領域啟動測試,但隨著測試
使用者裝置不會受到這項異動影響。
- 我們也會在測試執行程式中,提供用來停用特定功能 共用機器和建構作業
- 我們必須將 RealmQuery 和 LifecycleController 轉送至所有測試 執行工具這可能會讓使用者擔心,這取決於我們如何決定。 設計測試執行者將如何設計測試時,我們會在下一份文件中討論 都能使用這類資訊
隱私權注意事項
我們不會收集任何個人資料,因此這項設計不會有任何隱私權 效果。
測試
進行現有測試,並在其中加入新的整合項目和單元測試,以便在 自訂領域應完整測試這項功能
說明文件
記錄這項功能,瞭解 建立自己的測試領域。
同時也記錄測試開發人員使用自訂運作範圍的方式。
缺點、替代方案和未知
替代做法:客戶啟動自己的測試管理工具
測試開發人員會在拓撲中啟動自己的測試管理工具。ffx 測試 將使用 RCS 連線至 fuchsia.test.manager.RunBuilder 通訊協定以執行 測試並收集結果
這項解決方案的優點:
- 我們只需變更 ffx 測試來支援這項功能
- 開發人員可以將目前的測試管理員程式碼與自訂資訊清單搭配使用 在拓撲中使用測試管理工具元件
這項解決方案的問題如下:
- 一旦測試管理員在各種不同的環境中執行,就很難變更 頂層和 OOT這將大幅影響測試架構團隊
- 用戶端必須將測試經理所需的所有功能轉送到 和各自的拓撲
- 用戶端必須編寫測試,確保測試管理工具正常運作 並防止發生迴歸問題
替代做法:子組裝
子組件可以解決我們派出測試執行元件的問題,但 不像提案的解決方案一樣靈活。
提議的解決方案方便日後能靈活運用 透過測試管理員取得編碼測試運作範圍,並提供產品的完整擁有權 擁有者。
替代做法:測試套件自己的跑者
測試可以套件專屬的執行元件,並使用這些元件執行測試元件
這項解決方案的優點:
- 不需要進行任何變更
- 想立即達成這個目標嗎?
這項解決方案的問題如下:
- 為每項測試執行新執行元件對效能影響。
- 需要將執行元件所需的功能轉送至測試 (中斷情形) 並削弱我們的保證)。
- 必須為每個新執行元件建立自訂領域 (因為能力 轉送需求)。這會加重技術債。
替代做法:測試設定
根據功能和這些功能的來源,將測試參數化。 然後傳送到測試領域本身
"fuchsia.test.additional_capabilities": {
"runner": "dart_runner",
"source": "/core/dart/runner"
}
對於可路由系統傳送的功能,測試管理員可使用 RealmQuery API 以使用 Realm Builder 代理要求。適用對象 執行器,測試管理員可使用中樞 Proxy 執行元件通訊協定。
這項解決方案的優點:
- 測試會以測試管理工具的子項的形式執行,以便測試管理員能完整控管 Kubernetes 的功能
這項解決方案的問題如下:
- 測試可能取決於實際環境,因此會成為 暴露在風險中
- 使用 Hub 代理執行元件要求只是短期解決方案 最終需要巢狀或鏈結的執行器
- 這些測試可以存取任何可能為安全的系統能力 包括破壞明確路徑,在一段距離下創造行動。
替代方法:Test Manager 使用 RealmQuery API
在此設計中,測試管理員將可存取 RealmQuery API,並透過該 API 查詢必要資訊 再開始測試
測試作者會使用資料分割來包含領域和測試集合 測試資訊清單中的資訊
資料分割:
{
facets: {
"fuchsia.test": {
launch: {
realm: "/core/foo/bar/test_realm",
collection: "tests" // default is "tests", can be omitted.
}
},
},
}
test.cml:
{
include: [
"syslog/client.shard.cml",
"//some/path/oot_runner/default.shard.cml",
"//some/path/test_realm/default.shard.cml",
],
program: {
binary: "bin/sample_test",
},
use: [
{
protocol: [
"fuchsia.foo.bar",
...
],
},
...
],
}
測試管理工具會讀取 facet,並使用提供的能力來查詢及 在指定的測試領域中啟動測試。
替代做法:測試管理工具會在拓撲中的已知位置執行系統測試
這項設計建議,拓撲會產生一個常見的已知位置 (例如 /core/tests),測試經理可執行所有系統測試。 平台開發人員會建立及維護這個已知領域和測試環境 管理員只會提供執行及收集構件的機制 進行測試。
缺點
- 設定的可用性較低,日後如果需要多個專案,也無法擴充 執行測試
- 我們希望日後能建立巢狀測試管理工具,以便執行測試 同理,但我們不建議這種設計。
- 我們可以透過這個 RFC 設計實現相同的功能 。墨西哥聯邦納稅義務人編號 (RFC) 提供了更多彈性,我們認為這方面的用途
既有藝術品和參考資料
這項概念是 Fuchsia 獨有的概念,因此並無與先前相同。
未來工作
- 請從測試管理員拓撲中移除所有非密封運作範圍,並與我們的 以便將測試環境移至自訂的測試領域。
- 「使用自己的測試經理」設計和測試領域的同層這個 在沒有 OOT 運作的情況下,在工作階段或 OOT 領域執行測試 需要平台中任何產品方面的支援。