弊社では、製品の自動テストにGhost Inspectorを利用しています。
ある日のことです。
「この画面消して新しい画面に置き換えるからテストの方も修正しといてよ」
OKまかせろ。
意気揚々とGhost Inspectorのダッシュボードを開きます。
コピペで複製されたものに微妙に改変が加わったり加わらなかったり無造作に乱立したガバガバテスト群を目撃したぼく「がっでむ」
キレた
プログラミングを行う際、共通の処理は関数化を行うなど、なるべく記述を重複させないという方針がございます。
いわゆるDRY原則というやつですね。(厳密には、よく聞くDRY原則は誤認されたものだと言われていますが、話が逸れるので適当なネット記事に任せます)
コードを書いている感覚の少ないGhost Inspectorだって、共通した処理の再利用は重要です。
- メンテナンスコストの軽減
- テスト修正時の修正漏れの防止
- 再利用性の向上
- 似ているテスト同士の差分確認の容易化
あたりの利点はパッと思いつきますね。特に上2つが現場的には嬉しいところです。
本題
実際に共通化を行っていきます。
今回は、「元々(ほぼ)同じ内容のテストがコピペ乱立していたものを、1つの共通テストを再利用する形に修正し、メンテナンスコストを軽減する」といったシナリオです。泥臭い箇所もございます。
0. 作業フローの確認
- 共通化を行いたいテスト内容を持つ、テストA, Bの差分を確認する。
- 共通部分を別の「共通テスト」とし、可能なら差分箇所を抽象化する。
- テストA, Bは共通テストを参照してテストを行う形に変更する。抽象化した箇所(認証情報やアドレス等)を適宜指定してテストが走るようにする。
1. テスト内容の差分確認
いきなり技術力のカケラも感じないアナログチェックです。
2つのテスト内容を見比べます。
差分のチェックにはdifff《デュフフ》を利用しました。
差分が存在しない場合は、素直にテストを Duplicate
→Move
してしまえばOKだと判断できます。
テストの内容に差分が生じている(=異なるテスト項目がある)場合は、内容を吟味して共通テストが吸収したりしなかったりするだけです。何も恐れることはありません。
2. 「共通テスト」の作成
差分の確認ができたら、次は共通で利用するテストを作成します。
共通のテスト項目となる箇所を、個別のテストとして保存します。
※Duplicate
→Move
するなりうまくやりましょう。
わかりやすく「共通テスト」などといったTest Suiteに放り込むと良いでしょう。
テストA, Bそれぞれで利用することになるため、ログイン認証など、テストごとに異なる可能性のある箇所は変数を利用して抽象化します。
参考:Creating and Using Variables – Ghost Inspector
- テストAとテストBで、同じ名前の変数に値を入れる。
- 共通テストでは、変数を参照するのみにする(値を入れない)。
このようにすることで、「共通したテスト項目を、複数のアカウントでテストする」といったことが簡単に実現できます。
3. 共通テストを利用したテストの実行
「共通テスト」の作成が完了したら、作成した共通テストを読み込んでテストを実行しましょう。
参考:Modularizing Tests – Reusing Test Steps – Ghost Inspector
Import steps from test
すれば、他のテストからテスト項目を読み込んでテストを走らせることができます。
これにより、ログイン情報のみテストA, Bで入力(変数に値を設定)し、画面上のフォームへ値を投入する共通の処理は共通テストで一本化するといったことが可能になります。
このとき、変数に値を設定する処理をテストごとに記述してもいいのですが、Test Suite単位で使うアカウントがほぼ固定であるようなケースも多いと思います。
そういったケースでは、Suite-level Variablesを設定しましょう。より管理が簡単になります。
変数を指定して問題なく動けば作業完了です。
4. その他
テスト毎のStart URLを個別に指定するのも煩雑です。
Suite Settings
のTest Defaults
から、Suite単位で共通のStart URLを設定することができます。
※各テストでStart URLを指定しなかった場合のデフォルトの値を指定するだけなので、テストによって別途Start URLを指定している場合でも問題は生じません。
Ghost Inspectorのテスト管理がぐちゃぐちゃで参った人は参考にしてみてください。
※もちろん、ログイン認証部分のテストも共通化してImport steps from test
するとよりスマートなのだろうと思いますが、弊社はそこまで綺麗に整えていません……