- 印刷
- ダークライト
概要
顧客体験や業務のストーリーに沿ったテストを作成していると、テストプラン内の複数のシナリオ間で値を受け渡したくなるケースがあります。たとえば、シナリオAで顧客が注文をした結果として生成された注文IDを、シナリオBの注文管理画面に入力する、といった場合です。
テスト間の変数受け渡しは、テストプラン内で実行される複数のテストのあいだで変数を受け渡せる機能で、まさにこのようなユースケースのために開発されました。早速、どのようなものなのかを見ていきましょう。
動作のしかた
テスト間の変数受け渡しでは、シナリオに対して2種類の「変数」の概念を導入します。インポート変数とエクスポート変数です。これらの変数は、直列実行のテストプランにおけるテスト間の値の受け渡しに利用されることが想定されています。並列実行のテストプランでも利用は可能ですが、値の参照順が不定になることをご留意ください。
インポート変数は、その名の通り、他のテスト結果から取得した値を取り込んで利用する変数です。ただし、期待する変数がインポートされなかった場合には、あらかじめ設定されたデフォルト値が利用されます。このデフォルト値は、シナリオをローカルリプレイしたり、「今すぐ実行」によって単独で実行した場合にも利用されます。インポート変数の値は、引数を取るあらゆるステップ、すなわち入力・アサーション・JSステップなどで利用することができます。
エクスポート変数は、逆に、シナリオで取得した値を他のテストでも利用可能にするために定義するものです。エクスポート変数には、JSステップや動的な値など、値を返却するステップを指定する必要があります。エクスポート変数にはデフォルト値を設定することはできません。値をエクスポートできなかった場合は、代わりに空白の文字列がエクスポートされます。
上図のように、インポート変数は、同じテストプランで実行されたテストのエクスポート変数から値を取得します。値をインポートするには、インポート変数と同じキーで変数がエクスポートされている必要があります。
インポート変数はすぐに使う必要はないので、対象テストの前に実行したシナリオであれば、どのシナリオのエクスポート変数でも参照することが可能です。変数が同じキーで複数回エクスポートされていた場合、最も直近エクスポートされた値が使用されます。
- インポート変数・エクスポート変数、それぞれで最大50個まで定義可能です。
- 変数のキーは一意である必要があります。
- キーには英数字(大文字・小文字を区別)と
_
(アンダースコア文字)のみを使用可能です。 - 変数の値の型は文字列のみで、最大1000文字まで
シナリオにおける変数の設定
早速、変数の設定方法を見ていきましょう。まずシナリオをレコーディングした後、シナリオ詳細画面の「オプション」タブをクリックし「変数タブを表示する」をクリックしてください。
「変数」タブに移動すると、インポート変数とエクスポート変数を作成できる画面が表示されます。
エクスポート変数の設定
まず、変数をエクスポートするには、JSステップや動的な値など、値を返すステップが必要です。該当するステップを作成した上で「変数」タブをクリックし、変数の設定に移りましょう。
エクスポート変数セクションで、変数にキーとステップの結果を指定することができます。ステップの結果には、エクスポート変数に使用できるシナリオ内のステップのリストが表示されます。なお、シナリオ内に値を返すステップがない場合は、ドロップダウンに何も表示されません。
インポート変数の設定
他のシナリオからエクスポートされた変数を現在のテストで使用するには、インポート変数を設定する必要があります。インポート変数のセクションでは、インポート変数のキーとデフォルト値を指定することができます。「追加」をクリックして、必要なだけ変数を定義しましょう。また、これらの変数は、先行するテストからエクスポートされる見込みの変数と同じキーを持つように設定してください。
変数受け渡しの実践
では、以下のようなテストを例に、変数受け渡しが実際にどのように動くか見てみましょう。
シナリオ 1
以下の変数を生成し、エクスポート変数として返します。
USERNAME
PHONE_UMBER
シナリオ 2
シナリオ1から返された以下をインポート変数として受け取り、入力やアサーションに使用します。
USERNAME
PHONE_NUMBER
また、次の新しいエクスポート変数を返します。
HEADLINE
シナリオ 3
シナリオ1が返したユーザー名と、シナリオ2が返した見出しをインポート変数として受け取り、JSステップで使用します。
USERNAME
HEADLINE
これらのシナリオを直列実行のテストプランに組み込み、実際どう動作するかまでを見ていきましょう。
シナリオ毎の変数の設定
シナリオ1
まず、後続のテストで使用したい値を返すステップを作成します。一般的には、画面やAPI呼出から取得した値をreturnするJSステップや、動的な値となるでしょう。これらのステップを作成するには、以下のドキュメントを参考にしてください。
その後「変数」画面に移動し、エクスポート変数を追加します。各変数に対し、ステップの結果ドロップダウンから、先ほど作成したステップを指定します。
なお、シナリオ1はテストプランの中で最初に実行することを想定しているので、インポート変数は必要ありません。
シナリオ2
次に、シナリオ1が返すエクスポート変数の値を受け取る、シナリオ2を作成します。期待通りの変数受け渡しをするために、シナリオ1のエクスポート変数と同じキーを持つインポート変数を作成しましょう。必要であれば、テストが単独で実行されたりリプレイされたときのために、それぞれの変数にデフォルト値を設定してください。設定しない場合は空文字列となります。
インポート変数が定義されると、シナリオ内で使用することができるようになります。入力ステップやテキストアサーションのような、引数をとるステップの詳細を開いて「変数」を選択すると、インポートされた変数を引数として選ベるようになります。
以下のスクリーンショットは、インポート変数を利用したテキスト入力を実施している例です。
同様に、引数をとるテキストアサーションでもインポート変数を利用できます。
また、このシナリオにも値を返すステップがあれば、後続のシナリオで使用されるエクスポート変数を追加することができます。
シナリオ3
シナリオ2で見たのと同じ要領で、シナリオ1または2からエクスポートされた変数を参照するよう、インポート変数を定義しましょう。
このように値をインポートすると、シナリオ1から返された値とシナリオ2から返された値を組み合わせて、何か特定の操作を実現することも可能です。以下のスクリーンショットは、シナリオ1の実行結果からインポートされた値とシナリオ2の実行結果からインポートされた値を引数にとったJSステップの例です。
上記のように、以前のテスト結果から取得した変数を利用することにより、シナリオでできることの幅が一気に広がります!
テストプランの実行
シナリオの準備ができたら、テストプランを作成しましょう。シナリオを実行予定の順番で追加し、直列実行に設定します。
テストプランの準備ができたら、実行してみましょう。
テストが正常に実行されると、通常のテストプラン結果一覧画面が表示されます。それでは、各テスト結果の詳細を見ていきましょう。
シナリオ 1 の結果
テストで変数が使用された場合、テスト結果詳細画面の上部に、「インポートした変数」セクションと「エクスポートした変数」のセクションが表示されます。シナリオ1の結果では、エクスポートされた変数のキーと値のペアが表示されます。
シナリオ 2 の結果
「インポートした変数」セクションに、先行するテスト結果からインポートされた変数のキーと値のペアが表示されます。値のすぐ後には、それぞれの値が返されたテスト結果へのリンクが表示されています。これは、これらの値がどのように生成されたかを詳しく調べたいとき、特にテストが失敗したときに便利です。
シナリオ3の結果
最後の結果はシナリオ2の結果と似ていますが、注目すべきは、変数が返された元のテスト結果が異なることです。値の右にあるリンクから、変数が返された各テスト結果をすぐに参照することができます。
基本的な変数受け渡しのイメージが湧きましたでしょうか。ぜひ機能を活用いただき、さまざまなテストの作成に役立てていただければ幸いです。
FAQ
ステップグループで変数は利用できますか?
ステップグループ自体の中で変数を定義することはできませんが、ステップグループを使用するシナリオの中で、使用中のステップグループ内で変数を参照したり、変数を返したりすることは可能です。
同じキーの変数の値がテストプラン内で複数回エクスポートされていた場合、後続のシナリオはどの値を参照しますか?
最も直近のテスト結果の値が使われます。また、同じキーの変数はテストプラン内で何度でもエクスポートするすることが可能です。
インポート変数とエクスポート変数で同じキーを使うことはできますか?
可能です。つまり、実行されるたびに同じキーの変数の値が上書かれていくようなシナリオの作り方ができます。
複数の実行環境に対してテストプランが実行されたときの変数の参照はどうなりますか?
シナリオAとシナリオBがテストプランにあり、実行環境にChrome/LinuxとiPhone X (Emulator)が指定されている場合、実行順序は以下のようになります:
- Chrome/Linux - シナリオA
- Chrome/Linux - シナリオB
- iPhone X (Emulator) - シナリオA
- iPhone X (Emulator) - シナリオB
変数の受け渡しは実行環境を超えて機能しますが、1.から返された値は4.では参照できません。これは、3.が1.と同じキーのエクスポート変数を返すためで、4.は3.の結果を参照することになります。
データ機能と併用すると変数の参照はどうなりますか?
データを使ったテスト結果でも変数の受け渡しは機能します。インポート変数とエクスポート変数に同じキーを使用してシナリオを実装すれば、異なるデータを用いた同じシナリオの実行結果間で変数の受け渡しをすることが可能です。
変数を参照したテストを再実行するとどうなりますか?
実行したときと同じ変数の値が使われます。
ただし、実行後にシナリオのインポート変数を編集した場合は以下の挙動となります。
- 使用中のインポート変数のデフォルト値を変更した場合
- 変更後のデフォルト値が使われます。
- インポート変数を追加した場合
- デフォルト値が使われます。
変数はシナリオの可能性を広げるのと同時に、テストに新たな複雑性をもたらす可能性があることもまた事実です。変数に関する機能への疑問やフィードバックは、お気軽にご連絡いただければ幸いです。