受け入れテスト自動化Selenium + .NET Web Api + AngularJs



社内の私たちが受け入れテストでどのように機能するかを説明します。 この記事では、 コードを含むリポジトリへのリンクと、作業例が記載されたビデオを見つけます。



すべてのテストが同じように役立つわけではありません。



少し前に、「開発者は自分のコードをテストすべきか?」という議論が関連していました。 はい、開発者は作成したものをテストする必要があります。 現在、この声明に異議を唱える人はほとんどいないと思います。



次の質問は、「開発者はどのようにコードをテストする必要がありますか?」でした。 この質問に対する答えが見つかりました-TDD。 理想的な世界では、開発者はテストを通じてほとんどの機能を開発します。 その結果、メンテナンスと変更に便利な優れたコード設計に加えて、開発者が既存のコードを安心して変更できる一連のテストケースが得られます。



それは理想的な世界で起こります。 実際、テストを通じてすべての開発を実行できるとは限りません。 すべての開発がTDDを使用して実行される場合でも、開発中のシステムが顧客の開始時に適切に機能するとは言えません。



単体テストは環境に影響を与えません。データについてデータベースにアクセスするサービスをテストする必要がある場合、開発者はデータベースのスタブを作成します。 外部サービスにアクセスするサービスを確認する必要がある場合、開発者はこのサービスの操作をエミュレートするスタブを作成します。



次のステップは、システムの物理要素を仮想テスト環境に導入する構成および統合テストです-データベースサーバー、ハードウェアファイアウォール、およびサードパーティソフトウェア。 このようなテストの実装により、システムが環境と「正しく」相互作用すると言うことができます。 しかし、環境との「正しい」相互作用であっても、仕様で説明されているスクリプトに従って、最終的にシステムが期待どおりに動作することを保証しません。



私の実践が示すように、最も有用なテストは受け入れテストです。 受け入れテストとは、次のことを意味します。





このようなプラットフォーム(多くの場合、実行が難しい)を上げて、仕様シナリオに従ってすべてのテストケースをチェックすることに成功した場合、高い確率で、システムが期待どおりに機能し、結果としてエラーが含まれないと言うことができます。



エラーは確実に発生しますが、受け入れテストを実行すると、(ユニットおよび統合テストと比較して)エラーを検出する可能性が高くなります。



受け入れテストを自動化します



受け入れテストの自動化には、次の手順が含まれます。





受け入れテストのシナリオ



受け入れテストスクリプトを仕様のユースケーススクリプトとして記録します。 仕様は、機能、ユーザー、非機能、およびその他の要件に基づいてアナリストによって作成されます。



仕様を維持するには、 Atlassian ConfluenceBalsamiqモックアップと組み合わせて使用​​します。



Seleniumに基づいたテスト開発



テストを開発するために、次のことを可能にする独自のソリューションを作成しました。





新しいテストの開発は、テストされたページの説明-PageObjectとテストケースのステップの開発に帰着します。



受け入れテストを含むプロジェクトは次のようになります。





主なコンポーネント:





テストはステップで構成されます-ステップ()。 ステップはアクションを実行し、一部のステートメントが完了したことを確認できます。 以下はテストの例です。





テストコード:





ビデオはテストを示しています。





テスト中にエラーが発生した場合-認証に失敗した、レポートが開かなかったなど、ページのスクリーンショット、ブラウザー名、テスト名、およびhtmlエラーページがapp.configで指定されたディレクトリに保存されます。



AngularJSアプリケーションのすべての$ httpリクエストの完了を判断する



クライアントSPAアプリケーションは、$ httpサービスを使用してサーバーへの要求を実行します。 たとえば、「Daily Statement」レポートを開くと、サーバーへの非同期呼び出しが実行されます。 応答として、クライアントはサーバーからレポートデータを受信します。



テストケースでは、すべての要求が完了するまで待機できる必要があります。 たとえば、クライアントアプリケーションは、レポートにアクセスした後、サーバーからデータをダウンロードするのに時間がかかります。 データがロードされてページに表示されたら、このページをテストする必要があります。



すべての$ httpリクエストの完了を追跡するには、次のアプローチを使用します。





TeamCityで受け入れテストを実行する



継続的インテグレーションサーバーとして、TeamCityを使用します。



開発者がコードをリポジトリに送信した後、TeamCityはテストサイトを展開し、そのサイトで受け入れテストを実行します。 したがって、コードが変更されるたびに、プロジェクトがインストールされ、ゼロからテストされます。 このソリューションは非常に時間を節約するだけでなく、回帰テストについて考える必要がありません。



主な手順:





受け入れテストを書くのは誰ですか



受け入れテストは、スクリプトの実装が完了した開発者と、タスクデータ専用のテストエンジニアの両方が作成できます。



ソースコード



テストアプリケーションのソースコードはgithubで入手できます。



おわりに



受け入れテストの自動化が可能であり、必要です。 このアプローチの利点:





記事の最後で、半年以上続く大規模で長いプロジェクトでは、自動化された受け入れテストの存在が、製品の必要な品質を確保するための前提条件であると言います。



All Articles