Autify NoCode七転び八起き～コケにくいテストシナリオの作り方～

![READYFORアドベントカレンダー2024カバー画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224579/5dfb3d64-782b-46a6-c09d-5873693ca217.png)

# はじめに
READYFOR株式会社へ業務委託で参画させていただいている @terraphic です。
この記事は [READYFOR Advent Calendar 2024](https://qiita.com/advent-calendar/2024/readyfor) の17日目の記事になります。:santa_tone1:

優秀な仲間たちの記事もぜひぜひご覧あれ :arrow_down: 

https://qiita.com/advent-calendar/2024/readyfor

ちなみに、本日わたくしの誕生日です(目出鯛)

# こんな方へ最適な記事です
* [Autify NoCode](https://autify.jp/products/nocode)を利用してテストケースを作成し始めたばかりの方
* Autify NoCodeを導入検討している方

ちなみに、"案件"ではありません(FREE)

# Autify NoCodeでの困りごと
**作成したテストシナリオがFlaky(不安定)**

ノーコードでテストシナリオが作れるAutify NoCode。
「簡単にE2Eテスト作れるんやろ？サクっと作って、サクッと運用始めよ。」
と思っていざ作り始めてみると...意外とね。大変よね。

何が大変て、作ったテストシナリオが不安定でコケちゃうこと。
あまりにコケすぎるとオオカミ少年🐺になってテストが形骸化してしまうっ！

原因は様々...だけど、こんな作り方するとコケにくいよ！なTIPSを集めてみました。

* 使用するユーザーを使いまわさない
* 同じような要素が多い画面はAIに頼らず"ロケータ"を使う
* 複雑な画面操作には"JSステップ"を使う
* どのステップでコケても再実行できるよう"クリーンアップステップ"を活用する 

深堀りしてみましょう

## 使用するユーザーを使いまわさない
複数のテストシナリオで同じユーザーを使いまわしていると、
テストを同時実行した際にユーザーの状態が変わって想定した結果と異なってしまい、コケることがよくあります。

「え～？じゃあたくさんテストユーザーを作っておかなくちゃいけないの？？」

答えはNO。
Autify NoCodeには[ランダムなメールアドレスを発行してくれるメールテスト機能](https://help.autify.com/v1/docs/ja/email-test)があります。
メールアドレスでユーザー登録をするステップを追加してテストを実行すれば、どんなタイミングであっても想定した結果となることでしょう。
2024年12月現在、[どの契約プランでもメールテスト機能は使える](https://autify.jp/pricing)ので大活用していきたいですね。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224579/6a018012-6805-c986-8f7a-5682a85a4409.png)


注1: テスト環境から`@testmail.autify.com`ドメインへメール送信ができるよう設定変更しておきましょう


## 同じような要素が多い画面はAIに頼らず"ロケータ"を使う
`AIを用いたノーコードテスト自動化ツール`であるAutify NoCode。

「え？AIがシナリオのメンテナンスを自動でしてくれるんじゃないの？？」

それが"ウリ"な訳ですが...何事にも限界ってものがありまして。
多くのテストシナリオを作成した経験上、同じような要素(プルダウンやテキストフィールド)が多い画面だとAIの要素特定に時間がかかったり、要素特定できずにコケる場合が多い印象です。
Autify社のカスタマーサポートへ問い合わせ相談もしましたが、2024年12月現在の対応策としては[ロケータを追加して要素を指定する](https://help.autify.com/docs/ja/add-a-locator)のが最善策だそうです。

この機能を利用すると、そのステップはAIによるメンテナンスが効かなくなります。
つまり、**ロケータの設定如何ではさらにコケやすくなる可能性もある**ということです。

### ロケータ設定のコツ
* CSSセレクターで要素内の不変そうな属性値を利用する
例: `button[aria-label="close"]`, `div[role="switch"]`
![スクリーンショット 2023-07-04 1752242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224579/3935cddf-8073-3de1-9c62-e8fd207b0aaa.png)


## 複雑な画面操作には"JSステップ"を使う
`AIを用いたノーコードテスト自動化ツール`である(略

「え？JavaScript書くなんて聞いてないよ！！」

前項と同じ理由ですが、**何事にも限界ってものがありまして。**
ロケータ設定でも埒が明かない場合は、[JSステップ機能](https://help.autify.com/docs/ja/javascript-steps)を利用し、自らJavaScriptを書いて画面操作をすることになります。
Autify社からは[Autify JavaScript Snippets](https://javascript-snippets.autify.com/ja/)として、よく使われるコードテンプレートが公開されていますのでこちらを利活用してみてください。

https://javascript-snippets.autify.com/ja/

「それじゃあテストにならんやろ！」
というシチュエーションもそこそこあるかと思います。
READYFORではあくまでも最終手段として、またはテストの補助的操作で使用しています。

AIがより賢くなることをサンタさんにお願いしておきましょう :santa_tone1: 

## どのステップでコケても再実行できるよう"クリーンアップステップ"を活用する 
例えば"アイテムを編集する"というテストシナリオを作成した場合、次回テスト実行用にアイテムのデータを元に戻しておきたいですよね。

データを元に戻すステップをテストシナリオの最後に追加して
「よーし！これで大丈夫！！」

ちょっと待って。テストの途中でコケてしまったら...？

そんな時は[2023年9月にリリース](https://help.autify.com/docs/ja/release-notes-september-22nd-2023)された[クリーンアップステップ機能](https://help.autify.com/docs/ja/cleanup-steps)を活用しましょう。
テストが途中でコケても、最後に必ず実行されるステップが書けます。

最近リリースされた機能の中でも個人的に激アツで大活用中◎
将来的にクリーンアップステップの途中で`exit 0`できたり実行タイミングを選べたら嬉しいなと期待しています！

注2: 2024年12月現在、こちらの機能はAdvancedおよびEnterpriseプラン、および同等のプランのみ利用可能だそう

## まとめ
いかがだったでしょうか？
たかが、テスト。されど、テスト。

システムの安心・安全と、より良い機能の早期提供を実現すべく、こういった素晴らしいツールをどんどん利活用していけたらと思います:christmas_tree::santa_tone1::christmas_tree:

明日12月18日は @shmokmt さんの担当です。お楽しみに！