第5回は、JenkinsのJobがテーマです。動的テストをJenkinsから行うためには、動的テストに関する一連の作業内容をJobとして登録しておく必要があります。具体的には、DTシリーズ製品特有のテストポイント挿入から、動的テストの結果の集計までの一連の作業を行うためのコマンドをJob内に記述していくことになります。そこで、このJenkinsのJobを設計する上で押さえておくべきポイントについて考えて行きたいと思います。
基本的な流れ
第2回で紹介しました「テストポイント挿入のための4W2H」も併せて考えたいところですが、今回は図1のような基本的な流れのJobを設計してみたいと思います。
図1: 動的テスト用Jobの基本フロー
図1のフローは、構成管理ツールからコードを取得してから、テストポイントの挿入、ビルド、ディプロイ、テスト実行、解析、結果のアウトプットまでの基本フローを表したものです。それぞれの項目についてもう少し詳しく説明いたします。
コードの取得
Jenkinsはユーザーに代わりSubversionやGitなどの構成管理ツールからコードを取得します。このとき、ユーザ用ワークスペースとは分けて環境を作ったほうが都合がよいので、Jenkins用として独自のワークスペースを作っておくことをおすすめします。
プロジェクト作成
今回のフローでは常に新規にプロジェクトを作ることを想定しています。当然ながら、毎回プロジェクトを新規に作らずに、同じものを使用することも可能ですが、今回は最初の設計ということもあり、あえて常に新規にプロジェクトを作るようにしています。尚、プロジェクトの作成には次のコマンドを使用します。
テストポイント挿入
テストポイントの挿入は、テストポイントの挿入の対象となるファイルのリストを予め作っておき、そのリストを指定してテストポイントの挿入を行います。
ビルド
テストポイントが挿入されたファイルのビルドを行います。最近の統合開発環境は、ビルドの実行もCUIでできるようになっていますので、ビルドのためのコマンドを指定します。
ディプロイ
組込み機器の場合、ファームウェアの焼き込みやロードを行う必要がありますので、このタイミングで指定します。
テスト実行
DT10を起動して、テスト実行を行います。このフェーズでは、データ収集を開始後、対象ソフトを自動でテストするためのテストスクリプトを流していくことになります。
テストレポートの解析
収集したデータを解析します。
結果のアウトプット
テストレポートを解析した結果をCSVファイルで出力し、成果物として残します。
Jobの記述例
基本、Job内で実行するコマンドはバッチファイルを実行するのと同様ですので、前述の基本フローをコマンドに起こすと次のような記述になります。最初の方の環境変数の設定は、バッチファイル内での記述内容をできるだけ簡略化するために使用しています。
@echo off set RESULT_FOLDER=%JENKINS_HOME%\jobs\%JOB_NAME%\Builds\%BUILD_NUMBER%\DT10 set DT_ROOT=%WORKSPACE%\trunk\AnalogBoxDemo1 set DT_PROJ="%RESULT_FOLDER%\AnalogBoxDemo.rprj" set DT_CSV=%DT_TESTTOOL%\csv set TI_HOME=%ProgramFiles%\Texas Instruments set TI_CCS=%TI_HOME%\ccsv4 set TI_JAVA="%TI_CCS%\eclipse\jre\bin\java" set TI_JAR="%TI_CCS%\eclipse\startup.jar" set TI_FLASH="%TI_HOME%\Stellaris\LM Flash Programmer\LMFlash" set TI_WORKSPACE="%WORKSPACE%\trunk" set TI_IMAGE="%DT_ROOT%\Debug\AnalogBoxDemo.bin" set TI_FLASH_OPT=--debug-port=JTAG --interface=ICDI --speed=300000 --frequency=6 set TI_FLASH_RESET=--hreset set TEST_COMMAND=%DT_TESTTOOL%\bin\TestCommand.exe @echo on @echo === プロジェクトの新規作成 ========= mkdir %RESULT_FOLDER% DTCmd -newproj %DT_PROJ% %DT_ROOT% gpio4bit 0x00010 rem %DT_SETTINGS% @echo. @echo. @echo === テストポイントの挿入 ========= DTCmd -newins %DT_PROJ% %DT_FILELIST% @echo. @echo. @echo === ビルド ===== %TI_JAVA% -jar %TI_JAR% -data %TI_WORKSPACE% -application com.ti.ccstudio.apps.projectBuild -ccs.workspace @echo === ディプロイ =================== %TI_FLASH% %TI_FLASH_OPT% %TI_IMAGE% @echo === DT10起動 =================== DTCmd -project %DT_PROJ% @echo === データ収集開始 =================== DTCmd -trace start @echo === リセットスタート =================== %TI_FLASH% %TI_FLASH_RESET% @echo === テスト自動実行 =================== %TEST_COMMAND% COM4 "test up" %TEST_COMMAND% COM4 "test down" %TEST_COMMAND% COM4 "test rand" %TEST_COMMAND% COM4 "test screen" @echo === データ収集停止 =================== DTCmd -trace stop @echo === レポート解析 =================== DTCmd -analyze all @echo === レポート出力 =================== mkdir %DT_CSV% DTCmd -export coverage %DT_CSV%\coverage.csv DTCmd -export exectime %DT_CSV%\exectime.csv DTCmd -export period %DT_CSV%\period.csv @echo === DT10終了 =================== DTCmd -exit save
最後に
いかがでしたでしょうか?
今回はJenkinsのJobの設計を行いました。一連の作業内容をコマンドに起こしてみると、「意外とあっさりしているな」といった感覚を持っていただけたのではないでしょうか?まずは欲張らず、少しずつトライしてみることをおすすめいたします。
次回は、今回設計したJobをJenkins上で作成し、実際に動かしてJenkins上で動的テストを行っている様子もご紹介したいと思います。
バックナンバー
- 「動的テストの自動化を考える #1」- 動的テスト自動化のメリット
- 「動的テストの自動化を考える #2」- テストポイント挿入のための4W2H
- 「動的テストの自動化を考える #3」- CUIによるテストポイント挿入
- 「動的テストの自動化を考える #4」- DTシリーズ製品をJenkinsで動かすための準備
- 「動的テストの自動化を考える #5」- 動的テスト自動化のための設計
- 「動的テストの自動化を考える 番外編」- ESEC2018に出展したテスト自動化のデモ
- 「動的テストの自動化を考える #6」- Jobの設計
- 「動的テストの自動化を考える #7」- Jenkinsのパイプラインで何ができるか
- 「動的テストの自動化を考える 番外編2」- ET2018に出展したテスト自動化デモ
- 「動的テストの自動化を考える #8」- Jenkinsのパイプラインで動的テストの自動化を設計
- 「動的テストの自動化を考える #最終回」- Jenkinsのパイプラインで動的テストの自動化を実現
- 「動的テストの自動化を考える #最終回のおまけ」- Jenkinsによる動的テスト自動化の動画