組み込み開発のためのPython · レッスン 216 / 220

プロトコル試験ハーネスを作る

テストパターン、応答検証、タイムアウト、再現条件を分けて自動化します。

同じ試験を何度も行うなら、送信・待機・検証・記録を分けたハーネスにすると再現性が上がります。実機に対して破壊的な操作を行わないよう、試験範囲を限定します。

試験項目と期待結果を先に書く

要求・応答のバイト列、許容時間、再試行回数、成功条件を試験ケースとして表します。正常系だけでなく、不正長、未知の応答、タイムアウトも確認します。試験結果にはケースID、ファームウェア版、接続構成を記録し、失敗を一つの「NG」にまとめないようにします。

実機への作用を小さくする

送信コマンドが設定変更、書込み、モーター起動などを引き起こす可能性を調べます。実機試験の前に、シミュレーター、ループバック、読み取り専用コマンドで通信部分を確認します。再試行が状態変更コマンドを重複実行しないかも、プロトコルの性質に基づいて判断します。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

def verify_reply(reply: bytes, expected_prefix: bytes) -> None:
    if not reply:
        raise TimeoutError("応答が空です")
    if not reply.startswith(expected_prefix):
        raise ValueError(f"想定外の応答: {reply.hex(' ')}")

# まず実機ではなく固定の記録データで検証します。
verify_reply(b"OK,3300\r\n", b"OK,")

手を動かす課題

固定の正常・異常応答を使い、期待する失敗理由とログがケースごとに区別できるテストを追加してください。

参考資料

「7. シリアル通信とハードウェア接続」の章一覧へ