不使用 kunit_tool 執行測試¶
如果我們不想使用 kunit_tool(例如:我們想與其他系統整合,或在真實硬體上執行測試),我們可以將 KUnit 包含在任何核心中,讀取結果,並手動解析。
注意
KUnit 不適合在生產系統中使用。 測試可能會降低系統的穩定性或安全性。
配置核心¶
KUnit 測試可以在不使用 kunit_tool 的情況下執行。 如果出現以下情況,這會很有用:
我們有現有的核心配置需要測試。
需要在真實硬體上執行(或使用 kunit_tool 不支援的模擬器/VM)。
希望與某些現有測試系統整合。
KUnit 使用 CONFIG_KUNIT 選項進行配置,並且還可以透過在我們的 .config 中啟用其配置選項來構建單個測試。 KUnit 測試通常(但並非總是)具有以 _KUNIT_TEST 結尾的配置選項。 大多數測試可以構建為模組,也可以構建到核心中。
注意
我們可以啟用 KUNIT_ALL_TESTS 配置選項,以自動啟用所有滿足依賴項的測試。 這是快速測試適用於當前配置的所有內容的好方法。
一旦我們構建了我們的核心(和/或模組),執行測試就很簡單了。 如果測試是內建的,它們將在核心啟動時自動執行。 結果將以 TAP 格式寫入核心日誌(dmesg)。
如果測試構建為模組,它們將在載入模組時執行。
# modprobe example-test
結果將以 TAP 格式出現在 dmesg 中。
debugfs¶
可以從使用者空間透過 debugfs 檔案系統訪問 KUnit(有關 debugfs 的更多資訊,請參見 DebugFS)。
如果啟用了 CONFIG_KUNIT_DEBUGFS,則 KUnit debugfs 檔案系統將掛載在 /sys/kernel/debug/kunit。 您可以使用此檔案系統執行以下操作。
檢索測試結果¶
您可以使用 debugfs 檢索 KUnit 測試結果。 可以從 debugfs 檔案系統中訪問測試結果,位於以下只讀檔案中
/sys/kernel/debug/kunit/<test_suite>/results
測試結果以 KTAP 文件的形式列印。 請注意,此文件與核心日誌是分開的,因此可能具有不同的測試套件編號。
在核心啟動後執行測試¶
您可以使用 debugfs 檔案系統來觸發內建測試在啟動後執行。 要執行測試套件,您可以使用以下命令寫入 /sys/kernel/debug/kunit/<test_suite>/run 檔案
echo "any string" > /sys/kernel/debugfs/kunit/<test_suite>/run
因此,測試套件執行,結果將列印到核心日誌中。
但是,此功能不適用於使用 init 資料的 KUnit 套件,因為 init 資料可能在核心啟動後被丟棄。 使用 init 資料的 KUnit 套件應使用 kunit_test_init_section_suites() 宏定義。
此外,您不能使用此功能同時執行測試。 相反,測試將等待執行,直到其他測試完成或失敗。
注意
對於測試作者,要使用此功能,測試需要正確初始化和/或清理任何資料,以便測試第二次正確執行。