diff --git a/scripts/verify/run_hwtest.py b/scripts/verify/run_hwtest.py index c5c279f..928e417 100644 --- a/scripts/verify/run_hwtest.py +++ b/scripts/verify/run_hwtest.py @@ -10,13 +10,18 @@ 4. TIASshot.exe --hwtest --camera <機種> を実行ファイルのフォルダで実行し,終了コードと結果ファイルで判定する (実際のフォームが表示される.保存先は %TEMP%\\TIASshot-hwtest\\work-* に差し替えられる) +--with-chart を付けると,チャート不要の検査(preview〜reconnect)の代わりにチャートが必要な検査 +(calibrate・shot・close-saving・close-calibrating.校正を止めない.カメラの前に舌診チャートがはまっている前提)を行う. +チャート不要の検査と続けて実行する(connect・cleanup は両方で行う). + 出力: .verify/hwtest/run-<日時>/ に build.log・hwtest-result.txt・summary.json 終了コード: 0=全項目合格,1=不合格あり(ビルド失敗・検査の不合格・タイムアウト), - 2=前提条件を満たさない(ツール未導入・TIASshot 起動中・指定機種が見つからない・引数不正・--with-chart(未実装)) + 2=前提条件を満たさない(ツール未導入・TIASshot 起動中・指定機種が見つからない・引数不正) 使い方(リポジトリルートで実行): python scripts/verify/run_hwtest.py --camera lucam python scripts/verify/run_hwtest.py --camera iscam + python scripts/verify/run_hwtest.py --camera iscam --with-chart # チャートが必要な検査 python scripts/verify/run_hwtest.py --camera iscam --no-clean # Debug 出力を消さない(開発時の短縮用) """ @@ -31,8 +36,9 @@ from run_selftest import (BUILD_TIMEOUT_SEC, EXE, EXIT_FAIL, EXIT_OK, EXIT_PRECONDITION, REPO, SLN, PreconditionError, clean_build_outputs, find_vs, run_logged) -# 実機テスト内部のウォッチドッグ(全体 10 分)より長くする.超えたらランナーがプロセスを打ち切る +# 実機テスト内部のウォッチドッグ(全体: チャート不要 10 分・--with-chart 20 分)より長くする.超えたらランナーがプロセスを打ち切る HWTEST_TIMEOUT_SEC = 720 +HWTEST_WITH_CHART_TIMEOUT_SEC = 1320 # 実機テスト(TIASshot.exe --hwtest)の終了コード HW_PASS = 0 @@ -53,7 +59,10 @@ parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument("--camera", required=True, choices=["lucam", "iscam"], help="検査するカメラの機種") parser.add_argument("--with-chart", action="store_true", - help="チャートが必要な検査も行う(PLAN_06 フェーズ 2.未実装のため終了コード 2 になる)") + help="チャートが必要な検査(calibrate・shot・close-saving・close-calibrating.PLAN_06 フェーズ 2)を行う" + "(チャート不要の検査は行わない.舌診チャートをはめてから実行する)") + parser.add_argument("--keep", action="store_true", + help="合格時も作業フォルダ(%%TEMP%%/TIASshot-hwtest/work-*)を残し,--with-chart では証拠の画像(evidence/*.png)も保存する(TIASshot.exe の --hwtest-keep)") parser.add_argument("--no-clean", action="store_true", help="Debug 出力(bin/obj の x64/Debug)を削除しない(開発時の短縮用)") args = parser.parse_args() @@ -64,7 +73,7 @@ stamp = dt.datetime.now().strftime("%Y%m%d-%H%M%S") run_dir = REPO / ".verify" / "hwtest" / f"run-{stamp}" run_dir.mkdir(parents=True, exist_ok=True) - summary: dict = {"run_dir": str(run_dir), "camera": args.camera, "with_chart": args.with_chart, + summary: dict = {"run_dir": str(run_dir), "camera": args.camera, "with_chart": args.with_chart, "keep": args.keep, "steps": [], "result": None} def step(name: str, ok: bool, detail: str) -> None: @@ -94,13 +103,16 @@ result_file = run_dir / "hwtest-result.txt" cmd = [str(EXE), "--hwtest", "--camera", args.camera, "--hwtest-out", str(result_file)] + if args.keep: + cmd.append("--hwtest-keep") if args.with_chart: cmd.append("--with-chart") summary["command"] = " ".join(cmd) + timeout_sec = HWTEST_WITH_CHART_TIMEOUT_SEC if args.with_chart else HWTEST_TIMEOUT_SEC try: # デバイス状態ファイル({DeviceName}.xml)は相対パスで読まれるため,通常起動と同じく実行ファイルのフォルダで実行する proc = subprocess.run(cmd, cwd=EXE.parent, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, - timeout=HWTEST_TIMEOUT_SEC, check=False) + timeout=timeout_sec, check=False) code = proc.returncode except subprocess.TimeoutExpired: code = None @@ -109,14 +121,14 @@ summary["hwtest_exit_code"] = code summary["hwtest_lines"] = heads if code is None: - detail = f"{HWTEST_TIMEOUT_SEC} 秒で終わらないためランナーが打ち切りました(hwtest-result.txt)" + detail = f"{timeout_sec} 秒で終わらないためランナーが打ち切りました(hwtest-result.txt)" else: detail = f"exit {code}(hwtest-result.txt)" step("hwtest", code == HW_PASS, detail) for ln in heads: print(f" {ln}", flush=True) if code == HW_ERROR: - # 指定機種が見つからない・引数不正・未実装の指定 → 実機テスト自体を行えない(検証不能) + # 指定機種が見つからない・引数不正 → 実機テスト自体を行えない(検証不能) exit_code = EXIT_PRECONDITION elif code != HW_PASS: exit_code = EXIT_FAIL