Sauce LabsとXCUITestの連携
Axe DevTools Mobileを使用すると、UIテストでアクセシビリティの問題を見つけることができます。Sauce Labsと統合してテストを実施し、ユーザーがアプリを実際に見る前に、その体験に関する洞察を得ることができます!Sauce Labsは、最大のクラウドベースのテストプラットフォームであり、様々なデバイスとシミュレータの構成をホスティングし、デジタルへの自信を構築します。現在のビルド自動化において、Sauce上でテストを実行するように設定して、問題が本番に到達する前に把握しましょう。
以下は、Axe DevTools MobileおよびSauce Labsと統合したUIテストを実行するためのガイドです。
前提条件
- 配信のためにアプリを準備します。Sauce Labsでのテストは実際のデバイスで行われるため、アプリとUITestターゲットを事前にプロビジョニングしてからサービスに送信して再署名されるようにすることで、プロセスがスムーズになります。
- コマンドラインインターフェースをインストールし、Sauce Labsの認証情報を設定します。
saucectlSauce Labsの指示に従ってください こちらの指示.
例をお探しですか?サンプルiOSプロジェクトには、テストのための統合が準備されています。
- 前提条件を確認してください。
- Githubからダウンロードをダウンロード
- ターミナルウィンドウを開き、
cdを入力し、Finderからaxe-devtools-ios-sample-appをターミナルウィンドウにドラッグ&ドロップします。そして、リターン/エンターを押します。 - 同じウィンドウで、
sh prepareForSauceRealDevice.shまたはsh prepareForSauceVirtualDevice.shを入力します。リターン/エンターを押します。
実際のデバイスでテストを実行
Sauce Labsの設定を追加
Sauce Labs uses a yaml file, located at at the project root, .sauce/config.yml. See the sample config below for testing on real devices.
apiVersion: v1alpha
kind: xcuitest
sauce:
region: us-west-1
concurrency: 1
xcuitest:
# file names for real devices have the `.ipa` extension
app: "<app_name>.ipa"
testApp: "<app_name>UITests-Runner.ipa"
suites:
- name: "<app_name>UITests"
devices:
- name: "iPhone.*"
platformVersion: "17.2"ビルドセットアップ
プロジェクトのルートフォルダーからターミナルで次のコマンドを呼び出して、デバイスをコンピュータに接続することなくデバイスビルドを作成します。
xcodebuild build-for-testing -configuration Debug \
-scheme "$APP_SCHEME" \
-target "$APP_UITEST_TARGET" \
-sdk iphoneos \
-derivedDataPath "./DerivedData"このコマンドにより、./DerivedData/Build/Products/Debug-iphoneos/に2つのアプリファイルが生成されます:iOSアプリケーションとUIテスト(UITests-Runnerで終わる)。
次に、両方のアプリケーションファイルを .ipa ファイルに変換します。 Sauce Labsの .ipa ファイル作成方法の指示.
.ipaファイルが作成されたら、プロジェクトのディレクトリ内にアプリフォルダを作成し、両方の.ipaファイルをその中に追加します。
次のコマンドを実行して、.ipaファイルをSauce Labsにプッシュし、テストを開始します。
saucectl run追加の継続的インテグレーションツールを使用していますか?Sauce Labsは、現在の環境でのテストもサポートしています。 CIパイプラインとSauce Labsの.
ファイルをアップロードし、テストを開始します。
設定が正しく行われていることを確認したら、このプロセスを自動化する準備が整います!以下のスクリプトを使って、デバイス用の.ipaファイルを自動的にビルドし、それらをSauce Labsにアップロードし、XCUITestを実行できます。このスクリプトを使って、チームでSauce Labsでテストを手動で呼び出すことも可能です。
APP_LOCATION="DerivedData/Build/Products/Debug-iphoneos"
APP_NAME="<app_name>"
rm -rf *.ipa
xcodebuild build-for-testing -configuration Debug \
-scheme "<scheme_name>" \
-target "<UITests target>" \
-sdk iphoneos \
-derivedDataPath "./DerivedData" \
-quiet
mkdir Payload
mv $APP_LOCATION/$APP_NAME.app Payload
zip -r -qq "$APP_NAME.ipa" Payload
rm -rf Payload/*
mv $APP_LOCATION/${APP_NAME}UITests-Runner.app Payload
zip -r -qq "${APP_NAME}UITests-Runner.ipa" Payload
saucectl run
rm -rf Payload
rm -rf DerivedData仮想デバイスでテストを実行
Sauce Labsで仮想デバイスを使用して自動化されたXCUITestを実行できます!以下の手順に従って開始しましょう。
Sauce Labsの設定を追加
シミュレータでテストする場合、設定はプロジェクトルートにある.sauce/config.ymlに配置されます。以前に実機でテストを行ったことがある場合、シミュレータの設定が実機のものとは異なることに注意してください。.zip拡張子はappおよびtestAppのファイル名に使用され、suitesは「デバイス」ではなく「シミュレータ」をリストします。
apiVersion: v1alpha
kind: xcuitest
sauce:
region: us-west-1
concurrency: 1
xcuitest:
# file names for simulators use the `.zip` extension
app: "<app_name>.zip"
testApp: "<app_name>UITests-Runner.zip"
suites:
- name: "<app_name>UITests"
simulators:
- name: "iPhone 12 Simulator"
platformVersions:
- "16.2"実デバイスとシミュレータを両方使いたい場合は、2つの別々の suites 設定を作成し、 app と testApp 設定を提供する必要があります。 each suite.
ビルドセットアップ
シミュレータ専用にアプリとテストランナーをビルドするために、以下のスニペットをガイドとして使用します。以前にReal Devicesでのテストを行ったことがある場合、いくつかの違いに気付くかもしれません - -sdk iphonesimulator, EXCLUDED_ARCHS="", CODE_SIGN_IDENTITY...
xcodebuild build-for-testing -configuration Debug \
-scheme "$APP_SCHEME" \
-target "$APP_UITEST_TARGET" \
-sdk iphonesimulator \
-derivedDataPath "./DerivedData" \
EXCLUDED_ARCHS="" \
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NOSauce Labsにアップロードする準備のために、.appファイルを圧縮してください。
zip -r testApp.zip testApp.app
zip -r testRunner.zip testRunner.app最後に、次のコマンドを実行して.zipファイルをアップロードし、テストを開始します。
saucectl runファイルをアップロードし、テストを開始します。
シミュレータでのテストの設定を行ったら、このプロセスを自動化することができます!以下のスクリプトを使用して、シミュレータ用の.appファイルを自動的にビルドし、圧縮してSauce Labsへアップロードし、XCUITestを実行してください。
APP_LOCATION="DerivedData/Build/Products/Debug-iphonesimulator"
APP_NAME="<app_name>"
RUNNER_NAME="<testApp_name>"
rm -rf $APP_NAME.zip $RUNNER_NAME.zip
xcodebuild build-for-testing -configuration Debug \
-scheme "<scheme_name>" \
-target "<UITests target>" \
-sdk iphonesimulator \
-derivedDataPath "./DerivedData" \
-quiet \
EXCLUDED_ARCHS="" \
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
zip -r -qq $APP_NAME.zip $APP_LOCATION/$APP_NAME.app
zip -r -qq $RUNNER_NAME.zip $APP_LOCATION/$RUNNER_NAME.app
saucectl run
rm -rf DerivedData