スクリプトを使用して自動テストを行う
Note
ここでは、スクリプトを用いて自動テストを行います。 ページ内のサンプルスクリプトをコピーするまたは参考にしてテキストエディタ等で python ファイルを作成してください。
サンプルを使ってスクリプトを理解する
AUTOmeal では Python 形式のスクリプトファイルに自動化したい制御・計測・判定の命令を記述し、そのスクリプトを読み込むことでテストを自動化させることができます。
使用するAPI
サンプルスクリプトで使用される CAN 通信の API は以下です。
# CAN 通信設定の識別名 Vector-VN1610-1 のチャンネル1から ID[0x100] データ[0x01, 0x02, 0x03] を送信します。
am.send_can("Vector-VN1610-1", 1, 0x100, [0x01, 0x02, 0x03] )
# CAN 通信設定の識別名 Vector-VN1610-1 のチャンネル1から メッセージ定義ファイルで定義されている "Test1" を送信します。
am.send_can_message("Vector-VN1610-1", 1, "Test1")
# CAN 通信設定の Vector-VN1610-1 のチャンネル1で ID[0x100] の最後に受信したメッセージを取得します。
am.get_latest_can("Vector-VN1610-1", 1, 0x100, "R")
# 指定した CAN の ID で次のメッセージを受信するまでタイムアウト付きで待機します。
am.wait_for_next_can_message("Vector-VN1610-1", 1, 0x100, 5000)
制御では CAN 通信設定で設定された ”識別名” と ”チャンネル” 送信したい “メッセージ (ID,Data)” を記載することで送信します。メッセージには byte 配列を記載できます。
計測では CAN 通信設定で設定された ”識別名” と ”チャンネル” と送受信方向 “R/S” を記載すると最新の送信 / 受信メッセージを取得できます。 受信待ちをする場合、“ポート名” とタイムアウトまでの時間 (ms) を記載します。
詳細はスクリプトリファレンスを参照してください。
サンプルスクリプト
CAN 通信設定の Vector-VN1610-1 からメッセージを送信します。
import automeal as am
import time
# メッセージを送信します。
# CAN 通信設定の Vector-VN1610-1(ch1) から ID=0x100, data=0x010203 のメッセージを送信します。
am.send_can("Vector-VN1610-1", 1, 0x100, [0x01, 0x02, 0x03] )
# 送信待ちを行います。
time.sleep(0.5)
# Vector-VN1610-1(ch1) で最後に受信した ID=0x100 のメッセージを表示します。
result_can = am.get_latest_can("Vector-VN1610-1", 1, 0x100, "R")
if len(result_can) == 0 :
print('受信データはありません。', flush=True)
else :
print(f'CAN 受信データ:{result_can}', flush=True)
# ID:0x100 を受信するまで待機 (無限待ち) し、受信したデータの表示を行います。
result_can = am.wait_for_next_can_message("Vector-VN1610-1", 1, 0x100)
print(f'CAN 受信データ:{result_can}', flush=True)
スクリプトをカスタマイズする
スクリプトをカスタマイズしてみましょう。
CAN 通信で送信するデータを変更します。 メッセージ定義ファイルで定義されているメッセージを送信します。
import automeal as am
import time
# メッセージを送信します。
# CAN 通信設定の Vector-VN1610-1 からメッセージを送信します。
am.send_can_message("Vector-VN1610-1", 1, "Test1")
# 送信待ちを行います。
time.sleep(0.5)
# 受信したメッセージの表示を行います。
result_can = am.get_latest_can("Vector-VN1610-1", 1, 0x100, "R")
if len(result_can) == 0 :
print('受信データはありません。', flush=True)
else :
print(f'CAN 受信データ:{result_can}', flush=True)
# 受信するまで待機し、受信したメッセージの表示を行います。
# 5 秒間受信しなかった場合はエラー (例外) となります。
result_can = am.wait_for_next_can_message("Vector-VN1610-1", 1, 0x100, 5000)
print(f'CAN 受信データ:{result_can}', flush=True)
スクリプトを適切な場所に置く
スクリプトは <プロジェクトルート> の中のフォルダに置くことを推奨しています。
スクリプトを配置するフォルダとしては 2 種類あり、その違いは以下です。
自動テストの実行対象とするかどうかで、どちらに配置するか判断してください。
- <Scripts>
- 自動テストで実行の対象としたいスクリプトファイル。
- <Macros>
- 自動テストで実行の対象としたくないスクリプトファイル。
- モジュールやライブラリ、特定動作をマクロ化したスクリプトなど、他のスクリプトから呼び出して利用することを想定したスクリプトファイルなどはこちらに配置してください。
スクリプトを TestRunner アプリ GUI 上から実行する
1. テスト実行中の状態で、メニューバーの [テスト] > [スクリプトの実行] をクリックします。
2. Macros または Scripts に配置したスクリプトを選択します。
3. コマンドプロンプトが立ち上がり、スクリプトが実行されるため終了を待ちます。
4. [テストログ] ペインに開始、完了の情報及び、スクリプトに記述したログが出力されます。
スクリプトをコマンドラインから実行する
スクリプトファイルの配置
作成したスクリプトファイルは <プロジェクトルート>\Scripts 以下に配置してください。
フォルダ内にさらにフォルダを作成することもできます。
例
📂Scripts
📄FullTest.py
📂FuncA
📄FuncATest1.py
📄FuncATest2.py
…
📂FuncB
📄FuncBTest1.py
📄FuncBTest2.py
…
テストを実行する
プロジェクトルートでコマンドプロンプトを起動し、コマンドを実行します。
パターンの指定は <プロジェクトルート>\Scripts からの相対パスで指定します。
例 :
-
全てのスクリプトを実行する
TestRunnerCLI -
特定のスクリプトのみ実行する
TestRunnerCLI FuncA\FuncATest1.py -
特定のフォルダ以下すべてを実行する
TestRunnerCLI FuncB\*.py -
特定のファイル名を含むスクリプトを実行する
TestRunnerCLI **\Func*Test*.py
Note
一度の実行で実行されるスクリプトは順不同になります。 実行順を担保したい場合はコマンドを複数回に分けて実行してください。
実行中
実行中はコマンドプロンプトに実行ログと進捗の表示が行われます。
実行完了すると、次のコマンドが実行できるようになります。
結果を確認する
TestRunner アプリ上でのログの確認
アプリケーション下部の [出力] ペインには、動作ログやエラー詳細情報などが表示されます。 [テストログ] ペインにはテストログやテスト実行中のエラー情報などが表示されます。 テストスクリプトに print 文で記述した内容は [テストログ] ペインに表示されます。
| 種別 | 文字色 | 内容 |
|---|---|---|
| Error | 赤系 | 期待する動作の完了・継続に支障が出た場合の通知です。 |
| Warn | 黄系 | 何らかの不都合が生じたものの、処理の完了・継続に支障がない場合の通知です。 |
| Info | 黒系 | 動作開始・完了などユーザがアプリの状態を把握するための情報です。スクリプトで print を行った場合 Info レベルで出力されます。 |
全体サマリーの確認
Note
全体サマリーは TestRunnerCLI (コマンドライン) から自動テストを実行した場合のみ生成されます。
<プロジェクトルート>\Reports にあるテストランフォルダを確認します。
確認したい実行日時のテストランフォルダを開いてください。
テキストエディタや Excel 等でテストランフォルダ内にある Result.csv を開きます。
Result.csv には実行結果、実行日時、実行したスクリプト名が記載されています。
CSV 形式のため、必要に応じてツール等で結果を集計できます。