Open12

mablでOutSystemsのテストを作ってみる

Junji WatanabeJunji Watanabe

mablのトライアルを使って、OutSystemsで作ったアプリケーションに対するテストを試してみる。

いったんどんな機能か見たいので、↓のような非常に簡単なアプリケーションをOutSystemsで用意。
それに対するテストを作ってみる。

サンプルアプリケーションの準備

  1. 空のReactive Web Appを作る
  2. mablUser Role (一般ユーザー想定)とmablManager Role(管理ユーザー想定)を作成
  3. Service Studioに付属のTasks.xlsxをインポート
  4. 出来上がったTask Entityをドラッグ&ドロップで画面作成
  5. 一覧画面はmablUserとmablManager、詳細画面はmablManagerだけ権限付与
Junji WatanabeJunji Watanabe

トライアル

mablのトライアルは14日間のみ。
トライアル申請のフォームでは仕事に使っているメールアドレスや企業名を入力する欄がある。
申し込みは公式サイト右上のボタンから。
試してみたらすぐに操作できるようになった。

トライアルが始まったら、まずはデスクトップツールをダウンロード。
デスクトップツールでチュートリアルを選択してみたら、テストの作り方と実行方法がなんとなくわかる。

Junji WatanabeJunji Watanabe

制限事項

テスト対象は2023/07時点でWebサイトのみ

OutSystemsはモバイル向けネイティブアプリケーションを作れるが、現状mablではそのテストはできない。
https://help.mabl.com/docs/frequently-asked-questions より
"Mabl only supports web-based applications today, but we can test responsive mobile websites"

Junji WatanabeJunji Watanabe

保存先がクラウドなのでやめるとき困らないか

よくあるベンダーロックインの懸念事項。
テスト作成・維持にはコストがかかるし、再作成も大変なので、最悪の場合に逃げ道は欲しいところ。
https://www.mabl.com/pricing によると、最上位のEnterprise PlanならSeleniumへのExport機能があるようだ。これが使えるなら、OutSystemsのアプリケーションと同じく、動作させ続けることは可能なのかもしれない。

Junji WatanabeJunji Watanabe

exportはたぶんこれ。
https://help.mabl.com/changelog/export-mabl-tests-to-selenium-ide-and-more

mablのCLIでSelenium IDEの形式で出力できるのか。
↑のリンク先にあった
https://help.mabl.com/docs/selenium-ide-export
では、Playwrightとしても出せると書いてある。

mablとPlaywrightと言えば、LegalOnという会社のブログで
https://tech.legalforce.co.jp/entry/2023/03/31/114250
というのがあった。
ここではローコードのmablからコードベースのPlaywrightにE2Eテストを移行したことが書かれています。
移行理由として挙げられているのは4つ

  1. QAのスキルの幅を広げることで、新たな視点からテストが行える
  2. GitHub上でレビューができる
  3. 柔軟な実装を可能にしたい
  4. アカウント管理コストの削減

QAの人にコーディングスキルが結構備わっていそうな印象。コーディングスキルが十分にあって、ローコード製品が提供する生産性などよりも柔軟性が重要だと移行したくなるのだろう。
ただ、2週間で移行対象のテスト書き換えが終わったそうなので、ボリュームは然程でも無さそう。

ローコードテストツールの良い点として学習コストが低い点、悪い点として実行コストが高い点、が(製品の特長上当然だが)上記記事からも確認できる。

Junji WatanabeJunji Watanabe

OutSystemsのサンプルアプリケーションに対するテストを作ってみる

mablでOutSystems向けテストを作るにあたっては「幅」の値に気を付ける必要がありそう。

window.innerWidth || document.documentElement.clientWidthの値が1024以下だとタブレット、更に700以下だとスマートフォン用の見た目になってしまうので。

以下は幅を「1024」にしたときの、それぞれの値(開発者ツールのコンソールタブで確認)。この設定だとタブレット向け表示になってしまうため、もっと大きな値を設定する必要がある。

window.innerWidth
1008
document.documentElement.clientWidth
1008

と思ったが、テスト作成時に幅を「1200」にしてみても、Trainer(テスト記録時に画面右に出るウィンドウ)を表示する幅が足りなかったらしく勝手に幅が調節されて狭くなった。

すると、幅の調整が不要な大きなモニタを使う必要がありそう。

Junji WatanabeJunji Watanabe

デュアルモニタを使っている場合、Trainerが立ち上がる前に記録対象のブラウザウィンドウを広いモニタまで移動させれば、幅の自動調整は発生しなかった。

幅は1041にしたら、表示がdesktop向けになった。

Junji WatanabeJunji Watanabe

Assert時のセレクタ確認

