【いつbreakする?今でしょ💥🔨😄】mablにおけるループの中断方法を紹介します!
🔹はじめに
私は現在株式会社ビットキーにてE2Eテスト自動化エンジニアとしてテスト業務を行っています。
テスト自動化というと少し前までは0から環境構築して自動テスト用のコードを書き上げて・・・と専門知識を持った方が主導して取り組むことが多かったのではないかと思いますが、今ではAutify, MagicPod, mablをはじめとしたコードをみっちり書かなくても直感的な操作でテスト自動化を実現できるツールの登場により、ノーコード・ローコードでのテスト自動化が盛んになっている印象です。
弊社でももっとハードルを下げて多くのテストエンジニアがテスト自動化を行えるように、2023年1月からmablというツールを採用しリグレッションテストをはじめとしたテスト自動化に取り組んでおります。
その中で今回は私がmablを触る中で苦戦したことのうちのひとつとして、mablでループを中断するためのbreakの実装方法を弊社での事例を添えてご紹介いたします。
※今回はmablがどういうツールか、というご紹介はいたしません。
もしmablそのものに関して興味がある方は私が過去に登壇した際の資料をぜひご覧ください!
【Developers Summit 2024】自動テスト歴0年でもできる! ~1年目で得られた成果と展望~
mablers_JP - Online MeetsUp vol.4】Bitkeyでのmablを活用したテストエンジニアの思考プロセス機械化
🔹対象読者
- プログラミング言語におけるループというものの概念に関してすでにご存知の方
- mablでのループの中断方法をご存知でない方
- 他社でのmabl活用事例に興味がある方
🔹この記事を読むことによる価値
- mablでのループを中断する方法を知ることができる
- 他社でのmablの活用事例について知ることができる
🔹本文
本文は下記構成でお送りします。「ここまでは知っているよ!」という方は初めの方は読み飛ばしていただいても大丈夫です。
- mablでループって表現できるの???
- ループの作り方
- ループの終了条件
- ループを中断する方法
- まとめ
◾️1.mablでループって表現できるの?
ループという単語を聞いて何を思い浮かべるでしょうか?
多くの方は「同じ動作を一定回数or無限に繰り返す」のようなかたちでイメージすると思います。
プログラミングにおいてはfor文やwhile文で表現することが多いループですが、mablでもループは表現可能です。
mablでループを作ると「指定したテストステップを指定回数繰り返す」という挙動をとります。
(ここでいうテストステップは「検索窓に文字を打ち込む」だったり「検索結果をアサーションする(表示確認する)」といった最小単位の工程を指します。
テストステップを連ねることでユーザーが実際に行う操作をmabl上で自動テストとして表現することができます)
ループの例。画面左側がユーザーが実際に見る画面で、右側が自動テストの編集画面になる
◾️2.ループの作り方
mablでの基本的な作り方を簡単にご紹介します
- ループの元となるテストステップを作成する
- まず最初にループさせたいテストステップを作成します。ループに使えるテストステップに制限はないため、Recording機能で作成したテストステップ、変数作成のテストステップ、JavaScriptスニペットを使用するテストステップなどなんでも取り入れることができます
テストステップの例。Googleで「株式会社ビットキー」と検索して、検索結果を選択 > ビットキーのホームページが表示されることをアサーションまでをテストにしている
- 手順1のテストステップをFlowにする
- ループのベースができたらそれをFlowにします。Flowはプログラミング言語における関数に似たような役割を持ち、Flow化することで同じテスト内または他の異なるテストにて該当のテストステップを再利用可能にすることができます。ループを設定するにはこのFlowに備わる機能を利用する必要があるため、ループを利用するためには必ずテストステップのFlow化を行う必要があります
手順1のテストをFlow化した例。番号が2の「Google検索 > ビットキーのホームページにアクセスする」というものがFlowのタイトルになる。このFlowはこのテストだけでなく、他の異なるテストでも利用することができるようになる
- Flowの設定オプション > ループ処理 > 指定回数ループ処理 or 変数を使ったループ処理を選択する
- Flowにできたらあともう少しです。ループを設定するにはFlowの編集画面に入り、ループ処理タブに遷移します。Flow作成時はデフォルトでループ処理の設定は「1回だけ実行」になっていますが、ここを「指定回数ループ処理」または「変数を使ったループ処理」にすることでFlow内のテストステップを繰り返し実行させることが可能になります ※それぞれの設定の違いについてはこのあと説明します
ループ処理の設定画面(Flowの編集画面から遷移)。デフォルトでは1回だけ実行になっているためここを希望のループ設定に変更する
◾️3.ループの終了条件
ループの終了条件は大きく4つに分けられます
- ループ回数が指定した回数に到達した場合
- ループ回数が0回になった場合
- 失敗オプションが「すぐに失敗する」のアサーションのテストステップが含まれており、なおかつ該当のテストステップが実行に失敗した場合
- Flow内のテストステップに不備があった場合(選択できない要素が含まれている、JavaScriptスニペット内の計算式が間違っているなど)
このうち3と4に関してはプロダクトの不具合が原因、またはテスト実装時の考慮漏れにより発生する想定外の終了条件にあたると思いますので各個人で状況に沿った対策が必要になるでしょう。
まず1に関しては手順2で紹介した「指定回数ループ処理」または「変数を使ったループ処理」を行うことで実現することができます。
「指定回数ループ処理」はその名の通り、「何回ループするか」を数字で指定することができます。
指定回数ループ処理の設定例。入力した回数分ループが実行される
ループを設定したFlowの表示例。Flowの名前の右下に現在のループ回数/最大ループ回数が表示される
「変数を使ったループ処理」に関しては少し工夫が必要で、これを設定するにはまず「任意の数字が入った変数」をあらかじめ設定しておく必要があります。通常この変数はFlowの中ではなく外で作成する必要があります。
変数を使ったループ処理に使用する変数をFlowの外で作成
変数を作り終えたらFlowの編集画面で「変数を使ったループ処理」を選択 > 先ほど作成した変数を「ループ処理の回数」に設定します。
手順1で作成したループ回数用の変数を使用
こうすることで変数に格納された値に応じた回数でループを実行することが可能です。
変数を使ったループ処理の構成例。Flowの外でループ回数用の変数を作成したあと、Flowを実行する形になる
ループの実行の仕組み自体は単純で、Flow内のテストステップを上から順に実行 > 最下部まで到達しループ回数に到達していなかったら再度上から順に実行・・・を繰り返して指定したループ回数に到達するまで実行を繰り返します。
この方法でループする場合は主に下記のようなテストを行いときに利用できるでしょう。
- データを決まった数作成したいとき
- 決まった回数繰り返し動作することで負荷をかけたいとき
しかしお気づきかもしれませんが、この方法だと柔軟性に欠けるため一部のテストには適合しない形になります。
たとえば、
- 特定の要素Aを見つけるまでページ送りを行う(ページ量は実行時のデータ数によって変動)
こういったテストを行いたい場合は動的=テスト実行時にループ回数を決定する必要があります。
加えて「〇〇したらループを終了する」としたいため条件分岐によってループを終了させる処理も必要です。
そこで使えるのが2のループ回数が0回になった場合の方法です。
◾️4.ループを中断する方法
では指定回数にループが到達、またはエラーなどでループが中断される方法以外でループを中断させる方法をご紹介します。
これを行うには結論「ループを0回にする」ことで実現可能です。
工程としては下記のようになります。
- ループ回数指定用の変数を作成
- Flowのループ処理の設定で変数を使ったループ処理を選択 > 手順1の変数を指定
- Flowの中で手順1の変数を0にする
ループをbreakした例。ここでは例として画面遷移まで10秒以上かかった場合、ループ回数を指定する際に使用したnumを0にすることでbreakしている
工程1,2は先ほど説明したものと同じ内容になります。
ここでは工程3が重要となります。
Flow実行中、現在のループが終了し次回のループに移行する際、mablは「変数を使ったループ処理で使用した変数」(以降変数Xと呼称)を毎回参照しています。
変数Xと現在のループ回数の数値を比較して、「現在のループ回数 < 変数X」の場合はループを続行し、「現在のループ回数 > 変数X」になったときにループが終了する仕組みになっているようです。
これとは別に、変数X(つまり変数を使ったループ処理で使用した変数)が0になるとループが終了する仕組みが存在します。
変数Xはユーザーが作成したものであり、再度変数の作成画面で変数名を「変数X」と同一の名前で再作成することにより変数Xがもつ値を変更することができます。
変数の再宣言が可能。再宣言した場合は二重で変数が作られる、のではなく既存の同名の変数の値が新しいものに上書きされる
このループが移行する際に変数Xを参照していることを利用し、「ループ中に変数Xを0にする」ことで次回のループ移行時に無効な値が挿入されることになり、ループが指定回数を満たしていなくても終了するようになります。
変数Xを0にするとループ回数の分母がX表記になる
このように実装することで「要素Aを見つけられたらループ終了」を代表とした条件分岐によるループの中断が可能になります。
🔹まとめ
最後に、本記事の内容をふりかえります
- mablではFlow機能の中にあるループ機能をONにすることで繰り返し同じテストステップを実行させることができる
- ループ回数は数字で直接指定、もしくは変数に保存された値で指定することができる
- ループは指定回数に到達すると終了する
- ループを中断させたいときは変数を利用してループ回数を指定し、終了条件を満たしたら該当の変数を0にする
- ループはテストデータの複数作成やページが動的に複数存在する場合の要素検索の時に使用できて非常に便利です。少しでもこの記事を読んでいただいた方の力になれれば幸いです
いかがでしたでしょうか?
本記事を読んでいただいた方が活用できる内容であると嬉しいです!
Discussion