テーブル機能とキーワード駆動テスト
Eggplant Functionalのテーブル機能を使用してキーワード駆動テストを行うことは、手動テストまたは自動テスト、特に大規模な組織やテストプロセスとテスト開発を分離したい環境において、良い選択となることがあります。本記事では、キーワード駆動テストとは何か、およびEggplant Functionalでテーブル機能を使用してそれを実装する方法について説明します。
キーワード駆動テストとは何ですか?
キーワード駆動テストは、テストケースまたはワークフローの作成とは別に機能テストスクリプトを開発するためのテストフレームワークです。テスト対象の特定の機能を表すキーワードまたはアクションワードを、各キーワードに対する引数(データ)とともに外部データテーブルで使用します。このアプローチはスクリプトレステストとも呼ばれます。なぜなら、テストケースをパラメータ化するためのスクリプトを書く必要がないからです。このプロセスはデータ駆動テストに似ていますが、純粋なデータを供給するのではなく、キーワードと対応するデータがテスト実行ドライバに共に供給されます。
Eggplant Functionalでは、テーブル機能を使ってキーワード駆動テストを実装することができます。スイートウィンドウでテーブルにアクセスし、テーブルを構築します。あなたのスクリプトはテーブルで選択可能なアクションとなり、ユーザーはテーブルを実行して各ステップの合格/不合格の結果を見ることができます。以下に、Eggplant Functionalでのテーブルの簡単なビデオデモンストレーションを示します:
キーワード駆動テストのユーザーロール
このプロセスでは、ワークフローはテストの「バックエンド」開発と「フロントエンド」実行の間で分割することができます。フレームワークの開発者やテストエンジニアは、一般的にテストに必要なアクションやキーワードの仕様に従ってスクリプトを作成します。テストアナリストやテスターは、テーブルでテストワークフローを構築し、テストを実行します。この役割は高度な技術的な熟練度を必要としないため、一部の組織では、ビジネスアナリストなどの人物に割り当てられる場合があります。
テストエンジニアとテスターが開発プロセス全体を通じて協力す ることが重要です。環境の規模によっては、両方の役割を同じ人物が担うこともあります。そのような場合でも、テーブルが提供する柔軟性のために、テーブルに基づいたテストモデルを開発することが便利だと感じるかもしれません。
ステップバイステップ:テーブルを使ったキーワード駆動テストの作成
アプリケーションをテストする際、アプリケーションの機能を表す多くの独立した活動が見つかるかもしれません。例えば、小売ウェブサイトをテストしている場合、Navigate_To_Website、Register、Search、Add_To_Basketなどのタスクがあるかもしれません。すべての関数が他の関数から独立して実行できるようにスクリプトを開発すれば、テーブルを使用して多くのテストケースを作成することができます。
-
テストを分割できる個別のタスクを特定します。
この段階では、テストエンジニアとテスターが共同でブレインストーミングを行っている可能性があります。目的は、テストプロセス内の各個別のアクションを特定することです。例えば、上記の小売ウェブサイトの例では、すでにリストが始まっています。簡単のため、ウェブサイトに移動し、検索を実行し、検索したアイテムが見つかったことを確認し、ブラウザを閉じてシステムをテストする(SUT)を元の状態に戻す必要があるテストがあるとしましょう。そのタスクは次のようになります:
- Launch_Browser
- Navigate_to_Website
- Perform_Search
- Verify_Search
- Close_Browser
-
各タスクに対してスクリプトを作成します。
ウェブサイト検索の例では、テストエンジニアはスクリプトペインで5つのスクリプトを作成します。このプロセスは他のスクリプトを作成するのと変わりません。(スクリプトの作成方法については、The Script Editorを参照してください。)スクリプトには、上記のリストのように、説明的なアクションワード(キーワード)を名前として付けます。アクションを実行するための実際のスクリプトを書く必要があることに注意してくださいが、現時点では、テーブルの一部として実行したいアクションを作成し、名前を付けることだけを考慮しています。
スクリプトをテーブルのアクションとして利用可能にしたい場合は、Infoの下のTable Actionペインで
Execute
またはVerify
に設定します。Scriptsペインでスクリプトを選択し、Info
ボタンをクリックしてTable Actionペインを表示します:スクリプトエディター内のTable Actionペインで、スクリプトをテーブルアクションとして設定します。
- 結果を確認したくないスクリプトについては、ドロップダウンリストから
Execute
を選択します。 - スクリプトが戻り値を返し、それを確認したい場合は、ドロップダウンリストから
Verify
を選択します。
ノートデフォルトの選択肢である
Not a Table Action
が選択されていると、Table Actionペインの他のオプションは表示されません。ノートTable Actionペインから、テストエンジニアは
Execute
およびVerify
スクリプトのデフォルトの引数と、Verify
スクリプトのデフォルトの期待値を渡すことができます。ただし、テスターは、テーブル自体でこれらの値を変更することで、これらの値をオーバーライドできます。 - 結果を確認したくないスクリプトについては、ドロップダウンリストから
-
テーブルでテストケースを構築します。
テストエンジニアがスクリプト/タスクをテーブルアクションとして定義した後、テスターは以下の手順でテストを構築できます:
-
Tablesペインで右クリックし、
New Table
を選択します。テーブルに適切な名前を付け、Enterキーを押します。テーブルはSuiteウィンドウのメインボディの新しいタブで開きます。 -
テストで実行したいアクションを選択します。
新しいテーブルには空白の行が1つ含まれています。Action列のドロップダウンリストからアクションを選択できます。テストエンジニアがテーブルアクションとして割り当てたスクリプトは、このリストの一番下に表示されます。
アクションを選択すると、その行にステップ番号が割り当てられ、新しい空白の行が作成されます。テストエンジニアがデフォルトの引数や期待値を割り当てていた場合、その情報は適切な列にテーブルに表示されます。それ以外の場合、必要な情報を記入する必要があります。
-
各ステップについて、スクリプトが必要か、あらかじめ定義されたアクションを使用できるかを決定します。
あなたがテーブルアクションとして定義したスクリプトに加えて、
Action
ドロップダウンリストには、多くの一般的なEggplant Functionalのコマンドと関数が含まれています。テストプロセスを小さく、個別の単位に分割したため、場合によっては、同じ機能を達成するためのスクリプトを書くのではなく、組み込みのアクション を使用したいかもしれません。このプロセスの一部は、テスターとテストエンジニア間の密接なコミュニケーションを必要とします。たとえば、以下に、スクリプトとしての5つのアクションが挿入されたテーブルを示します:
最初のステップ、Launch_Browserでは、意図したブラウザを起動するために画像をクリック(またはダブルクリック)するスクリプトを書くかもしれません。しかし、
Action
ドロップダウンリストからClick
(またはDoubleClick
)を選択し、そのステップの引数として適切な画像を選択することで、同じ結果を得ることができます。Action
ドロップダウンリストから画像ベースのコマンドや関数を選択すると、そのステップのArguments列は、現在のスイートからのすべての画像のドロップダウンリストを提供します。ノートアクションを実行するためのスクリプトを書かない場合でも、引数として選択できるように、SUT内で画像をキャプチャする必要があります。
現在の例では、ステップの3つを組み込みのアクションで実行できます:ブラウザを開くために画像をクリックする、ブラウザを閉じるために画像をクリックする、およびImageFound() 関数を使用して検索を確認する:
-
スクリプトを作成します。
この時点で、どのアクションをまだスクリプト化する必要があるか明確になります。テストエンジニアは、Eggplant Functionalの通常のスクリプト作成ツールをすべて使用して、スクリプトのコードを作成できます。
-
テーブルからテストを実行する
スクリプト開発が完了し、テストシナリオがテーブルに作成されると、テスターはテストを実行する準備がほぼ整います。しかし、各アクションアイテムの引数と期待値が正しく割り当てられていることを確認する必要があります。
テストエンジニアがスクリプトのTable Actionパネルにデフォルト情報を含めていた場合、テスターがアクシ ョンとしてスクリプトを選択すると、それが自動的にテーブルに表示されます。異なる値でテストを実行したい場合は、デフォルト情報を上書きできることを覚えておいてください。また、スクリプト定義がテーブルにプレースホルダーテキストを送信する場合、そのプレースホルダーを実際の値に置き換える必要があります。いずれの場合も、テーブル内の現在の値を選択し、使用したい値に置き換えます。
確認したいステップがある場合は、Expected Value列に値を持っている必要があり、スクリプトやアクション自体が値を返す必要があります(Actual Valueは、テーブルを実行した後に入力されます)。これらの2つの値(ExpectedとActual)は、Pass/Failの結果を決定するために比較されます。
これでテーブルを実行してテストを実行する準備が整ったはずです。Run
ボタンをクリックすると、Eggplant Functionalはテーブルの各行のアクションを順番に実行します。個々の行がパスするか失敗するかに関係なく、テーブルはテーブル内の各ステップを進みます。
Pass/Fail列は各行で何が起こったかを表示します:
- 緑色: パス
- 赤色: 失敗またはエラー
- グレー: 行のアクションは成功裏に完了しましたが、パス/フェイルの検証は必要ありませんでした
- 黄色: 実行中(アクションが進行中です)
テストモデルの拡張
この二つのスクリプトをテーブルで繰り返し、毎回Perform_Searchに異なる引数を使用することで、テストアイテムのリストを素早く実行できます:
同じテーブルで、事前に定義されたアクションと同様に、複数回スクリプトをアクションとして選択することができます。上記の例では、Perform_Searchスクリプトは、テーブルに入力する引数から検索語を取得するように記述されています。Verify_Searchスクリプトは特定の引数を渡して常に同じものに対して検証します。