これは、テーブル下部のPaginationに表示されるデータ件数を、Trainerの機能で拾った時のもの。
対象DOM要素の様々な属性とその値を収集したうえで、最もAssertに向いていそうなものをデフォルト選択しているようにみえる。

Junji WatanabeJunji Watanabe

実行

Trainer上でテスト実行してみたら結構時間がかかった。
E2Eだからたぶんそういうもの。

Junji WatanabeJunji Watanabe

シナリオ1: 一般ユーザーでログインし一覧画面のデータ数をチェック

以下の操作をTrainerで記録したものが↓のスクリーンショットのテスト。

  1. 一般ユーザーでログイン
  2. テーブルのデータ数をPaginationから取得して確認(5)
  3. キーワード「f」でフィルタリング
  4. テーブルのデータ数をPaginationから取得して確認(2)
  5. ログアウト
  6. ログイン画面に戻っていることを確認


この内容はcsvでもダウンロードできる。

クラウド実行

作成後のテストはクラウド実行というオプションがある。
mabl内のリソースで実行される。
実行過程の情報はステップごとに

  • スクリーンショット
  • 詳細なログ(そのステップのコマンドと結果。何が出るかはコマンドの種類によって違うようだ)

シナリオ作成者に必要そうなスキル

HTMLタグ・CSSのスタイルの知識
操作はコマンド+コマンド毎に決まったパラメータという形であらわされていそう⇒OSでCUIで操作できるとか or 基礎的なプログラミング能力 があればよさそう

Junji WatanabeJunji Watanabe

シナリオ2: 管理ユーザーでログインし、詳細画面で編集した結果を一覧画面で確認

別のユーザーでログインして、以下の操作を記録してみる。

  1. 管理ユーザーでログイン
  2. 詳細画面へ
  3. 後ろに「 Changed」を追加
  4. 一覧画面で変更を確認
  5. もう一度詳細画面へ移動して変更を切り戻す
  6. 一覧画面で確認
  7. ログアウト

ちょっと長いので、今度はcsvにエクスポートして結果を確認してみる

"step","stepNumber"
"Set viewport size to width 1041 and height 800","1"
"Visit URL assigned to variable ""app.url""","2"
"Click on the ""Username"" text field","3"
"Enter ""mablManager"" in the ""Username"" text field","4"
"Send ""[TAB]"" keypress to the ""Username"" text field","5"
"Enter a password in the ""Password"" text field","6"
"Click on the ""Login"" button","7"
"Click on the <div> element with text ""Task List Add Task Description Due Date Is Active No items to show...""","8"
"Click on the <span> element with text ""Finish Tutorial""","9"
"Assert ""innerText"" of the <h1> element with text ""Edit Task"" equals ""Edit Task""","10"
"Click on the ""Description"" text field","11"
"Enter ""Finish Tutorial Changed"" in the ""Description"" text field","12"
"Click on the ""Save"" button","13"
"Assert ""innerText"" of the <span> element with text ""Finish Tutorial Changed"" equals ""Finish Tutorial Changed""","14"
"Click on the <span> element with text ""Finish Tutorial Changed""","15"
"Click and hold on the ""Description"" text field","16"
"Release on the ""Description"" text field","17"
"Enter ""Finish Tutorial"" in the ""Description"" text field","18"
"Click on the ""Save"" button","19"
"Assert ""innerText"" of the <span> element with text ""Finish Tutorial"" equals ""Finish Tutorial""","20"
"Click on the <i> element with class name ""icon fa fa-sign-out fa-1x""","21"
"Assert ""innerText"" of the ""Login"" button equals ""Login""","22"

Plan作成

EnvironmentはOutSystems側がPEだと無理かな
Planを作成しようとしたら、まずはアプリケーションを作成しろとのこと。

Plan作成

これでここまでに作成した2つのテストを含むPlanが追加された。
Planの画面から実行できる。
2つのテストを含んだ状態で、リクエストから1分56秒(シナリオ1は58秒、シナリオ2は1分20秒)かかった。合計時間より短時間で終わっているのはおそらく、Planの中で2つのテストを並行実行する指定になっているからか。

Junji WatanabeJunji Watanabe

favicon.icoが404になる

Planを実行していて気づいたが、app.urlを開くステップが警告付き合格になる。

ネットワークのログを開くと、404エラーになっている通信が1件。
https://ホスト/favicon.ico
へのリクエスト。

このリクエストはアプリケーションからの指定ではない(OutSystemsで標準テンプレートから作ったアプリケーションはfaviconをhttps://ホスト/モジュール名/favicon.pngからダウンロードする)と思う。特に実害は無さそうだが、警告付き失敗という表記が「テスト結果に含まれていて当然」という状態は良く無さそう。できたら修正したい。原因化対策が思いつくまでは棚上げ。