步驟概述
要將新測試添加到Fuego
,您需要執行以下步驟:
- 確定測試名稱和類型
- 製作測試目錄
- 獲取測試的源(或二進制)
- 編寫測試腳本
- 添加測試的
test_specs
(如果有) - 將日誌處理添加到測試中
- (如果是基準測試)添加
parser.py
以及標準和參考文件 - 爲測試創建Jenkins測試配置
確定測試名稱
創建測試的第一步是確定測試名稱。Fuego
支持兩種類型的測試:功能測試和基準測試。功能測試通過或失敗,而基準測試則產生一個或多個代表系統性能測量的數字。
通常,測試的名稱將是測試類型和標識測試本身的名稱的組合。以下是一些示例:bonnie
是流行的磁盤性能測試。在fuego
系統中此測試的名稱爲Benchmark.bonnie
。運行posix
測試套件的一部分的測試是功能測試(通過或失敗),在Fuego
中被稱爲Functional.posixtestsuite
。測試名稱應爲一個字(不能有空格)。
該名稱用作測試材料在Fuego
系統中的目錄名稱。
創建測試目錄
主測試目錄位於/fuego-core/engine/tests/<test_name>
因此,如果您剛剛創建了一個名爲foo
的新功能測試,則將創建目錄:
/fuego-core/engine/tests/Functional.foo
獲取測試源
測試程序本身的實際創建超出了Fuego
的範圍。Fuego
旨在執行現有的測試程序,該程序已經存在源代碼或腳本。
本頁介紹如何將此類測試程序集成到Fuego
測試系統中。
Fuego
中的測試程序以源代碼形式提供,因此可以針對被測試目標使用的任何處理器體系結構進行編譯。此源可以是tarfile
的形式,也可以是對git
存儲庫的引用以及一個或多個補丁的形式。
通過手動下載測試源並創建tarfile
,爲測試創建tarfile
。或者,請注意測試源的git
存儲庫參考。
tarball
源
如果您以tarfile
的形式使用source
,則將tarfile
的名稱(稱爲tarball
)添加到測試腳本中。
壓縮文件可以被壓縮。支持的壓縮方案及其關聯的擴展爲:
- 未壓縮(擴展名=
'.tar'
) - 用gzip壓縮(擴展名=
'.tar.gz'
或'.tgz'
) - 用bzip2壓縮(擴展名=
'.bz2'
)
例如,如果測試源位於tarfile 'foo-1.2.tgz'
中,則應在測試腳本中添加以下行,以引用此源:
tarball=foo-1.2.tgz
git
源
如果您使用在線git
存儲庫中的源代碼,則可以通過在測試腳本中添加變量gitrepo
和gitref
來引用此源代碼。
在這種情況下,gitrepo
是用於訪問源的URL
,gitref
是指提交代碼(特定的版本)的提交ID(哈希,標記,版本等)。
例如,如果您的測試程序是從在線foo
存儲庫中的源代碼構建的,而您想使用該版本的1.2版(在存儲庫中的master
分支上標記爲v1.2),則您可能擁有測試腳本中的某些如下所示行。
gitrepo=http://github.com/sampleuser/foo.git
gitref=master/v1.2
基於腳本的源
一些測試非常簡單,可以作爲單個腳本(在板上運行)實現。對於這些測試,不需要其他源,腳本可以直接放置在測試的主目錄中。在部署階段,腳本直接從測試主目錄而不是從測試構建目錄發送到開發板。
測試腳本
測試腳本是一個小的腳本,編寫了shell
腳本語言並稱爲fuego_test.sh
。它指定了包含測試程序的源tarfile
,並提供了構建,部署,執行和評估測試程序結果所需功能的實現。
功能測試的測試腳本應包含以下內容:
- 來源參考(tarball或gitrepo和gitref)
- 函數test_pre_check(可選)
- 函數test_build
- 函數test_deploy
- 函數test_run
- 函數test_processing
test_pre_check
函數是可選的,用於檢查測試環境以及目標配置和設置是否正確,以便運行測試。
示例測試腳本
這是fuego_test.sh
測試Functional.hello_world
的腳本。該腳本演示了測試腳本的許多核心元素。
#!/bin/bash
tarball=hello-test-1.0.tgz
function test_build {
make
}
function test_deploy {
put hello $BOARD_TESTDIR/fuego.$TESTDIR/
}
function test_run {
report "cd $BOARD_TESTDIR/fuego.$TESTDIR; ./hello $FUNCTIONAL_HELLO_WORLD_ARG"
}
function test_processing {
log_compare "$TESTDIR" "1" "SUCCESS" "p"
}
基本測試功能的說明
基本測試功能(test_build,test_deploy,test_run和test_processing
)非常簡單。每個語句包含一些語句以完成測試執行的這一階段。
您可以在以下鏈接中找到有關這些功能的更多信息:
測試規範和計劃
每個測試的另一個要素是“測試規範”。文件用於定義一組參數,這些參數用於爲特定用例定製測試。
您必須爲此測試定義測試規範,並將其添加到適當的測試計劃中。
系統中的每個測試都必須具有一個測試規範文件。該文件用於列出測試的可自定義變量。
如果測試程序沒有可自定義的變量,或者不需要任何變量,那麼至少必須定義一個“默認”測試規範,並且沒有測試變量。
測試規格文件爲:
- 在測試目錄中名爲
spec.json
- JSON格式
- 提供一個
testName
屬性,以及一個specs
屬性,它是一個列表 - 可以包含您想要的任何命名規範,但必須至少定義測試的“默認”規範
- 請注意,如果需要,“默認”規範可以爲空。
這是一個沒有定義變量的示例。
{
"testName": "Benchmark.OpenSSL",
"specs": {
"default": {}
}
}
這是Functional.hello_world
示例的spec.json
,它定義了三個規範:
{
"testName": "Functional.hello_world",
"specs": {
"hello-fail": {
"ARG":"-f"
},
"hello-random": {
"ARG":"-r"
},
"default": {
"ARG":""
}
}
}
接下來,您可能需要向一個testplan
文件中添加一個條目。這些文件位於目錄/fuego-core/engine/overlays/testplans
。
選擇您想要包括此測試的測試計劃,然後編輯相應的文件。例如,要將您的測試添加到使用“默認”測試計劃時執行的測試列表中,請在testplan_default.json
文件中添加一個default
條目。
請注意,如果不是“測試”列表中的最後一個逗號,則應在輸入後添加逗號。
請閱讀測試規格和計劃以獲取更多詳細信息。
測試結果解析器
每個測試還應該提供某種機制來解析測試程序的結果,並確定測試是否成功。
對於簡單的功能測試,您可以使用log_compare函數來指定要在測試日誌中搜索的模式,以及應該找到該模式的次數以指示測試成功。這是通過測試腳本中的test_processing函數完成的 。
這是對log_compare
的調用示例:
function test_processing {
log_compare "$TESTDIR" "11" "^TEST.*OK" "p"
}
本示例查找模式^TEST.*OK
,該模式在測試日誌中找到以單詞TEST
開頭並在同一行後跟字符串OK
的行。查找此模式11次。
log_compare
可用於解析具有面向行輸出的簡單測試的日誌。
對於具有更復雜輸出的測試以及對於生成數值結果的基準測試,您必須添加一個名爲parser.py
的python
程序,該程序掃描測試日誌並生成Fuego
系統其他部分使用的數據結構。
有關此程序的信息, 請參見parser.py。
提供條件和參考信息
您還應該向Fuego
提供信息,以指示如何評估測試的最終分辨率。
對於功能測試,通常只有在測試中所有單個測試用例通過的情況下,整個測試才通過。即,一個測試用例中的一個錯誤表示整體測試失敗。但是,對於基準測試,結果評估更爲複雜。需要指定哪些數字構成測試的成功與失敗。
另外,對於非常複雜的功能測試,可能會有複雜的結果,例如,某些結果應忽略。
您可以通過爲測試創建一個“ criteria.json ”文件來指定用於評估測試結果的標準。
最後,您可能希望添加一個文件,該文件指示有關測試結果的某些信息。此信息放置在“ reference.json ”文件中以進行測試。
請查看這些文件的鏈接,以進一步瞭解它們是什麼以及如何編寫它們,併爲您的系統自定義它們。
Jenkins
工作定義文件
創建測試的最後一步是爲其創建Jenkins
作業。
一個Jenkins
工作向Jenkins
描述了要在哪個板上運行測試,要傳遞給測試的變量(包括測試規範(或變體))以及要運行的測試腳本。
Jenkins
作業是使用命令行工具ftc
創建的。
Jenkin
工作名爲 <node_name>.<spec>.<test_type>.<test_name>
您可以使用以下命令創建Jenkins
作業:
$ ftc add-jobs -b myboard -t Functional.mytest [-s default]
ftc
add-jobs
子命令使用“ -b”指定板,“-t”指定測試,並使用“ -s”指定將用於此Jenkins
作業的測試規範。
在這種情況下,將創建的Jenkins
作業的名稱爲:
myboard.default.Functional.mytest
這將在 /var/lib/jenkins/jobs/<job_name>
目錄中創建一個名爲config.xml
的文件。
發佈測試
普遍感興趣的測試應提交以包含在fuego-core
中。
現在,執行此操作的方法是創建一個提交併將該提交發送到fuego
郵件列表,以進行審查,並希望由fuego
維護者接受和集成。
將來,將提供一臺服務器,供測試開發人員共享在“測試市場”中創建的測試。測試可用於瀏覽和下載,其他開發人員的結果可與您自己的結果進行比較。對於使用ftc package-test
功能打包測試,已經有了初步的支持。將來將提供有關此服務的更多信息。
技術細節
本節包含有關測試的技術詳細信息。
目錄結構
Fuego
使用的目錄結構記錄在Fuego目錄中
文件
一個測試包含以下文件或項目:
文件或項目 | 格式 | 位置 | 說明 | 測試類型 |
---|---|---|---|---|
config.xml | Jenkins XML | /var/lib/jenkins/jobs/{test_name} | 具有測試的Jenkins(前端)配置 | 所有 |
壓縮文件 | tar格式 | /fuego-core/engine/tests/{test_name} | 擁有測試程序的源代碼 | 所有 |
補丁 | 補丁格式 | /fuego-core/engine/tests/{test_name} | 零個或多個補丁來自定義測試程序(在解壓縮階段應用 | 所有 |
基本腳本 | 外殼腳本 | /fuego-core/engine/tests/{test_name}/fuego_test.sh | 是在Fuego中實現不同測試階段的Shell腳本 | 所有 |
測試規格 | JSON格式 | /fuego-core/engine/tests/{test_name}/spec.json | 具有可用於此測試的變量組(及其值) | 所有 |
測試計劃 | JSON格式 | /fuego-core/engine/overlays/testplans | 擁有整個系統的測試計劃 | 所有 |
解析器 | python | /fuego-core/engine/tests/{test_name} | Python程序可以從日誌中解析出基準指標,併爲Fuego繪圖儀提供字典 | 所有 |
通過標準 | JSON格式 | /fuego-core/engine/tests/{test_name}/criteria.json | 具有測試的“通過”標準 | 所有 |
參考信息 | JSON格式 | /fuego-core/engine/tests/{test_name}/reference.json | 具有有關測試結果的其他信息,例如基準測量的單位 | 所有 |
(不建議使用)reference.log | Fuego-specific | /fuego-core/engine/tests/{test_name} | 具有測試所測量的基準指標的閾值和比較運算符 | 所有 |
(已棄用)P/N日誌 | 文本 | /fuego-core/engine/tests/{test_name} | 是否解析了帶有結果(正數或負數)的日誌,以確定測試通過/失敗 | 所有 |