macOS アプリのテスト: Windows から Mac アプリと Safari のエンドツーエンドテストを作成する

Windows から macOS アプリをテスト: リモートデスクトップ経由で Mac アプリや Safari のエンドツーエンドテストと機能テストを作成し、ビルドのたびに実行します。

執筆: Ait Nohaila (事業開発担当) 読了 13 分

Windows から macOS アプリをエンドツーエンドでテストするには、リモートデスクトップのビューアーで本物の Mac に接続し、そのウィンドウで GUI Test Studio を使って操作を記録し、アプリの表示のチェックを追加して、ビルドのたびにテストを実行します。

macOS アプリのエンドツーエンドテストとは?

Definition

macOS アプリのエンドツーエンドテストは、最初の画面から結果まで、ユーザーと同じように実際の操作を行い、各ステップでアプリの表示を検証します。機能テストは同じ方法で一つの機能を検証します: ボタンが動く、レコードが保存される、合計が正しい、といった点です。

多くの QA チームは Windows で作業しながら、確認すべきアプリの Mac 版や、訪問者が Safari を使う Web サイトを抱えています。ふつうはオフィスに 1 台ある Mac で手作業でテストするので、macOS アプリのテストは後回しになり、ビルドのたびに行われることはまれです。

このガイドでは、QA エンジニアとソフトウェアエンジニアが、いつも使っている Windows コンピューターから、Mac アプリや Safari 上の Web サイトの機能テストとエンドツーエンドテストを作成する方法を紹介します。各テストは一度記録するだけで、コードを書かずにビルドのたびに実行されます。

Windows で Safari を直接テストできない理由

Apple は 2012 年に Windows 版 Safari の提供をやめており、最後のバージョンは古すぎて今の Web サイトを表示できません。Safari も、macOS 向けに書かれたアプリも、Mac でしか動きません。

  • よくある回避策には、それぞれ欠けているものがあります。Safari の背後にあるエンジン WebKit で作られたブラウザーは Safari ではありません: Safari 独自のフォーム、フォント、スクロールバー、設定を持っていないからです。人が手で確認する Mac は本物ですが、時間がかかり、すべてのビルドを確認する人はいません。Windows から接続してソフトウェアでテストする Mac は本物で、何度でも同じように実行できます。

macOS の UI テストツール: XCUITest、Appium Mac2、そして記録するテスト

Apple 自身の方法は、XCTest の UI テスト部分である XCUITest で、テストは Mac 上の Xcode で Swift または Objective-C で書きます。Appium Mac2 ドライバーは同じ XCTest フレームワークを通じて macOS アプリを操作するので、テストを他の言語で書けますが、入門ガイドにあるとおり Xcode の入った Mac が必要です。

比較する項目XCUITestAppium Mac2 ドライバーGUI Test Studio
テストの作り方Swift または Objective-C で書くJava、Python、JavaScript などの言語でコードとして書く記録してからタイムライン上で編集し、コードは不要
必要なものXcode の入った MacmacOS 11.3 以降と Xcode 13 以降の入った Mac、そして Appium サーバーリモートデスクトップのビューアーを入れた Windows PC と、接続先の Mac
要素の見つけ方アプリのアクセシビリティ情報からXCTest を使い、アプリのアクセシビリティ情報からMac の画面の画像上で、見た目から
向いている人アプリのコードを担当する開発者すでに Appium のテストを書いているチームユーザーに見えるとおりにアプリをテストする、Windows を使う QA チーム

コードで書くテストはアプリの構造を読み取るので、見た目が変わっても動き続けますが、テストを書く開発者ごとに Mac が必要です。記録したテストはユーザーと同じように画面を見るので、見た目のおかしな点も検出でき、チームの誰でも Windows から作成できます。

仕組み: ビューアーはただのウィンドウ

リモートデスクトップビューアーは、Mac の画面を Windows 上のウィンドウに表示し、マウスとキーボードの操作を Mac に送ります。GUI Test Studio にとって、そのウィンドウはほかと変わらないアプリです。

Windows PC

GUI Test Studio

ビューアーのウィンドウを記録し、マウスとキーボードの操作をそこへ再生し、表示される内容を検証します。

リモートデスクトップビューアー
本物のマウスとキーボード画像としての Mac の画面

Mac

机の上、ラック、クラウド

