テストに失敗したが、原因がわからない場合のメンテナンス方法について説明します。
目次
1.失敗したテストケースを再度実行する
1-1.単体実行で失敗した場合
テスト編集画面にて実行(単発実行)し、失敗した場合はテストケースを修正する必要があります。2.テストケースを修正するへ進んでください。
ローカル実行の場合はMagicPodDesktopもしくはmagicpod-command-lineのバージョンを確認してください。(詳しくはこちら)
1-2.一括実行で失敗した場合
一括実行をし、その中のいくつかのテストケースが失敗した場合は
失敗したテストケースのみ、単体実行、もしくは一括実行します。
特定のテストケースのみ一括実行する詳しい手順はこちらをご覧ください。
1-2-1.失敗した場合
- その失敗したテストケースは他のテストケース(一括実行時に成功し、今回実行しなかったもの)に依存しているため失敗した可能性があります。依存関係を考慮して再度テスト実行を行ってください。
- テスト対象のプロダクトの変更やロケータの指定方法により失敗した可能性があります。テストケースを修正してください。
1-2-2.成功した場合
- 不安定なテストケースである可能性があります。安定させるようテストケースを修正することをおすすめします。また、テスト結果のステータスは成功でも意図しない別のUI要素を操作されてしまっていることもあります。
2.テストケースを修正する
2-1.失敗原因のメッセージを確認する
エラーメッセージに原因が説明されているのでそれに従って修正します。
エラーメッセージの内容がわからない場合はヘルプページでその失敗メッセージを検索すると解決策が見つかる場合があります。
テスト結果のステータスは成功でも意図しない別のUI要素を操作されてしまっていることもあります。
2-2.テスト結果キャプチャを確認する
失敗したステップの結果キャプチャの画面がテスト作成時と同じ画面になっているかを確認します。
2-2-1.違う画面である場合
- ログインしていないはずなのにテスト作成時と異なるログイン後の画面になっている
- キャンペーン情報などテスト作成時にはなかったダイアログ表示画面になっている
- 条件分岐コマンドで、もしダイアログ画面のUI要素があればそれを閉じるという処理を加えてください。
- スクロールされた後の位置が異なる画面になっている
- スクロール位置がテスト作成時と異なると、UI要素が見つからなかったり別のUI要素が操作されることがあります。
- UI要素が見つからなかった場合、「表示されるまでスクロール / 表示されるまでスワイプ」コマンドを追加し、その要素を表示してから操作してください。
- 別のUI要素が操作された場合、xpath=//li[1]ではなくxpath=//li[text()='リスト1']のような、そのUI要素にしかない値をロケータに入れてください。例えば、画面にli要素が複数ある場合、ロケータにxpath=//li[1]と指定していても、スクロール位置がずれるとその画面内にある1番目のli要素が選ばれるので意図しない別のli要素が操作されてしまいます。スクロールすると、画面内に入っていない要素はUIツリーに含まれないことがあるためです。
- 失敗したステップより前のステップの画面になっている
- 前のステップで失敗している可能性があるので、前のステップに対して同様にテスト作成時と同じ画面になっているか1つずつ確認してください。その後、UIツリーを作成時と失敗時で見比べて詳細を確認してください。
2-2-2.同じ画面である場合
- aiロケータを指定している
- 別の提案ロケータに変えるか、新しいロケータを追加する、またはそのUI要素を一時的に隠して別のUI要素に変えてください。aiロケータは他のロケータと比べると非常に不安定なため、他に方法がない場合や特定の端末でしかテストしない場合以外では利用しない方がよいです。提案ロケータにaiロケータしかなく、ロケータの指定方法がわからない場合は「このUIについて問い合わせる」より問い合わせることができます。ロケータについてはロケーターを学んでテスト自動化上級者を目指そうを参考にしてください。
- タイミングによって操作し損ねてたまたま失敗になった
- UI要素が表示/存在/一致するまで待機、または固定値で○秒待機するコマンドなどを、失敗したステップの前に入れてください。基本的には画面の読み込みが終わるまで自動で待つようになっていますが、読み込みが足りずUI要素が見つからないことがあります。
- 参考: 待機コマンド
- UI要素が表示/存在/一致するまで待機、または固定値で○秒待機するコマンドなどを、失敗したステップの前に入れてください。基本的には画面の読み込みが終わるまで自動で待つようになっていますが、読み込みが足りずUI要素が見つからないことがあります。
- それ以外の場合、UIツリーを作成時と失敗時で見比べて詳細を確認してください。
2-2-3.400/500番台エラーが表示されている場合
HTTPステータスコードのエラーが表示されている場合、テスト実行タイミングにテスト対象サーバがメンテナンス等で停止していた、もしくはテスト対象アプリの不具合の可能性があります。開発担当者に確認してください。
- 400番台: 403 Forbidden, 404 Not Found
- 500番台: 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable
2-3.UIツリーを確認する
以下いずれかの方法で確認してください。
2-3-1.「失敗時のUIツリーを表示」で確認する
失敗メッセージの下に「失敗時のUIツリーを表示」があるのでそれをクリックすると、失敗時のUIツリーがダイアログで表示されます。
ダイアログ画面左側のキャプチャ上で、操作したいUI要素をクリックすると、右側のUIツリーで該当の要素が青くハイライトされます。現在指定しているロケータと相違がないかを確認してください。
2-3-2.失敗時の結果キャプチャをUIに登録して確認する
失敗したステップの結果キャプチャにカーソルを合わせ「UIとして登録する」をクリックします。
続いてテスト編集画面に移動し、UI一覧から「テスト実行#**の失敗時スクリーンショット」という名前のUIを選んでください。
UIを選んだら、UI上で該当のUI要素をクリックし、指定しているロケータと相違がないかを確認してください。
2-3-3.XMLファイルをダウンロードして確認する
「テスト失敗の理由を問い合わせる」より問い合わせ画面を開き、failure_ui_tree.xmlをダウンロードします。
そのファイルをVisual Studio Codeなどで開き、必要であればXMLを整形し、指定しているロケータと相違がないかを確認してください。
2-3-4.(ブラウザテストのみ)デベロッパーツールで確認する
対象のページを通常のブラウザで開き、右クリックメニューの「検証」から開発者ツールを起動します。左上の矢印をクリックし*①、該当のUI要素をクリックします*②。すると、html上で該当の要素がハイライトされるので、指定しているロケータと相違がないかを確認してください。
ハイライトされた要素を右クリックし「Copy」→「Copy XPath」でその要素のXPathをコピーできるので、参考にすることができます。
2-4.ロケータを修正する
指定しているロケータと相違がある場合はロケータを修正、もしくはUIを新しいものに変更してください。ロケータについてはロケーターを学んでテスト自動化上級者を目指そうを参考にしてください。
2-4-1.実行ごとに変化する値をロケータに含んでいる
例えば以下のように実行ごとに変化するロケータである場合、テスト作成時とロケータが異なるので見つけることができず失敗します。よって提案ロケータの中から別のものに変える、もしくは新しくロケータを追加する必要があります。またはそのUI要素を一時的に隠して別のUI要素に変えてください。
- 金額、日時を基準としているもの
-
例) xpath=//output[text()='7,000円']
-
- 変化する可能性のあるvalueやidなどを基準としているもの
-
例) xpath=//input[@value='mp62130']
-
2-4-2.該当するUI要素が複数存在するロケータを指定している
- 実行ごとに要素が増える画面
- 前に登録したデータが残っていると画面内の要素が増え、別のUI要素が操作されます。例えば、登録 → 一覧に表示されているか確認するテストの場合、以前登録したデータが残っているとロケータによっては今回登録したデータを選ぶことができません。
- その場合、画面上で並び替えができるならば新しい順にして、xpath=//div[1]のように1個目を選ぶようにしてください。
- または、「現在時刻を元に生成したユニークな値を保存」コマンドを使って実行ごとに異なる変数を作成し、その文字列で登録してください。その際、確認する要素のロケータには変数を用いてその名前を入れてください。
- 画面に変更が入った
- 例えば、テスト作成時には画面にbutton要素が1つだったのでロケータはxpath=//buttonでも問題なかったですが、その後画面に変更が入りbutton要素が2つになると必ず1個目のbutton要素が操作されてしまいます。その場合はxpath=//button[@class='back_top']のようなそのUI要素にしかない値をロケータに入れてください。
2-5.UIを新しいものに変更する
画面に大きな変更が入った場合は、ロケータを修正するより、以下どちらかの方法でUIとUI要素を新しいものに変えてください。
2-5-1.失敗したUIを新しく使うUIとして追加する
失敗したステップの結果キャプチャにカーソルを合わせ「UIとして登録」をクリックします。
UIが追加されたので、テスト編集画面に移動し、UI一覧から「テスト実行#***の失敗時スクリーンショット」という名前のUIを選んでください。
UIを選んだら該当のUI要素を選択し直してください。
2-5-2.再アップロードしてUIを上書きする
テスト編集画面を開き、端末を起動して該当の画面を表示させます。
UI一覧より現在使用しているUIにカーソルを合わせ「再アップロード」をクリックします。
確認ダイアログでOKをクリックすると、UIが上書きされ、ステップに選択されていたUI要素も自動的に新しいUI要素に上書きされます。
参考: テスト対象の画面に修正が入ったら
もし原因がわからなければ「テスト失敗の理由を問い合わせる」「テスト内容について問い合わせる」より問い合わせてください。
補足: メンテナンスしやすい推奨ステップ数
1テストケース当たりの推奨ステップ数は200未満です。(ブラウザテストにて、テスト対象Webサイトが多くのUI要素を持つ場合は300以下を推奨します)
ステップが多すぎるとエラーの切り分けが困難となります。テストステップの冒頭で何か失敗が起きた際、後続のステップが実行されないため、問題に気づきにくくなる原因となります。