私はそこにある無数のテストソリューションをふるいにかけようとしていますが、正しい方向に向かっているかどうかさえわかりません. ストーリーは、Rails アプリとして実装された RESTful Web サービスを実行しており、モバイル クライアントをサポートしています。私たちは Web サービスの単体テストを (もちろん) 行っていますが、それにはアプリケーションの多くの部分 (たとえば、検索スタック (Apache SOLR)) のモック アウトが含まれます。
さらに、私たちのテストは、モバイル サインイン/サインオン プロセスなどの重要なルートをカバーしていません (つまり、できません!)。これは、ユーザーが資格情報を入力できる API アプリケーションとモバイル Web サイト間の通信が含まれるためです。 SSO(ジャンラインエンゲージ)。したがって、標準の Rails 統合テストでは対応できません。
理論的には、テスト スイートが非常によく設計されていて、次のレイヤーのテストが開始される結合ポイントでのみ厳密にモッキングが行われる場合、サービス API とモバイル Web サイトを個別に単体テストまたは機能テストすることで、同じテスト カバレッジを取得できます。ただし、実際には、複数の開発者が個別にテスト スイートに取り組んでいる場合、これは錯覚です。私たちの単体テストがそれほどうまく設計されていないことは認めます。特に TDD を実行すると、テストによってアプリケーション コードを駆動できる一方で、テスト コードの設計はテスト対象のユニットに合わせて調整されているだけであり、テスト スイートがかなり大きくなることがわかりました。
私が見つけたもう1つのことは、単体テストを純粋に使用して回帰を検出しない場合があることです。たとえば、ノックオン効果のために不適切なクエリがSOLRサーバーに送信されました。そのため、スタック全体が重要なルートに沿って機能することを確認する唯一の真の方法は、すべての展開の前にステージング サーバーでエンドツーエンドのテストを自動的に行うこと、つまり実際の HTTP 要求をアプリに送信することだと考えました。
私の質問は次のとおりです。
- これはまったく合理的なことだと思いますか?Web でのライブ API のエンドツーエンド テストに関する情報はほとんど見つかりませんでした。
- どのツール/セットアップを提案しますか? 私たちは Watir を使用して Web サイトの受け入れテストを実行していますが、Web サービスとしてはやり過ぎのようです (ブラウザー環境は不要で、JS や UI っぽいものは必要ありません)。Ruby スクリプトのような単純なものでさえありますか?
- そのようなテストの設計に関して私に与えることができる一般的なベストプラクティスやアドバイスはありますか?