CMakeコマンド「ctest_submit()」でテスト結果をCDashサーバーに送信

2024-04-10

CMakeのコマンド「ctest_submit()」詳細解説

ctest_submit()は、CMakeの「Commands」カテゴリに属するコマンドで、テスト結果をCDashなどのダッシュボードサーバーに送信するために使用されます。テスト実行後の結果を可視化、共有したい場合に役立ちます。

基本構文

ctest_submit([PARTS <part>...] [FILES <file>...] [RETRY_COUNT <count>] [RETRY_DELAY <delay>] [RETURN_VALUE <result-var>] [QUIET])

オプション解説

  • PARTS

送信するテスト結果の種類を指定します。複数指定可能です。

* `Start`: テスト開始情報
* `Update`: テスト更新情報
* `Configure`: テスト設定情報
* `Build`: テストビルド情報
* `Test`: テスト実行情報
* `Coverage`: テストカバレッジ情報
* `MemCheck`: メモリチェック情報
* `Notes`: テストノート情報
* `ExtraFiles`: その他のファイル
* `Upload`: アップロード準備済みファイル
  • FILES

送信する個別のファイルを指定します。PARTSオプションと併用可能です。

  • RETRY_COUNT

タイムアウト時の再送信回数です。デフォルトは3回です。

  • RETRY_DELAY

タイムアウト時の再送信待ち時間(秒)です。デフォルトは10秒です。

  • RETURN_VALUE

送信結果を格納する変数を指定します。成功時は0、失敗時は非0値が返されます。

  • QUIET

エラーメッセージ以外の出力を抑制します。

詳細解説

ctest_submit()は、CDashサーバーとの接続、認証、データ送信処理などを行います。送信するデータは、テスト実行中に生成されたXMLファイルに基づいています。

使用例

  1. テスト実行後にすべての結果をCDashサーバーに送信する
ctest_submit()
  1. テスト実行情報とテストカバレッジ情報のみを送信する
ctest_submit(PARTS Test Coverage)
  1. 特定のXMLファイルを個別に送信する
ctest_submit(FILES Test.xml Coverage.xml)
  1. タイムアウト時の再送信設定
ctest_submit(RETRY_COUNT 5 RETRY_DELAY 30)
  1. 送信結果を変数に格納
set(result 0)
ctest_submit(RETURN_VALUE result)

if(result)
  message(ERROR "Submit failed")
endif()

注意事項

  • CDashサーバーへの接続には、事前に設定が必要です。詳細はCDashのドキュメントを参照してください。
  • テスト実行前にctest_start()コマンドを実行する必要があります。
  • 送信するXMLファイルは、テスト実行中に生成されます。ファイルが存在しない場合はエラーが発生します。

補足

ctest_submit()コマンドは、テスト結果を共有、分析する際に非常に有用です。CDash以外にも、JenkinsやTravis CIなどのCIツールと連携して、自動化されたテストパイプラインを構築することも可能です。



CMakeコマンド「ctest_submit()」サンプルコード集

ctest_start()
ctest_run()
ctest_submit()

テスト実行情報とテストカバレッジ情報のみを送信

ctest_start()
ctest_run()
ctest_submit(PARTS Test Coverage)

特定のXMLファイルを個別に送信

ctest_start()
ctest_run()
ctest_submit(FILES Test.xml Coverage.xml)

タイムアウト時の再送信設定

ctest_start()
ctest_run()
ctest_submit(RETRY_COUNT 5 RETRY_DELAY 30)

送信結果を変数に格納

set(result 0)
ctest_start()
ctest_run()
ctest_submit(RETURN_VALUE result)

if(result)
  message(ERROR "Submit failed")
endif()

CDashサーバー設定ファイルの指定

set(CDASH_HOST "my-cdash-server.com")
set(CDASH_PORT 80)
set(CDASH_PROJECT "MyProject")

ctest_start()
ctest_run()
ctest_submit()

テストケース結果に基づいて送信内容を分岐

if(TEST_CASES_PASSED)
  ctest_submit(PARTS Test Coverage)
else()
  ctest_submit(PARTS Test)
endif()

環境変数からCDashサーバー情報を読み込み

set(CDASH_HOST $ENV{CDASH_HOST})
set(CDASH_PORT $ENV{CDASH_PORT})
set(CDASH_PROJECT $ENV{CDASH_PROJECT})

ctest_start()
ctest_run()
ctest_submit()

複数のCDashサーバーに送信

ctest_submit(SERVER1 "my-cdash-server1.com" PORT1 80 PROJECT1 "MyProject1")
ctest_submit(SERVER2 "my-cdash-server2.com" PORT2 80 PROJECT2 "MyProject2")

送信前にテスト結果をローカルファイルに保存

ctest_start()
ctest_run()
ctest_submit(SAVE_RESULTS "results.xml")

# 後で送信
ctest_submit(FILES results.xml)

テスト実行ログとテスト結果をまとめて送信

ctest_start()
ctest_run()
ctest_submit(PARTS Test Coverage Log)

テスト実行後に自動的にCDashサーバーに接続

set(CTEST_SUBMIT_ON_SUCCESS TRUE)
ctest_start()
ctest_run()

テスト結果の送信前にカスタム処理を実行

function(ctest_submit_pre_hook)
  # 何か処理
endfunction()

ctest_register_submit_pre_hook(ctest_submit_pre_hook)

ctest_start()
ctest_run()
ctest_submit()

テスト結果の送信後にカスタム処理を実行

function(ctest_submit_post_hook)
  # 何か処理
endfunction()

ctest_register_submit_post_hook(ctest_submit_post_hook)

ctest_start()
ctest_run()
ctest_submit()

