嵌入式自動化測試框架Fuego:添加新測試

步驟概述

要將新測試添加到Fuego,您需要執行以下步驟:

  1. 確定測試名稱和類型
  2. 製作測試目錄
  3. 獲取測試的源(或二進制)
  4. 編寫測試腳本
  5. 添加測試的test_specs(如果有)
  6. 將日誌處理添加到測試中
  7. (如果是基準測試)添加parser.py以及標準和參考文件
  8. 爲測試創建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存儲庫中的源代碼,則可以通過在測試腳本中添加變量gitrepogitref來引用此源代碼。
在這種情況下,gitrepo是用於訪問源的URLgitref是指提交代碼(特定的版本)的提交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.pypython程序,該程序掃描測試日誌並生成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} 是否解析了帶有結果(正數或負數)的日誌,以確定測試通過/失敗 所有
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章