こちらの記事はIs Verifying Video Playback That Hard?の抄訳です。
GUIソフトウェアの品質保証の分野でよくある質問に、「自分のアプリケーションで動画の再生を確認するにはどうしたらよいか」というものがあります。よくある回答には、既存のGUIテスト自動化ソフトウェアにサードパーティの高価なアドオンを追加して使用したり、あるいは不格好な回避策を必要とするものがあります。ここでは、ビデオ再生の検証における課題と、Squish GUI Testerを使用してそれらを回避する簡単な方法について説明します。
完全な動画再生を検証するのは困難な場合である場合があります。初めから終わりまでの再生が求められる動画は比較的大きい場合があり、事前にキャプチャした動画とテストスクリプトを実行しながらキャプチャした動画を比較すると、非常に時間がかかる場合があります(テスト実行では、まず動画全体を再生する必要があります)。さらに重要なことは、このようなビデオシーケンス同士を比較することは、非常に多くのリソースを必要とし、かつ盤石ではないということです。外部要因(例えば、再生中にアンチウィルス・スキャンが行われるなど)で再生にわずかな淀みが生じただけで、期待値となるビデオと実行時にキャプチャされたビデオのフレームに時間のズレが生じてしまうため、そのような影響に耐えられるようにフレームを再同期させる必要が生じます。
比較のためにビデオ全体をキャプチャする代わりに、ビデオの再生中にテスト スクリプトで 2 枚以上のスクリーンショットを撮影して両者を比較することで、ビデオ再生中の異なる2時点のスクリーンショットの画像が同一か(動画に変化があったか=再生されているか)どうかを確認する方法があります。
これは、ビデオが期待通りに再生されている場合、そのビデオの 2 つのスクリーンショットが同じ内容である可能性は極めて低いという前提に基づいています。つまり、この方法は「特定のビデオ」が再生されていることを検証するものではありませんが、「何かが再生されている」ことを検証するものであり、多くの検証目的には十分であると思われます。
必要なのは、ビデオプレーヤーGUIコントロールのオブジェクト名("names.video_player")のみです。
# ビデオプレーヤーコントロールをvidplayerに格納する
vidplayer = waitForObject(names.video_player)
# ビデオプレーヤーコントロールのスクリーンショット#1を取得する。
scrshot1 = object.grabScreenshot(vidplayer)
# 動画が十分に再生されていることを確認するため、1秒間待つ。
snooze(1)
# ビデオプレーヤーコントロールのスクリーンショット#2を取得する。
scrshot2 = object.grabScreenshot(vidplayer)
# 2つのスクリーンショットが異なっていることを確認する。
test.verify(!scrshot1.equals(scrshot2))
上記の機能の詳細については、APIのオンラインドキュメントをご覧ください。
Squishで利用可能な検証方法の種類については、こちらをご覧ください。
SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレス:japan@qt.ioまでお気軽にご連絡ください。概要のご説明から詳細な技術的相談、また無料のツールトライアルのご案内もいたしております。