ユーザーがサインインした状態で、Mac アプリや Safari を実行します。

ビューアーは Windows PC 上のウィンドウです。GUI Test Studio はそこへ本物の入力を送り、表示される Mac の画面の画像を検証します。

接続

ビューアーで Mac に接続する

記録

ビューアーのウィンドウを選ぶ

アサーション

Mac が表示するもの

レポート

期待と実際を並べて表示

GUI Test Runner-Recorder は、質問何をテストしますか?でアプリを選ぶとビューアーのウィンドウを、画面の一部を選ぶと画面上の範囲を記録します。テストを実行すると、そのウィンドウで本物のマウスを動かして本物のキーを押し、ビューアーがそれを Mac に伝えます。記録の仕組みはテストを記録するで説明しています。

どのリモートデスクトップビューアーを使うか

Windows 上のビューアーMac 上で動くもの
RealVNC Viewer や TightVNC などの VNC ビューアーシステム設定でオンにする、Mac 標準の画面共有。Mac には何もインストールする必要がありません。
NoMachineMac にインストールした NoMachine プログラム。
ParsecMac にインストールした Parsec アプリ。
Jump DesktopMac にインストールした Jump Desktop Connect。
Chrome Remote DesktopMac にインストールした Chrome Remote Desktop のホスト。

GUI Test Studio に必要なのは、どのビューアーにもあるもの、つまり Mac の画面を表示し、マウスとキーボードを受け付けるウィンドウだけなので、どれでも動作します。チームがすでに使っているものか、Mac 標準の画面共有と無料の VNC ビューアーの組み合わせを選んでください。

Mac をどこに用意するか: 机の上、ラック、テスト用のクラウド Mac

Mac を置ける場所は 3 つあり、テストはどこであってもかまいません。最も手軽に始められるのは机の上の Mac です: デザイナーや開発者がすでに持っている Mac を、電源を入れてサインインしたままにしておきます。ラックに置いた Mac mini はサーバールームからチーム全体に使われ、モニターがつながっていないことも少なくありません。Amazon EC2 の Mac インスタンスや、MacinCloud、MacStadium の Mac などのクラウド Mac は、レンタルしてインターネット経由で接続する本物の Mac です。

クラウド Mac は、コマンドラインしか使えない状態で提供されることがよくあります。プロバイダーのガイドに従って、目に見えるデスクトップを有効にし、ユーザーをサインインさせ、画面共有を許可してから、机の上の Mac と同じように接続してください。

Mac アプリケーションの機能テストを計画する

よいエンドツーエンドテストは、ユーザーにとって大切な一つの操作の流れをたどり、その結果を確かめます。記録の前に、どこから始まるか、ユーザーが何をするか、最後に画面に何が表示されるべきかを数行で書き出してください。

Mac アプリの機能テスト

  1. 1アプリを開いてサインインするビジュアルアサーション: サインインボタンがあり、見た目が正しい
  2. 2「新規顧客」をクリックして顧客名を入力するビジュアルアサーション: 各操作の前にボタンと入力欄を見つける
  3. 3「保存」をクリックするテキストアサーション: メッセージが「顧客を保存しました」になっている
  4. 4新しい請求書を開く動的テキストアサーション: 請求書番号が、値に関係なく正しい形式になっている
  5. 5顧客一覧を確認するテキストアサーション: 新しい顧客の名前が一覧にある
各ステップは Mac 上での操作で、各チェックはその後にアプリが表示する内容を確かめます。操作全体が合格するか、どのステップで失敗したかをレポートが示します。
  • アプリを開いた直後の最初のウィンドウなど、毎回同じ画面から実行を始めます。失敗が一つの機能を指すように、一つのテストには一つの操作の流れだけを入れます。クリックだけでなく、保存のメッセージ、一覧の新しい行、合計といった結果を検証します。同じ顧客名など、実行ごとに変わらないテストデータを使います。

どの要素にどのチェックが合うかは、適切なチェックを選ぶで説明しています。

Mac アプリの自動テストを作成する手順

