こんにちは、クオリティアーキテクトグループ(以下、QAG)の鐘です。
この記事では、E2Eテスト用物件のデータの正確性を維持するために、定期的にCSV形式の正しいデータを取り込むことで復旧する仕組みをご紹介したいと思います。
1. 結論
- 物件データの不備が原因でテストが失敗することは運用開始以来発生していません。データが変更されても、毎日正常な値に修正されるため、テストケースに影響しません。
- E2Eテスト用の物件が管理コストを削減するように工夫されました。また、各物件のデータを必要最低限の情報に整理し、どのテストケースで使用されているかが一目でわかるようになっています。
2. 背景
今回のテスト対象はLIFULL HOME'Sです。
開発中のプルリクエストでは自動的にE2Eテストが実行されます。
E2Eテストではユーザーのブラウザ操作を再現して物件問合せ、お気に入り登録などの機能を検証するため、40件ほどのテスト用物件が使用されています。
例:賃貸物件リストからテスト用物件を選択し、お気に入り追加ボタンを押下し、お気に入りリストの存在するかを検証するE2Eテスト
3. 解決したい問題
主要問題:物件データが意図せず変更されることで、テストが失敗してしまう
- 開発用環境とE2Eテスト用環境で同じデータストア(DBやXMLファイル)を使用しているため、開発で物件データを変更する際、E2Eテスト用の物件データも一括で変更されることがあります。
その結果、物件の名称や価格などにズレが生じ、テスト結果が失敗してしまうことがあります。
このような事象が発生すると、次の2つの悪影響があります。対応コストの増加
テスト失敗の原因を調査する必要が生じます。
物件データに問題があると判明した場合、修正(または修正依頼)を行い、その反映や対応を待つことになります。場合によっては復旧までに最大で2時間かかることもあります。
テスト信頼性の低下
プロダクトに問題がないにもかかわらず、物件データの不備でテストが頻繁に失敗し、誤報が多発してテストの信頼性が低下します。
副次問題:テスト用の物件が最適化・管理されていない
具体的に:
一つの物件が数種類のテストで使用されている
- 例えば、問合せ機能のテストと一覧機能のテストで同じ物件を使用している。
- デメリット:一つの物件に不具合が生じると、複数の機能のテストが失敗し、調査範囲が広がる。
物件データがテスト用に最適化しづらい
- 物件データがランダムで、不要なデータも含まれている
- 物件名が必要以上に長く、テストとの関連性が不明瞭
- セールスポイントやこだわり条件など、テストに不要なデータが含まれている
- 1つのマーケット(賃貸など物件種別のこと)で複数の不動産会社の物件が使用されて管理しにくい、どの物件がどのテストで使われているかが分かりにくいなどの問題があります。
4. やったこと
問題解決までの流れ
- 物件データの最適化
- CSVでデータを復元できるのツール「DataKeeper」を提供
副次問題に対して:物件データの最適化
- 1マーケットに3〜6の不動産会社が混在している状態を1マーケット1不動産会社に統一し、運用コストを削減しました。
- 1機能に対し1つの物件のみを使用するようにテストケースを調整しました。
- これにより、1つの物件が壊れても影響はその機能のテストに限定され、調査が容易になります。
- Before
* 問合せのテスト: 物件A, 物件B * 物件検索のテスト: 物件A, 物件C * リスト表示のテスト: 物件A
- After
* 問合せのテスト: 物件A * 物件検索のテスト: 物件B * リスト表示のテスト: 物件C
- テストに不要な冗長なデータを削除し、必要最低限のデータのみを残しました。さらに、物件名のフォーマットを統一し、マーケット、テスト目的、デバイスが一目でわかるようにしました。
例:品質管理テスト変更禁止b_mansion_inquire_sp
主要問題に対して:CSVでデータを復元できるのツール「DataKeeper」を提供
- 4つのマーケットの物件データを、それぞれ1つのCSVファイルにまとめてリポジトリで管理しています。
DataKeeperの実装:
DataKeeperは、CSV形式で定義した物件データを元に正しい値に更新するためのツールです。 Jenkinsでマーケットごとのジョブを実行します。
各ジョブの手順は以下の通りです。- リポジトリから対象マーケットの物件データCSVを取得
- CSVファイル内の日付(最終変更日、掲載期限など)を実行日に合わせてスクリプトで書き換え
- CSVをサーバーにアップロードし、データベースに反映
- 実行が完了したら、Slackに結果を通知
DataKeeperの運用:
平日朝に自動実行されるよう設定し、テスト用物件データに変更があってもなくても、定期的に正しいデータを書き込みます。
もし自動実行後にデータが正しい値以外に変更されても、不備を発見した人が手動でジョブを実行すれば、数分で正しい状態に戻せます。
5. さらなる改善
ここまでで、E2Eテスト用の物件データが最適化・管理されるようになり、データの不備によるテスト失敗の問題が解決されました。しかし、以下のような改善点がまだあります。
- 必要最小限のデータ以外、他のテストで必要なデータはまだ対応されていませんが、将来的に対応したいです。
- E2Eテスト用以外のテスト物件にも正しいデータを書き込む対応を提供
- 他のテストレベル、テストタイプのテスト用物件データもDataKeeperで正確に保てるようにしたいと考えています。