本セッションの登壇者
セッション動画
MagicPod CEOの伊藤望(Twitter: @ito_nozomi)です。現在の会社を起業する前から自動テストツールに約13年関わっており、テストツールばかりを作っている世界でもめずらしい経歴だと思います。MagicPod以前は自動テストツールのSeleniumコミュニティを主宰したり、自動テストに関する書籍を出版していました。
私の13年の経歴と、起業の経緯はソフトウェアテスト自動化カンファレンス2022でもお話していますので、よろしければ資料をご覧ください。
今回は下記のトピックについてお話します。
- MagicPodの概要
- デモ
- MagicPodの特徴
- MagicPodでテストはどう変わる?
- MagicPodのこれから
MagicPodの概要
MagicPodはWebサイトとモバイルネイティブアプリのE2Eテスト自動化に特化したSaaSです。Web/モバイルアプリのどちらのプランも幅広く使われており、ユーザーの数も半々くらいです。
ノーコードで簡単にテストを作成できることが特徴ですが、簡単なだけではなくて豊富なコマンドを用意していることで柔軟性とメンテナンス性も両立できていることが強みです。
MagicPodを作っているのは自動テストのエキスパートたちであり、Seleniumの書籍の著者や、自動テストの書籍の翻訳者、テストツールカンファレンスのappiumの登壇者がいます。
MagicPodユーザーは幅広く、実際に使っていただいたユーザーがMagicPodを気に入ってブログ記事を書いてくださることもあって、より広く認知されています。
- みてねのE2E自動テスト導入戦略
- 【インターンレポート】自動テストを実装したら衝撃を受けた学生の話
- Ubieのアプリ開発を支えるMagicPodを使った自動テスト
- テスト自動化初心者がノーコードツール「MagicPod」でテスト自動化に挑戦してみた!
- アプリのテストにMagicPodを導入している話
- MagicPodでE2Eテストを実装した話
デモ - MagicPodでWebサイトのテストを作成する
MagicPodで実際にWebサイトのテストを作成する様子をデモ動画を使ってご紹介したいと思います。
まずはMagicPodを開いて、テスト対象ページのURLを入力します。
MagicPod内にテスト対象のページが読み込まれます。
「要素選択」をクリックするとページ内の要素が自動的に検出され、どこにどの要素があるのかMagicPodが認識できるようになります。
認識された要素をクリック/ドラッグ&ドロップし、テストを作成します。たとえば入力エリアの要素を選択した場合は、テキストを入力するコマンドを使用し、入力する値を指定します。
テストを作成後に「実行」をクリックすると、指定した手順にしたがってテストが自動的に実行されるのを確認できます。
この手順を繰り返し、遷移先のページでも同様に要素を選びながらテストを作成します。
このように、MagicPodでは作成したテスト手順が正しく動作するか検証しながらテストを作成できます。
作成したテストをひと通り実行すると、テスト途中のスクリーンショットや実行ログなどのテスト結果でテストの流れを確認できます。
モバイルアプリのテストを作成するのも、Webサイトのテストとほぼ同様の手順です(デモ動画)。
最初にテストするアプリを指定し、MagicPod内でアプリを起動します。
「要素選択」をクリックするとアプリ内の要素が自動的に検出されますので、要素をクリック/ドラッグ&ドロップしてテストを作成します。
各画面で要素を選んで入力やタップなどのコマンドを指定することを繰り返しながら、テストを作成します。
このように、MagicPodではWebサイト/モバイルアプリどちらでも同じ感覚でテストを作成できます。
MagicPodの特徴
ノーコードでのテスト作成
デモでご覧いただいたように、プログラマでなくても画面から要素を選択することで簡単にテストを作成でき、やや複雑な操作も用意されたコマンドを使うことでノーコードで実現できます。
クラウド上でのテスト実行
MagicPodが提供するクラウドでテストを実行できますし、SauceLabsやBrowserStackなどの外部ベンダが提供するクラウド環境でテストを実行することもできるため、実行環境にロックインされることなくテストを作成できます。またクラウドだけではなく、ローカルPCでのテスト作成/実行もサポートしています。
クロスブラウザ/マルチ端末対応
作ったテストはさまざまなブラウザや端末で実行でき、並列実行もサポートしています。
Visual Regression Test
画面キャプチャを撮って期待値とのズレを検出できるので、デザイン崩れなどもすぐに検出できます。
CI連携
テストは毎日定期的に実行したり、ビルドごとに実行したりできることが望ましいため、CircleCI / Jenkins / GitHub Actions / Bitrise / Azure Pipelinesなどの主要なCIツールと連携できるようにしています。
メンテナンス支援機能
テストのメンテナンスを支援し、メンテナンスコストを削減するため、共通化/再利用/管理のための機能も提供しています。
- 共通のテスト手順を共有・再利用できる共有ステップ機能
- テストステップごとの画面定義をまとめて再利用できるUI定義共有機能
- 作成したテストの入力データ部分を差し替えられるデータ駆動テスト機能
- if文のような分岐を実現する条件分岐機能
- 画面上の値を保存して他の画面で使用できる変数機能
- 複数人でテストを編集する場合に便利な履歴管理機能 (ブランチ管理の機能も作成中)
各種AI機能
MagicPodは「AIテスト自動化プラットフォーム」とうたっていますが、どの部分にAIを使っているのかをご紹介します。
テスト手順の日本語形式表示
さきほどのデモでは、テスト手順が読みやすい日本語形式で表示されていましたが、これはOCRなどを使って画面からどのようにテスト手順に表示すればよいかを判断して実現しています。また、歯車の形をしたアイコンのボタンには「設定ボタン」という日本語ラベルを付与するなどの物体認識も取り入れています。もちろん、内部のHTMLからラベルを読み取っているので、これらの情報を総合的に判断して読みやすい日本語形式でテスト手順を表示しています。
UI変更があった場合のテスト自動修復
たとえば、テスト対象画面のボタンのIDが変更されたときには、テスト手順内のボタンのIDも自動的に変更し、UIの変更にあわせてテストを自動修復する機能も提供しています。最近は画面内の項目の変更だけでなく、コマンドも自動的に変更できるようになり、テストケース内でうまく動かなくなったところを総合的に修復できるようになっています。
重複したUI定義の自動統合
テスト作成時に作りすぎたUI定義のうち、重複するものを適宜統合するユニークな機能も提供しています。
さまざまなコマンド
MagicPodでテストを作成する際に利用できるコマンドも複数提供していますので、一部をご紹介します。
値チェック
画面URLのチェック/アラートメッセージの表示チェック/テキストの値チェックなど、さまざまな条件を細かくチェックできます。
各種ブラウザ操作
ダブルクリック/右クリック/ファイルダウンロード/戻る/進む/ウィンドウの切り替えなど、複雑なブラウザ操作もサポートしています。
各種モバイル端末操作
ブラウザ操作に比べてモバイル端末操作のほうが複雑ですが、フリック / ドラッグ&ドロップ/ ピンチイン/アウト /ホームボタン操作 / アプリ起動/終了などのモバイル端末での多様な操作もサポートしています。
スワイプ/端末への画像の追加/端末の回転/お絵かきアプリなどのテストで必要なフリーハンド図形描画もコマンド内で細かく指定できます。
端末の言語/地域や位置情報/タイムゾーンなど、端末設定を変更するためのコマンドも提供しています。位置情報はテスト実行中にリアルタイムで変更できるようになったため、少しずつ移動しながらアプリを操作するといった状況もテストできます。
各種ユーティリティコマンド
複雑なテストケースをノーコードで作成できるようにするため、四則演算/数値比較/正規表現/二段階認証突破などの細かな操作に対応するためのコマンドも提供しています。
日付計算コマンド
たとえばテスト実行時点の1カ月後の日付を入力するといった操作を自動化するために、日付を計算するためのコマンドも提供しています。
HTTPリクエスト送信
データベースの値チェックやデータクリアなどのために、テスト中に他のシステムにHTTPリクエストを送信できるコマンドも提供しています。
MagicPodでテストはどう変わる?
ではMagicPodを使ってテストを自動化すると、手作業でテストする場合と比較してどのような効果があるのでしょうか。
フィードバックサイクルが高速に
まず、多くのMagicPodユーザーから「フィードバックサイクルが高速になった」という声をいただいています。手作業によるテストは2週間に1回、1カ月に1回程度だったテスト頻度が、MagicPodを使ってテストを自動化すると毎日テストを実行できます。どれだけ多頻度でテストを実行してもMagicPodの料金は変わらないので、多くのユーザーが毎日テストを実行しています。前日仕込まれた不具合に翌日には気づけるため、記憶が鮮明なうちに修正できたり、別の変更による影響を受ける前に修正できたりするため、開発の生産性が上がります。
ユーザーへのインタビューでは、繰り返しテストを実行できることで「開発速度が上がった」「生産性の向上につながっている」「問題をすぐに発見できる」「安心して開発に専念できる」といった声をいただいています。QA担当がテストを作成することでチーム全体として開発生産性を向上できるというサイクルができる - チームが協調して生産性向上に取り組めるというのがテスト自動化のメリットのひとつです。
チーム全員でテストをメンテナンス
ノーコードテストツールならではのメリットですが、開発者もQAもテストをメンテナンスでき、作成したテストの結果は開発者にもQAにもフィードバックされ、チーム全員の役に立ちます。チーム全員でテストをメンテナンスし、テスト結果を開発者/QAにフィードバックすることで問題を早期に発見できるので、開発者は前日仕込んだ問題にすぐに気づくことができるので生産性が上がり、QAは本番公開直前に問題を見つけて慌てることがなくなります。
MagicPodのこれから
MagicPodが今取り組んでいるのは、「コード」と「ノーコード」の融合です。
現在のMagicPodはノーコードのテスト自動化プラットフォームですが、コードでE2Eテストを作成したいという要望と、ノーコードでテストを作成したいという要望のどちらもユーザーは持っています。
開発者などが持つコードでテストを作成したいという要望の背景は、柔軟性やバージョン管理/ブランチ管理/Git管理/検索/置換ができるということです。一方でQAなどが持つノーコードでテストを作成したいという要望の背景は、わかりやすさや誰でも使えること・運用のしやすさです。このような要望の違いの結果、開発者とQAで異なるE2Eテストツールを使ってテストを運用している場合もあり、社内で分断が起きてしまいます。
MagicPodは開発とQAが協調してテスト自動化に取り組めるようにしたいと考えています。
具体的には、コード/ノーコードで作成したテストを相互変換できるようにして、QAがノーコードで作成したテストを開発者がコードで編集したり、その逆ができたりするような協調作業ができることを目指しています。
ノーコードでのテスト作成でできることを細かく突き詰めると、コードでテストを作成しているのと本質的に変わらなくなるのですが、実際のテストで使用するようなコマンドの数は有限です。そのような主要なコマンド/機能を網羅してノーコード/コードどちらでも利用できるようにして、限られた一部の動作をJavaScriptなどのスニペットで記述するようにできれば、コード/ノーコードで作成したテストの相互変換は実現できると考えています。
コードとノーコードの融合は私が起業したころからずっと考えていた課題で、いよいよ取り組めるようになったと感じています。
コードで作成したテストとノーコードで作成したテストが相互変換できるようになれば、両者を常に同期可能ですし、開発とQAの協調/分担も可能になります。既存の製品でもノーコード/コードどちらでもテストを作成できるものはありますが、一度コードでテストを編集するとノーコードには戻れないという一方通行のものが多く、その制約を解決するような製品を作っていきたいです。
ご清聴、ありがとうございました。