Mac への接続の設定は一度だけです。その後は、Mac のテストもほかのテストと同じように作成できます。

  1. 1

    ユーザーがサインインした Mac を用意する

    机の上の Mac、ラックに置いた Mac mini、クラウド Mac のいずれかを使います。コマンドラインしか開かない接続ではテストするものが何も表示されないので、ユーザーがサインインし、画面にデスクトップが表示されている必要があります。

    実行の開始時にデスクトップが表示されているよう、Mac がスリープしないようにし、スクリーンセーバーと画面ロックをオフにしてください。

  2. 2

    Mac でリモートアクセスをオンにする

    システム設定の「一般」>「共有」で、「画面共有」または「リモートマネージメント」をオンにします。そのオプションで、VNC ビューアーがパスワードで画面を操作できるように許可します。ほかのリモートデスクトップツールを使う場合は、代わりにそのホストを Mac にインストールしてください。

  3. 3

    Windows から固定のサイズで接続する

    Windows コンピューターでビューアーを開いて Mac に接続し、Mac の画面を 100% で表示したまま、どの実行でもウィンドウを同じサイズに保ってください。ウィンドウが変わると画像も変わってしまう、ウィンドウに合わせた拡大縮小の設定はオフにしてください。

    Mac のディスプレイ解像度を固定してください。輪郭や文字がくっきり保たれるよう、ビューアーの画質を高に、その設定があればロスレスにしてください。

  4. 4

    ビューアーを通して操作を記録する

    GUI Test Runner-Recorder で「記録」をクリックし、「アプリ」を選んでビューアーを選択します。ビューアーを通して Mac で最初の画面から結果まで操作を行い、停止キーを押してください。

    すべての実行を同じ状態で始めるには、テストの最初にアプリを起動し、最後に閉じるにチェックを入れます。ビューアーがコマンドラインでアドレスを受け付ける場合は、アプリを実行ステップで Mac のアドレスを指定してビューアーを起動し、最大化して開くこともできます。

  5. 5

    テストで検証する内容を選ぶ

    記録が終わったら、「ビジュアル要素を検証」はオンのままにし、画面上の文言が重要なときは「テキストを検証」をオンにします。ダイアログや確認メッセージにも専用のチェックが付くように、「表示される内容を検証」はオンのままにします。

    この質問の各カードについては、テストで検証する内容を選ぶで説明しています。

  6. 6

    結果を確かめるチェックを追加する

    GUI Test Studio でテストを開き、操作がうまくいったことを示すメッセージにはテキストアサーションを、注文番号や日付のように実行ごとに変わる値には動的テキストアサーションを追加します。

    「サインイン」「顧客の作成」のようにステップをシナリオにまとめると、失敗したときに操作のどの部分で壊れたかがわかります。

  7. 7

    実行して信頼度レポートを読む

    GUI Test Runner-Recorder で「テストを実行」をクリックします。信頼度レポートにはすべてのステップと、各チェックについて期待した内容と Mac が表示した内容が示されます。

  8. 8

    ビルドのたびに実行する

    サインイン済みのデスクトップがあり、ビューアーが Mac に接続されている Windows のビルドエージェントで、gtr-cli を使ってテストを実行してください。

macOS の UI テストのチェック: 見た目で見つける

Windows アプリでは、GTS Engine はまず Windows アプリが提供するアクセシビリティ情報を通じて要素の位置をアプリケーションに問い合わせ、アプリケーションが答えないときは見た目で見つけます。ビューアーを通すと、Mac の画面は画像として届きます: 問い合わせる相手がないので、すべての要素は見た目で見つかります。

アサーションMac で確かめること例
ビジュアルアサーション要素が画面にあり、記録したときと同じ見た目であること。次のクリックに、その要素がいまどこにあるかも伝えます。保存ボタン、ツールバーのアイコン、グラフ
テキストアサーションフォントや色に関係なく、テキストが期待どおりであること。「顧客を保存しました」、ウィンドウのタイトル、合計
動的テキストアサーション値に関係なく、正しい形式であること。請求書番号、今日の日付、価格
テキスト不在アサーションテキストが消えたこと、または表示されないこと。正しくサインインした後のエラーメッセージ
グループアサーション画面に表示されたものがすべてそろっていること。タイトル、入力欄、ボタンのそろったダイアログ

各チェックは探しているものをタイムアウトまで待つので、Mac の応答が少し遅れても失敗にはなりません。見た目で見つける方法がなぜ信頼できるのか、似た要素をどう見分けるのかは、GUI Test Studio が要素を見つける仕組みで説明しています。

Safari のテスト自動化: 本物の Safari でのエンドツーエンドテスト

