tshell_blog

ソフトウェアと車輪がついた乗り物のはなし

Fuegoにテストを追加する(スクリプト編)

前回はホストPCにFuegoをインストールし,サンプルを実行しました。 tshell.hatenablog.com

今回はシェルスクリプトとして記述したテストを追加する方法です。

環境

前回と同様以下の環境を使用しました。

  • ホストPC : ubuntu 18.04 LTS
  • ターゲット : Raspberry Pi 3(Raspbian Buster Lite)
  • fuego (Commit eeb3c08c...)

作業手順

以下の作業を行ってテストを追加します。

  1. テストディレクトリの作成
  2. テストスクリプトの作成
  3. spec.jsonの作成
  4. fuego_test.shの作成
  5. テストの登録

今回はmytestという名前のテストを作成します。

ディレクトリ作成

Fuegoのインストールディレクトリにテストを作成します。Fuegoは/home/ユーザー名/fuegoにインストールされているとします。
ホストPCのターミナルで以下のコマンドを実行します。

cd /home/ユーザー名/fuego/fuego-core/tests
mkdir Functional.mytest
cd Functional.mytest

テストスクリプトの作成

作成したFunctional.mytestディレクトリの中にmytest-target.shを以下の内容で作成します。
与えられた引数をそのまま表示するスクリプトです。

#!/bin/bash

echo $1

spec.jsonの作成

以下の内容でテストスペックを設定するファイルspec.jsonを作成します。このファイルは必ずspec.jsonという名称で作成する必要があります。

{
        "testName": "Functional.mytest",
        "specs":{
                "fail":{
                        "ARG":"FAIL"
                },
                "success":{
                        "ARG":"SUCCESS"
                },
                "default":{
                        "ARG":"SUCCESS"
                }
        }
}

ここで設定したARGはあとで述べるfuego_test.shの中でFUNCTIONAL_MYTEST_ARGとして使用できます。spec.jsonの中でARGとだけ記述したものに自動的にテスト名が付加されます。

fuego_test.shの作成

以下の内容でfuego_test.shを作成します。このファイルもfuego_test.shという名前で作成する必要があります。

function test_deploy {
        put $TEST_HOME/mytest-target.sh $BOARD_TESTDIR/fuego.$TESTDIR/
}

function test_run {
        report "cd $BOARD_TESTDIR/fuego.$TESTDIR; \
                ./mytest-target.sh $FUNCTIONAL_MYTEST_ARG"
}

function test_processing {
        log_compare "$TESTDIR" "1" "SUCCESS" "p"
}

function test_deployではテスト実行前にターゲットに対して何を転送するか記述しています。

function test_runではテストを実行する際に何をするか記述しています。 Fuegoのreportコマンドは引数で指定されたコマンドを実行して結果をファイルに保存するコマンドです。

Fuego wiki - function report

test_runの中で,spec.jsonで設定したARGを$FUNCTIONAL_MYTEST_ARGとして使っています。

function test_processingはテスト結果を判定する設定です。log_compareコマンドで結果を判定します。

Fuego wiki - function log_compare

各引数の意味は以下のようになっています。

$1 = reflog_prefix = prefix of reference parsed log filename
$2 = match_count = number of matching results
$3 = results_expression
$4 = results_category (either 'p', 'n', or something else)

log_compare "$TESTDIR" "1" "SUCCESS" "p"と記述した場合は,$TESTDIRからログを読み取ってSUCCESSが含まれれば成功とする,という意味になります。

テストの登録

前回のサンプルと同様にFuegoコンテナのコンソールで以下のコマンドを実行して,作成したテストを登録します。

ftc add-jobs -b myboard -t Functional.mytest

上記のコマンドで登録するとspec.jsonのdefaultに記述した内容が有効になります。別のspecを指定したい場合は以下のようにコマンドを実行します。

ftc add-jobs -b mytest -t Functional.mytest -s fail

以上のようにしてシェルスクリプトで作成したテストをFuegoで実行することができます。