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からダウンロードします。 Githubからダウンロード
- ターミナルウィンドウを開き、
cdを入力し、Finderからaxe-devtools-ios-sample-appをターミナルウィンドウにドラッグ&ドロップします。リターンキーを押します。 - 同じウィンドウで、
sh prepareForSauceRealDevice.shまたはsh prepareForSauceVirtualDevice.shを入力します。リターンキーを押します。
実際のデバイスでテストを実行
Sauce Labsの設定を追加
Sauce Labsは yaml ファイルを使用します。プロジェクトのルートに配置されています。 .sauce/config.yml実際のデバイスでテストするためのサンプル設定を以下に示します。
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/: iOSアプリケーションとUIテスト( UITests-Runnerで終わる)の2つのアプリファイルを生成します。
次に、両方のアプリケーションファイルを .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.
ビルドセットアップ
シミュレータ用にアプリとテストランナーをビルドするには、以下のスニペットをガイドとして使用します。 -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=NO、 .app 次に、
zip -r testApp.zip testApp.app
zip -r testRunner.zip testRunner.appファイルを圧縮し、Sauce Labsへのアップロードの準備をします。 .zip 最後に、次のコマンドを実行して
saucectl runファイルをアップロードし、テストを開始します。
オートメーション .app シミュレータでのテスト用の設定が完了したら、このプロセスを自動化できます!以下のスクリプトを使用して、シミュレータ用の
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