こんにちは!久し振りにひよこ隊長が登場です!最近ではロボにコーヒーを淹れてもらえるようになり、以前の私の記事で紹介した猫ロボさんのファミレス配膳と並び、生活圏での様々な自動化がかなり当たり前になってきたように感じています。
前回までは、Autifyの基本的なツールの使用方法についてをご紹介いたしましたが、今回は実際にAutifyを使用してテスト自動化を進める際に事前に考慮しておくと良い点についてを、具体的な事例を踏まえて共有し、テスト自動化を広めて行こうと思います。
過去の記事
この記事で伝えたいこと
AutifyでのE2Eテスト自動化プロジェクトでは、初動の段階で以下の点を考慮すると、より効果の高い自動化に繋がります。
・目的/対象、範囲/手段をきちんと決めておこう
・JavaScriptsqriptの適用適応範囲を検討しておこう
・同じような動作のシナリオを分類しておこう
・分類分けしたシナリオに対して、シナリオ名やラベルを活用した管理方法を検討しておこう
前提
今回はとあるwebシステムの「テスト実行」テストプロセスにて、「手動で行っている機能テストをAutifyで自動化実装を請け負うケース」という第三者検証会社では、よくあるケースを想定しての内容となります。
自動化を行うにあたって決めておくべきこと
まず、Autifyでの検討の前に、自動テストでそもそも必要な要素を考えてみます。自動化を行う際、はじめに「目的」「対象、範囲」「どのように」を明確化することで、保守運用までを見据えた導入をすることができます。
■目的
テスト効率性向上や不具合の早期発見、時間やコストの削減など何のために自動化するのか
■対象、範囲
どのテストプロセスの自動化か、どの環境や機能を対象に自動化するか
■手段
どのツールを使用するか、どのようなステップで導入までや運用を想定するか
目的や対象を決めることで、ただ自動化を導入することだけが目的になってしまったり、折角自動化用のスクリプトを作成しても1,2回しか実行しなかったりという結果になることを防ぐことができます。どのような方法や計画で自動化を進めていくかを決めるのも重要になっています。全てのテストは自動化できないということを念頭に置いて、優先順位を決めたりどこまでに何がおこなえるかやゴールを決めることで、最終的にテストの効率性や工数の削減といった成果がある結果に繋げることができます。また、誰が何を行うかの役割も明確化することで、ツールや対象システムに対する知見が無かったり、全くテストを行ったことがない人を組み込んでしまうといったことも防ぐことができます。
Autifyを使用して自動化する際の考慮点と対応方法
今回はよくある依頼のケースとして、以下の要件で自動化を行った時にどんな対応を行ったかなどを交えお話しします。
・既存の手動テストをできるだけ自動化し、自動化の実装率を上げたい
・契約プランによりAutify上でのクラウド実行回数の制約があるため、テストの実行回数は抑えたい
・短い期間で自動化実装を完了したい
Autifyはブラウザ上でテストしたい動作を操作するだけでテスト手順が記録され、コードを書かなくてもテストスクリプト(Autifyではシナリオという)の自動生成が行われる便利なツールです。自動テスト用のテストケースを設計する際は、ブラウザ操作をしてテストスクリプト作成することを踏まえた上、依頼内容も考えつつ、以下のことを整理しながら設計する必要があります。依頼の内容を「目的」「対象、範囲」「手順」と当てはめていき、様々なアプローチでそれぞれ対処を行います。
目的と対象、範囲への対処 ~JavaScriptの適用範囲を検討する~
依頼では「自動化の実装率を上げたい」という「目的」と「既存手動テストをできるだけ自動化したい」という「対象、範囲」になります。自動化実装率を上げる対応や既存手動テストをできるだけ自動化する方法としては、以下の様な主にJavaScriptを有効活用した対応を行うことで実現することができます。
・事前にAutifyの標準機能(Autifyレコーダーのレコーディングやアサーション)でできることと、できないことを洗い出す
・Autify標準機能でできないことはJavaScriptを使用するなど解決方法の調査を行いつつ、並行でテストケース作成やできること部分の実装を進める
・JavaScriptを使用した部分はスニペット化し別シナリオでも流用する
・JavaScriptはより管理が行いやすいGithubを活用する
手段への対処 ~類似動作のシナリオの分類化など~
依頼では「Autify上でのクラウド実行回数の制約による実行回数抑制」と「短期間での自動化実現」という「手段」に対するアプローチとなります。以下の様なテスト視点でテストケースやデータ選定を行ったり、Autifyの機能を十二分に活用し様々な工夫を行うことで、回数抑制しつつ短期間で自動化の実現を行うことができます。
「Autify上でのクラウド実行回数の制約による実行回数抑制」に向けて対応したこと
・1シナリオ内で複数のテストを実施できるようにしメンテナンス性を保ったまま、実行回数を抑える
・環境が不安定でテスト実行が失敗した際でも、「再実行」機能を使用することで実行回数が消費されない状態でリトライを行う(2022年のアップデートでの追加機能)
「短期間での自動化実現」に向けて対応したこと
・対象システムの仕様把握時間が短い場合は、操作に迷いが無くなる程度に要点を押さえたテストケースを作成したり、大まかなテストデータを定義する
・ユーザが異なるだけのパターン化できるシナリオはCSVデータ指定化を考える
・繰り返し実行することを想定し、確認後元に戻す手順(開始前の初期状態化)を入れ込む
・類似内容のシナリオは毎回1から作成するのではなく複製したり、一部をステップグループ化しシナリオの途中や末尾に入れ込み有効活用する(2022年のアップデートでの追加機能)
・類似手順はシナリオ内の各ステップをコピー、移動などを活用して作成や編集時間を短縮する(2021年末のアップデートでの追加機能)
・段階対応が行える場合や対象物が多い場合は自動化対応する機能などの優先順位を決める
シナリオ名やラベルを活用して管理する
ここまで工程を行うと、次にAutify上で動かす必要があります。しかし、実際に動かし結果をみてみると、目的のシナリオが見つけられないことや、シナリオやテストプランの数が多く、テスト結果を見てみても、どこで何を行っているかわからないといった状態に陥る場合があります。そのような場合は、テストシナリオやテストプランなどにプロジェクトとしての命名ルールを定義し、名前やラベルを付けることで、シナリオの検索が容易になります。また、必要に応じてシナリオやステップに説明を記載することで、シナリオの詳細を見返さなくても、シナリオの内容を把握できるようになります。
※シナリオ=テストシナリオ、ステップ=テストシナリオの1手順
※Autifyの使い方やシナリオ、ステップ、テストプランなどの詳細については、過去記事のノーコードで簡単なテスト自動化ツール「Autify」を使ってみました #1~#3
まとめ
「目的」や「対象、範囲」、「手段」の設定が疎かになってしまっていると、「ただ自動化してみただけ」や「自動化導入しただけ」、といった保守運用が誰もできない負の産物として「自動化は失敗」と判断される結果に繋がりやすくなります。これらをしっかり定めながら、初めはスモールスタートからできる範囲で、自動化して振り返りを行いつつ導入することで、目的を達成できる「成功した自動化」に繋がりやすくなります。今回紹介した内容はあくまでも方法の一例ではありますが、自動化を成功させるためには、「目的」や「対象、範囲」、「手段」にあわせて、色々なことを検討することが必要となってきます。この記事を参考にしつつ今では当たり前となりつつある自動化の波に乗る助けになるとうれしいです。