Fuchsia 的指令碼層 (SL4F) 是一種 HTTP 伺服器,可讓端對端測試存取 Fuchsia 裝置上的驅動程式服務 (例如音訊、螢幕、輸入、診斷和 WebDriver)。
端對端測試會在主機上執行,不像其他 Fuchsia 套件會提供給 Fuchsia 裝置,並在裝置上執行。如要從遠端測試主機在 Fuchsia 裝置上觸發動作 (例如「在畫面上向右滑動」),端對端測試會將 JSON-RPC 要求傳送至裝置上執行的 SL4F。接著,SL4F 會將這些要求轉換為 Fuchsia 對應的 FIDL 指令,用於裝置上的各種驅動程式庫服務。
不過,測試主機傳送至 Fuchsia 裝置的要求不一定都要透過 SL4F。舉例來說,如果測試主機可以存取裝置上這些驅動程式的連接埠,測試就能透過個別專屬的 HTTP 連線,直接存取 Fuchsia 裝置的 Flutter 驅動程式庫或 Chrome 驅動程式庫 (請參閱圖 1)。如果沒有,測試設定可能需要通訊埠轉送。
端對端測試與 SL4F 之間的互動
以下序列逐步說明端對端測試如何在 Fuchsia 裝置上觸發「在畫面上向右滑動」動作:
- 端對端測試會在主體機器上執行。
- 這項測試會透過 SSH 在 Fuchsia 裝置上啟動 SL4F。
- SL4F 會監聽裝置上通訊埠 80 的 HTTP 要求。
- 這項測試會將 JSON-RPC 要求傳送至 SL4F,要求裝置執行「在螢幕上向右滑動」動作。
- SL4F 的輸入介面會將要求剖析為 FIDL 指令。
- 裝置會執行「在螢幕上向右滑動」動作。
啟動後,SL4F 會持續在裝置上執行並接受要求,直到測試終止 SL4F 為止。
SL4F 中的外牆
Fuchsia 擴充了 SL4F 的功能,導入測試 Fuchsia 產品所需的額外協調和檢查機制。SL4F 會將這項新功能劃分成稱為「外觀」的群組。每個 Facade 都會公開一或多個 JSON-RPC 方法。
如要觸發動作並驗證 Fuchsia 裝置上的狀態,端對端測試需要使用介面集,介面集提供下列機制:
- 自動化調度管理:門面是 FIDL API 的包裝函式,可在 Fuchsia 裝置上做為 HTTP 服務處理常式執行。
- 檢查:門面元件會追蹤 Fuchsia 裝置上的非同步事件。
SL4F 目前支援多種外觀,例如:
- 音訊外觀 - 插入及擷取音訊。
- 螢幕外觀 - 擷取螢幕畫面。
- 輸入外觀 - 在觸控螢幕上注入輸入手勢。
- 診斷外觀 - 從元件讀取 Inspect 發布的資料。
- Wlan facade - Manipulate the status of a wireless LAN device.
- 網路堆疊門面元件 - 操作網路介面。
- 檔案外觀 - 在裝置的儲存空間中寫入及讀取檔案。
- WebDriver facade - Enable and disable devtools in a Chrome webrunner.