CMake GUIからCTestSubmitコマンドを実行

  • CMake GUIの「CTest」タブで「Submit Results」ボタンをクリック
  • 必要に応じて送信内容やCDashサーバー設定を編集
  • 「Submit」ボタンをクリック

その他

  • 詳細なオプション設定については、CMakeドキュメントのctest_submit()コマンドのページを参照してください。
  • CDashサーバーの設定や使用方法については、CDashドキュメントを参照してください。


CMakeコマンド「ctest_submit()」以外の方法

CTest GUI

CMake GUIの「CTest」タブには、「Submit Results」ボタンがあります。このボタンをクリックすると、テスト結果をCDashサーバーに送信することができます。必要に応じて、送信内容やCDashサーバー設定を編集できます。

CDash CLIツール

CDashには、コマンドラインインターフェース (CLI) ツールが用意されています。このツールを使用して、テスト結果をCDashサーバーに送信することができます。

カスタムスクリプト

PythonやPerlなどのスクリプト言語を使用して、CDash APIと直接通信し、テスト結果を送信することができます。

CIツール

JenkinsやTravis CIなどのCIツールを使用して、テスト実行後に自動的にCDashサーバーに送信することができます。

各方法のメリットとデメリット

方法メリットデメリット
ctest_submit()コマンド簡単に使用できる設定が複雑になる場合がある
CTest GUI直感的CMake GUIが必要
CDash CLIツール柔軟性が高い設定が複雑になる場合がある
カスタムスクリプト詳細な制御が可能スクリプト作成スキルが必要
CIツール自動化できるCIツールの設定が必要

以下は、各方法を選択する際の目安です。

  • 簡単さを求める場合: ctest_submit()コマンドまたはCTest GUI
  • 柔軟性を求める場合: CDash CLIツールまたはカスタムスクリプト
  • 自動化を求める場合: CIツール



CMakeにおける"get_target_property()"コマンド: ターゲットの情報を自在に操る

get_target_property()コマンドは、CMakeプロジェクトで定義されたターゲットからプロパティを取得するために使用されます。ターゲットプロパティは、ターゲットのビルド方法や動作を制御するために使用される情報です。構文引数VAR: ターゲットプロパティの値を格納する変数名



CMake try_compile() を使って特定のライブラリがインストールされているかどうかを確認する方法

try_compile() は、CMake の強力なコマンドの一つで、コードを実際にコンパイルすることなく、コンパイルが成功するかどうかを確認することができます。これは、特定のコンパイラやオプションがシステム上で使用可能かどうかをテストしたり、コードの移植性を検証したりする際に非常に便利です。


CMake の if() コマンド: デバッグとトラブルシューティング

構文条件式if() コマンドの引数には、条件式を指定します。条件式は、以下のいずれかの形式で記述できます。変数の比較: <variable> <operator> <value>コマンドの存在チェック: COMMAND <command-name>


C++標準ライブラリ、テンプレートエンジン、シェルスクリプト... string()コマンドの代替方法を徹底比較

CMakeのstring()コマンドは、文字列処理を行うための強力なツールです。C++のstd::stringのような機能に加え、CMake特有の便利な機能も備えています。主な機能文字列の連結、分割、置換、比較大文字・小文字変換部分文字列の抽出


【初心者向け】CMakeでテストを実行する3つのステップ: ctest_test() コマンドから始める

引数:<test_name>: 実行するテストの名前。ワイルドカードを使用して、名前パターンに一致する複数のテストを選択できます。[OPTIONAL arguments]: テストの実行方法を制御するオプション引数。ctest_test()コマンドには、テストの実行方法を細かく制御するための様々なオプション引数が用意されています。以下に、よく使用されるオプション引数をいくつか紹介します。



CMake_PROJECT_VERSION_MAJOR を使用してヘッダーファイルのバージョンマクロを定義する方法

CMAKE_PROJECT_VERSION_MAJOR は、CMake プロジェクトのメジャーバージョンを表す変数です。プロジェクトのバージョン情報を設定する project() コマンドによって設定されます。この変数は、ビルドプロセス全体で使用でき、プロジェクトのバージョンを特定するために役立ちます。


JOB_POOL_PRECOMPILE_HEADER プロパティ徹底解説

JOB_POOL_PRECOMPILE_HEADER は、Ninja マルチビルドシステムを使用する場合、プリコンパイル済みヘッダー生成の並列処理を制御する CMake プロパティです。このプロパティを設定することで、ビルド時間の短縮を期待できます。


CMake find_libraryコマンドとfind_packageモジュールの比較

find_library() コマンドは、CMake で外部ライブラリを見つけるために使用されます。これは、プロジェクトに必要なライブラリを自動的に検出して、ビルドプロセスを簡略化するのに役立ちます。コマンドフォーマット<VAR>: 検索結果を格納する変数名


CMake で Objective-C プロジェクトをビルドするメリットとデメリット

CMakeでObjective-Cプロジェクトをビルドするには、環境変数 を設定する必要があります。環境変数は、コンパイラやリンカーなどのツールが、Objective-Cソースコードをどのようにコンパイルし、リンクするかを指示するために使用されます。


CMakeの環境変数:LD_LIBRARY_PATH、CPATH、CMAKE_PREFIX_PATHの役割と設定方法

CMAKE_PREFIX_PATHの概要CMAKE_PREFIX_PATHは、find_package()、find_program()、find_library()、find_file()、**find_path()**などのコマンドが、必要なライブラリやヘッダーファイルなどを検索する際に使用するディレクトリを指定します。これは、複数のディレクトリに分散してインストールされたライブラリやヘッダーファイルを、一括して検索できるようにするためのものです。