Airtestとは?PocoとUnity・モバイルアプリのUIを自動テストする方法

Airtestは、画面の画像認識でアプリを操作するオープンソース(Apache License 2.0)のUI自動テストフレームワークです。中国のNetEase(網易)が開発し、GitHubのAirtestProjectで公開されています。ゲームや複雑な描画を持つアプリのように、内部のUI構造を取りにくい対象でも「見た目」でテストを自動化できるのが特徴です。そこにUI階層を直接たどるPocoを組み合わせると、UnityやAndroidアプリのボタン・テキストをID指定で正確に操作できます。本記事では、Airtestの仕組みからAirtest IDEの導入、Pythonスクリプトの書き方、Unityでの実装、Appium・Seleniumとの使い分けまでを一次情報に沿って解説します。

まとめ

  • Airtest=画像認識ベースのクロスプラットフォーム自動テストツール。NetEase開発のOSS(Apache 2.0)で、Windows/Android/iOSのネイティブアプリやゲームに対応する(WebはSelenium連携で操作する)。
  • Poco=UI階層ベース。画面要素を名前や型で指定して操作するため、画像認識より安定する。両者は競合ではなく役割分担で併用する。
  • 導入はpip install -U airtestpip install pocoui、記録・実行・レポートを行うGUIのAirtest IDEは公式サイトから入手する。
  • UnityではUnityPocoドライバとPocoのSDKをプロジェクトへ組み込むことで、ゲーム内UIをそのまま操作できる。
  • Web専用の自動化ならSelenium、ネイティブUI要素中心ならAppiumが適し、ゲーム・独自描画はAirtest+Pocoが強い。

Airtestとは|画像認識でUIを操作する自動テストフレームワーク

Airtestは、テスト対象の画面をスクリーンショットで撮り、あらかじめ用意した部分画像がどこにあるかを画像認識で探して、その座標をタップ・スワイプする仕組みです。アプリの内部構造やソースコードに依存しないため、ネイティブアプリやゲームを同じ書き方で操作できます(Webブラウザ上の操作はSelenium連携でカバーします)。スクリプトはPythonで記述します。ライセンスはApache License 2.0で、商用利用を含めて無料で使えます。

Airtestの対応プラットフォームと構成要素

Airtestがテスト対象にできるのはWindows・Android・iOSのアプリで、Webブラウザ操作はSeleniumとの連携で行います。プロジェクトは主に3つの部品で構成されます。画像認識でUIを操作するコアライブラリのAirtest、UI階層を直接操作するPoco、そしてスクリプトの記録・実行・レポート出力をまとめて行うGUIツールのAirtest IDEです。PyPIのairtestパッケージは2025年12月時点で1.4.3が最新ですが、バージョンは頻繁に更新されるため公式のPyPIページで最新を確認してください。

Poco(pocoui)が加えるUI階層ベースの操作

画像認識は「見た目」を頼りにするため、解像度やテーマの違いで認識が外れることがあります。これを補うのがPocoです。Pocoはアプリ内部のUIツリー(ウィジェットの親子関係)を取得し、要素の名前や型を指定して操作します。座標ではなく要素名で指定するので、レイアウトが多少変わってもスクリプトが壊れにくいのが利点です。Unity・Cocos2d-x・Androidネイティブ・Egret(HTML5ゲームエンジン)などのエンジンに対応します。

AirtestとPocoの役割分担

両者は競合ではありません。画面遷移やアプリ起動など「内部構造を取れない場面」はAirtestの画像認識で押さえ、ボタンやリストなど「要素を正確に指定したい場面」はPocoで操作する、という使い分けが基本です。1つのスクリプト内でAirtestのtouchとPocoのpoco()を混在させて書けます。

Airtest IDEとライブラリの導入手順

使い方は2通りあります。GUIで操作を記録したいならAirtest IDE、CIや既存のPython環境に組み込むならpipでライブラリを入れます。両方を併用するのが一般的です。

Airtest IDEのインストールとデバイス接続

Airtest IDEはAirtest Project公式サイトから各OS向けのインストーラを入手できます。起動後、Android実機やエミュレータをUSB接続すると、IDEがデバイスを認識して画面をミラーリングします。Android接続にはADB(Android Debug Bridge)が使われ、実機側で「USBデバッグ」を有効にしておく必要があります。iOS実機の場合はmacOSとXcode、およびiOS-Tagent(WebDriverAgent系のエージェント)のセットアップが前提となり、Androidより準備の手間が増えます。

pipでのライブラリ導入

スクリプトを自前のPython環境で動かす場合は、コアライブラリとPocoをpipで導入します。Pocoのパッケージ名はpocouiである点に注意してください(pocoではありません)。

# Airtestコアライブラリ
pip install -U airtest

# Pocoはパッケージ名がpocoui
pip install pocoui

Airtestスクリプトの書き方(Python)

スクリプトはPythonで書きます。Airtest IDEの記録機能を使えば、画面操作からスクリプトを自動生成できますが、条件分岐やループを加えて実用的なテストにするには基本コマンドを理解しておくと安定します。