Safari で動く Web アプリのエンドツーエンドテストも、まったく同じ方法で作成します。Mac で Safari を開いてページに移動し、登録、商品のカート追加、テスト用カードでの支払い、確認画面のチェックといった操作を行いながら、ビューアーのウィンドウを記録します。

  • テストは Safari そのもので、Safari 独自のエンジン、フォームコントロール、フォントを使って実行されます。Safari でだけ崩れるレイアウトは、テストでも崩れます。テキストアサーションは Safari が実際に表示する内容を読み取り、ビジュアルアサーションは Safari が描く内容を、テストを記録したときに描いた内容と比較します。

以前のセッションがテストの見る内容を変えないように、プライベートウィンドウで開いたサインインページなど、決まったページから各 Safari テストを始めます。

ほかのブラウザーとエミュレートされたデバイスをどうカバーするか、どのブラウザーから先にテストするかは、クロスブラウザーテストのガイドで説明しています。

実行結果を読む

実行が終わるたびに、上部に判定、その下にすべてのステップが並んだ信頼度レポートが開きます。失敗したチェックでは期待した内容と Mac が表示した内容が並び、違いが強調されるので、アプリが間違っているのか画面がずれただけなのかがすぐにわかります。

レポートの各部分については、信頼度レポートを読むで説明しています。

リモートデスクトップ経由のテストを安定させるコツ

ビューアーを通したテストは、画像とタイミングがどの実行でも同じなら、毎回合格します。次の習慣を守れば、そうなります。

項目すべきこと
遅延各アサーションは、探しているものをタイムアウト (既定で 5 秒) まで待つので、Mac の応答が少し遅れても不合格にはなりません。アプリの起動直後など Mac が遅い箇所では、そのアサーションのタイムアウトを延ばすか、待機を追加してください。
Command キー多くのビューアーは Windows キーを Command として、Alt を Option として送りますが、Windows キーを使うショートカットの一部は Windows 自身が受け取ってしまうことがあります。システムキーをリモートコンピューターに送るビューアーのオプションをオンにし、記録しながら各ショートカットを一度試してください。
画質画像を圧縮するビューアーでは、実行のたびに輪郭のぼやけ方が少しずつ変わります。画質を高またはロスレスに設定し、変更できない接続では検証の厳密さを「緩和」にしてください。
ウィンドウサイズと拡大縮小ビューアーのウィンドウは 1 つのサイズに保ち、その中の Mac の画面は 100% にしてください。別のウィンドウに合わせて拡大縮小した画像は、別の画像になります。
Retina と解像度Mac の解像度は 1 つに固定してください。モニターをつないでいない Mac mini は自動で小さな解像度を選ぶことがあります: 解像度を設定するか、ディスプレイエミュレーターを接続してください。
通知とポップアップテストが探すものを通知が覆い隠さないよう、Mac でおやすみモードをオンにしてください。
開始時の状態実行の前に、Mac を記録を始めたときの画面に戻してください。GUI Test Runner-Recorder はそれを確認し、画面がテストの開始時の状態にないときは知らせます。

2 つの macOS バージョンのように、2 台の Mac が同じウィンドウを少し違って描く場合は、Mac ごとのベースラインプロファイルでそれぞれに別の期待画像を保持できます。

Windows エージェントから CI/CD で Mac のテストを実行する

ビルドエージェントは Windows のままです。必要な Mac はビューアーで接続する 1 台だけで、コマンドラインのランナーである gtr-cli が、Mac のテストをほかのテストと同じように実行します。

ビルドエージェント上で
gtr-cli run tests\mac --countdown 0 --junit results\junit.xml --artifacts results\artifacts

ビルドマシンの準備、終了コード、JUnit の結果については、CI/CD でテストを実行するで説明しています。

始める前に知っておくこと

制限意味
Mac が必要アプリや Safari は、机の上、ラック、クラウドのいずれかにある本物の Mac で動きます。GUI Test Studio 自体は Windows で動きます。
ビューアーに表示されるものだけテストが見て操作できるのは、ビューアーのウィンドウに表示されるものです。Mac の画面のうちテストする部分は、ウィンドウの中に収めてください。
アクセシビリティ情報なしビューアーが渡すのは Mac の画面の画像なので、すべての要素は見た目で見つかり、すべてのテキストは画像から読み取られます。
Safari は Mac 版のみiPhone や iPad の Safari はそのデバイス上で動き、この構成ではそこに届きません。

