アプリケーションバンドルのキャッシング
Appiumのベースドライバは、例えばapp
機能値やinstallApp
のようなエンドポイントに提供されるアプリケーションビルドのキャッシングを可能にする機能を提供します。この記事では、より高性能で効率的なテストスイート実行戦略を作成できるように、一般的なキャッシングの原則について説明します。
キャッシングが必要な理由¶
モバイルアプリケーションバンドルのサイズは数百メガバイトに達することがあります。テストスイートを実行する場合、各テストで同じアプリケーションバンドルを取得/抽出する必要があるため、これは重大なパフォーマンス問題となる可能性があります。
何がキャッシュされるのか¶
キャッシングは、configureApp
ヘルパー呼び出しによって生成されたアプリケーションバンドルに適用できます。継承されたドライバは、独自のonPostProcess
プロパティ定義を提供することでキャッシングロジックをカスタマイズできますが、一般的な経験則として、テスト対象デバイスに実際にインストールする前にダウンロードおよび/または抽出する必要があるすべてのアプリケーションバンドルをローカルにキャッシュする必要があります。例えば、iOSでは、これは.ipa
または.zip
で圧縮されたアプリケーションバンドル、Androidでは.aab
です。
リモートアプリケーションバンドルのキャッシング¶
指定されたURLからダウンロードされたアプリバンドルをキャッシュから(再)使用できるかどうかを検証するために、次の手順が適用されます。
- スクリプトは、レスポンスヘッダーのみを取得するために、指定されたリンクに
HEAD
リクエストを送信します。このリクエストが失敗/タイムアウトした場合、キャッシングは適用されません。 - 次のヘッダー値が抽出されます:
Last-Modified
、Cache-Control
。Last-Modified
ヘッダーが存在しない場合、またはヘッダー値が有効な日時として解析できない場合、キャッシングは適用されません。 - スクリプトは、指定されたURLが既にキャッシュに存在するかどうかを確認します。アプリがまだキャッシュされていない場合は、ダウンロードされ、現在のヘッダー値とハッシュサムがキャッシュに追加されます。
- URLが既にキャッシュに存在する場合は、スクリプトは次のことを検証します。
- 現在の
Last-Modified
日時が以前の日時と異なるかどうか - 現在の
Last-Modified
日時とキャッシュされた日時の差が、max-age(存在する場合)を超えていないかどうか - キャッシュされたファイル/フォルダのハッシュサムが変更されていないかどうか(例:キャッシュにある間に破損していないかどうか)
- 現在の
- 上記のすべての検証が成功した場合は、キャッシュされたビルドが返されます。それ以外の場合は、現在キャッシュされているエントリが削除され、代わりに新しいものがダウンロードされます。
ローカルアプリケーションバンドルのキャッシング¶
テスト対象デバイスにインストールする前に何らかの前処理が必要な場合のみ、アプリケーションバンドルをキャッシュすることが理にかなっています。例えば、iOSの.ipa
バンドルは、システムインストーラが.app
フォルダでのみ動作するため、解凍する必要があります。
- スクリプトは、指定されたバンドルパスが既にキャッシュに存在するかどうかを確認します。バンドルがまだキャッシュにない場合は、前処理されてそこに追加されます。
- スクリプトは、バンドルのハッシュサムを検証し、以前に保存されたものと比較します。ハッシュサムが一致しない場合は、キャッシュされたアイテムが削除され、バンドルの前処理が繰り返されます。
キャッシュファイルシステムの設定方法¶
ベースドライバがすべてのアプリケーションバンドルを保持するキャッシュは、システムの一時フォルダにあります。プロセスごとに設定されるため、同じAppiumサーバプロセスのスコープで初期化された各テストセッションはその利点を活用します。LRUキャッシュで、次の制限があります。
- 最大アイテム数: 1024
- 各エントリの最大存続時間(TTL): 24時間
- アクセス時に各エントリのTTLが更新されます。
警告
注: キャッシュルートフォルダは、Appiumプロセスの終了時に自動削除されるように設定されています。これは、AppiumサーバがSIGINT
またはSIGTERM
で停止された場合にのみ機能します。SIGKILL
を使用すると、キャッシュのクリーンアップは実行されません。