画像認識ベースのコマンド

Airtestのコアは、部分画像を対象にした操作コマンドです。touchで画像をタップ、swipeでスワイプ、existsassert_existsで要素の存在を検証します。画像はTemplateオブジェクトとして渡します。

from airtest.core.api import touch, swipe, assert_exists, Template

# 部分画像をタップ
touch(Template("start_btn.png"))

# 座標をスワイプ
swipe((100, 800), (100, 200))

# 画像が表示されていることを検証(無ければテスト失敗)
assert_exists(Template("result.png"), "結果画面が表示された")

PocoでUI要素を名前指定で操作する

UI階層を取得できるアプリでは、Pocoで要素名を指定して操作するほうが安定します。poco("要素名")で対象を取得し、click()get_text()を呼び出します。座標に依存しないため、解像度違いに強いテストになります。

# pocoは対象エンジンのドライバで初期化済みとする(Unity例は後述)
poco("btn_start").click()
score = poco("scoreVal").get_text()
assert score == "100"

PocoとUnityで自動テストを組む手順

AirtestとPocoが特に力を発揮するのがUnityです。Unityはゲーム画面を独自に描画するため一般的なUI自動化ツールでは要素を取りにくいのですが、Pocoはエンジン内部のUIツリーを読み取れます。Unityエディタの基本設定を済ませたうえで導入します。

Unity側の準備

Unityプロジェクトには、Poco公式が配布するSDK(poco-sdk)を組み込みます。UnityのシーンにPocoManagerのプレハブを配置し、実行時にPocoからの接続を待ち受けるようにします。これでゲーム内のGameObjectがUIツリーとしてPocoに公開され、テストスクリプトから参照できるようになります。

UnityPocoドライバでのスクリプト例

スクリプト側では、Unity専用ドライバのUnityPocoをインポートしてインスタンス化します。以降は要素名で操作でき、ドラッグやテキスト検証もそのまま書けます。

from poco.drivers.unity3d import UnityPoco

poco = UnityPoco()
poco("btn_start").click()

# 星をシェルへドラッグ
shell = poco("shell").focus("center")
for star in poco("star"):
    star.drag_to(shell)

# スコア表示を検証
assert poco("scoreVal").get_text() == "100"

AirtestとAppium・Seleniumの違いと使い分け

UI自動テストツールは対象と方式で向き不向きがはっきり分かれます。Airtestを選ぶかどうかは「テスト対象がゲーム・独自描画かどうか」で判断すると迷いません。

ツール 主な対象 方式 得意領域
Airtest+Poco ゲーム・ネイティブアプリ 画像認識+UI階層 Unity等の独自描画
Appium モバイルネイティブアプリ アクセシビリティ要素 標準UIのiOS/Android
Selenium Webブラウザ WebDriver Webアプリ

Webサイトの自動化だけが目的ならSeleniumが標準です。iOS/Androidの標準UIを持つアプリで、アクセシビリティIDが振られているならAppiumのほうがCI連携の実績も多く扱いやすいでしょう。一方、Canvasやゲームエンジンで描画され、内部のUI要素を外から取得できない対象では、AppiumやSeleniumは要素を掴めません。ここがAirtest+Pocoの主戦場です。

ただしAirtestの画像認識は万能ではありません。解像度やUIテーマがデバイスごとに変わると部分画像がマッチせず、テストが不安定になります。UI階層を取得できる対象なら、画像認識に頼らずPocoの要素指定を優先すべきです。画像認識は「内部構造にアクセスできない対象の最後の手段」と位置づけると、メンテナンスコストを抑えられます。AIを活用したテスト自動化と組み合わせ、画像差分の許容やテストケース生成を補うアプローチも広がっています。

よくある質問

Airtestは無料で使えますか?

はい。AirtestとPocoはいずれもApache License 2.0で公開されているオープンソースソフトウェアで、商用利用を含めて無料で使えます。ソースはGitHubのAirtestProjectで公開されています。

Airtest IDEとairtestライブラリの違いは何ですか?

Airtest IDEは操作の記録・実行・レポート出力を行うGUIツールです。airtest(およびpocoui)はPythonのライブラリで、IDEを使わずコードだけでテストを組んだりCIに組み込んだりする場合に使います。IDEでスクリプトを作り、実行はライブラリ側で行う、といった併用も一般的です。

iOSアプリのテストにも対応していますか?

対応しています。ただしiOS実機のテストにはmacOSとXcode、iOS用エージェント(iOS-Tagent)のセットアップが必要で、AndroidのADB接続より準備の手順が増えます。

Pocoのインストールで「poco」パッケージが見つからないのはなぜですか?

PocoのPyPIパッケージ名はpocouiだからです。pip install pocouiでインストールしてください。pip install pocoでは別のパッケージになってしまいます。

AirtestとSeleniumはどう使い分けますか?

対象で分けます。Webブラウザ上の操作はSelenium、ゲームやネイティブアプリの画面操作はAirtest+Pocoが適しています。両者は競合ではなく、テスト対象の種類で選ぶツールです。

関連記事

資料請求

RELATED POSTS 関連記事