要点

  • 1エンドツーエンドテストは一連の操作をたどります: サインイン、作成、保存など Mac 上の操作を行い、各ステップで結果を検証します。
  • 2本物の Mac が必要です: 現行の Windows 版 Safari はなく、Mac アプリは Mac でしか動かないからです。
  • 3Mac はどこにあってもかまいません: 机の上、ラック、クラウドのいずれでも、リモートデスクトップビューアーで接続します。
  • 4ビューアーはウィンドウなので、GUI Test Studio はそれを記録し、本物の入力を再生して、表示内容をビジュアルアサーションとテキストアサーションで検証します。
  • 5画像を安定させてください: ウィンドウサイズの固定、100% の拡大率、解像度の固定、高い画質を守り、ビルドのたびに gtr-cli で実行してください。

よくある質問

macOS アプリのエンドツーエンドテストはどう作成しますか?

サインインしてレコードを作成し保存するなど、Mac 上の実際の操作を記録し、アプリの表示のチェックを追加します。GUI Test Studio なら Windows から行えます: リモートデスクトップのビューアーが Mac を表示し、GUI Test Runner-Recorder がそのウィンドウを記録します。その後、テストは本物のマウスとキーボードの入力でビルドのたびに実行されます。

Windows で Safari をテストできますか?

Windows 上で Safari を動かしてテストすることはできません: Apple は 2012 年に Windows 版 Safari の提供をやめています。Windows からリモートデスクトップビューアーで Mac に接続し、そのウィンドウを GUI Test Studio で記録すれば、本物の Safari をテストできます。テストは Mac 上の Safari そのもので、本物のマウスとキーボードの入力を使って実行されます。

macOS の UI テストで XCUITest の代わりになるものは?

XCUITest のテストは、Mac 上の Xcode でコードとして書きます。Appium Mac2 ドライバーを使えば他の言語で書けますが、やはり Xcode の入った Mac が必要です。GUI Test Studio はテストを Windows コンピューターから記録し、Mac の画面の表示をコードなしで検証します。

Mac アプリをテストするには Mac が必要ですか?

はい、どこかに必要です。Mac は机の上でも、ラックの中でも、Amazon EC2 Mac インスタンスや MacinCloud、MacStadium の Mac のようにクラウド上でもかまわず、誰かがその前に座る必要はありません。テストは Windows コンピューターから、リモートデスクトップのビューアーを通して記録し実行します。

テストのために、Windows 上の仮想マシンで macOS を動かせますか?

Apple の macOS ライセンスでは、macOS の仮想マシンは Apple のハードウェア上でのみ認められているので、Windows PC で動かすことはできません。Parallels Desktop、UTM、VMware Fusion などのツールで Mac 上に仮想マシンを動かし、ほかの Mac と同じように Windows からリモートデスクトップビューアーで接続してください。

テストは Mac の画面のテキストを読み取れますか?

はい。テキストアサーションは、ほかの画面と同じように、Mac に表示される内容を GUI Test Studio 独自のテキスト認識で読み取ります。文字の輪郭がくっきり保たれるよう、ビューアーの画質は高くしておいてください。

テストはどうやって Command キーを押すのですか?

手元のキーボードと同じように、ビューアーを通して押します。多くのビューアーは Windows キーを Command として、Alt を Option として送りますが、Windows キーを使うショートカットの一部は Windows が自分で処理してしまうことがあります。システムキーをリモートコンピューターに送るビューアーのオプションをオンにし、記録しながら各ショートカットを一度試してください。

Mac のテストを CI パイプラインで実行できますか?

はい。gtr-cli は Windows のビルドエージェントでテストを実行し、パイプラインに終了コードと JUnit の結果を返します。Windows サービスには画面がないので、エージェントにはサインイン済みの本物の Windows デスクトップが必要で、実行の開始時にはビューアーが Mac に接続されていなければなりません。

Mac、macOS、Mac mini、Safari、Xcode、XCTest、iPhone、iPad、Appium、Parallels Desktop、UTM、VMware Fusion、Amazon EC2、MacinCloud、MacStadium、RealVNC、TightVNC、NoMachine、Parsec、Jump Desktop、Chrome Remote Desktop、Windows は、それぞれの所有者の商標です。

すべての記事