私が現在働いている会社は、ユーザーインターフェイスの統合テストにSeleniumを使用しています。Web UIの単体テストに何を使用し、どの程度効果的だと思いますか?
15 に答える
私はセレンの大ファンです。一部のコメントで言及されているように、「Web UI の単体テスト」と言うのは正確ではありません。ただし、Selenium は、UI でこの種の受け入れテストと健全性テストを実行するのに非常に便利であることがわかりました。
始めるための良い方法は、開発の一部として Selenium IDE を使用することです。つまり、開発中は IDE を開いて、開発時間を短縮するためにテストを書きます。(UI を手動で操作して、作業中のものをテストできるようにする代わりに、ボタンを押すだけで、Selenium IDE がそれを処理します。これは非常に時間の節約になります!)
私の主要なユース ケース シナリオのほとんどには、それらをバックアップするための Selenium RC テストがあります。xUnit フレームワークに沿った単体テストとは考えられませんが、非常に特定の機能を対象としたテストです。それらはすばやく記述でき (特に、ログインやテスト ケースのセットアップなどの一般的なメソッドを実装する場合)、すばやく実行でき、非常にタイトなフィードバック ループを提供します。その意味で、Selenium RC テストは単体テストに非常に似ています。
他のものと同様に、テスト ツール (Selenium など) を適切に学習するために努力すれば、その努力は報われると思います。あなたの会社はすでに Selenium を使用して UI テストを行っているとのことです。これは素晴らしい。それを操作します。Selenium が使いにくい、または混乱している場合は、そのまま使用してください。API を少し学べば、学習曲線はそれほど急勾配ではありません。
私が Web アプリに取り組んでいる場合、Selenium RC テストをバックアップせずに大量のコードを作成することはめったにありません。それがSeleniumの効果です。:) (うまくいけば、それはあなたの質問に答えるでしょう..)
私の職場では Watin を使用しています。私たちは .net ショップなので、このソリューションは非常に理にかなっています。実際には、Watir (元の Ruby 実装) から始めて、切り替えました。これまでのところ、それは私たちにとってかなり良い解決策でした
アプリケーションを適切に設計していれば、UI 内に大量のロジックが含まれることはありません。実際の作業を UI とは別のユニットに分けて、それらをテストする方がはるかに理にかなっています。
これを行うと、UI の唯一のコードはバックエンドを呼び出すコードになるため、バックエンドをテストするだけで十分です。
私は過去に (私の仕事で) NUnit ASP を使用したことがあります。UI の単体テストを行う場合は、NUnit ASP 以外のものを使用することを強くお勧めします。作業が面倒で、UI が少し変更された後でも (テストの対象が実際には変更されていなくても)、テストが無効になる (修正が必要になる) 傾向があります。
QuickTestProを使用しています。これまでのところ効果的ですが、ブラウザの選択は限られています。最も優れた部分は、ブラウザのアクティビティを記録し、それをスクリプト可能な一連のステップに変換する機能です。優れた.Netアドインもあるので、テストのさまざまな段階で実行する必要のある検証コードがある場合は、アセンブリにメソッドを記述して、スクリプトから呼び出すことができます。
Visual Studio 2008TesterEditionを使用します。
長所: ユーザーインタラクションのキャプチャが非常に得意
Ajax呼び出しをキャプチャします
ユーザー入力をデータベース、XML、またはCSVファイルにマッピングするのは非常に簡単です
キャプチャされたテストは、より詳細に制御するためにC#に変換できます
同じテストを負荷テストとコードカバレッジに使用できます
短所:
VS2008 Tester Editionは、通常のDeveloper Editionとは別のSKUです。つまり、追加コストが発生します。
あなたはマイクロソフトにアレルギーがあるかもしれません;-)
私たちはプロジェクトで非常に効果的に使用しましたが、テストを最新の状態に保つために多くの努力が必要であり、画面を変更するたびにテストを再記録する必要がある場合があります
私たちは、テストを短くシャープに保つ傾向があり、1回のテストで10分間クリックする価値を記録する代わりに、1つのことを実行して外に出ます。
標準のUIテストタイプがいくつかあります。
メニューテスト:特定のユーザー(またはユーザータイプ/ロール)としてログインし、必要なすべてのメニュー項目が使用可能であることを確認します
検証テスト:ページを開き、データを入力せずに[保存]をクリックして、すべての検証警告が表示されることを確認します。必須フィールドを一度に1つずつ入力し、警告メッセージが表示されるはずのときに消えることを確認します。
検索テスト:データベースまたはデータファイルのデータを使用して検索し、検索によって正しいデータが返されることを確認します
データ入力テスト:データファイルから新しいレコードを作成し、データベースをクリーンアップして、テストを複数回実行できるようにします
UIテストにはかなりの時間がかかりますが、新しいバージョンをリリースする前に数百のテストに合格したときに得られる快適さは貴重です。
私たちはしばらくの間JSunitを使って単体テストを行ってきました...それはあなたが話しているのと同じ種類のテストではないかもしれませんが、JavaScriptが期待どおりに機能することを確認するのに最適です。
これをブラウザーで実行し、Antビルドで設定して、多数のプラットフォーム上の多数のブラウザーに対してリモートで自動的に実行することができます(これにより、コードがクロスブラウザーであることを確認し、ロジックが正しいことを確認できます。 )。
セレンに取って代わるとは思いませんが、それをうまく補完します。
Selenium Coreを使用していますが、管理がはるかに優れたSeleniumRCに徐々に切り替えています。継続的インテグレーションサーバーでテストを実行するために多くのカスタムコードを記述しました。そのうちのいくつかは、より高速に実行するために並列スイートで実行されます。
Seleniumは、テストごとにブラウザーを再起動しているように見えます(これを行わないように設定できますが、実行するとメモリの問題が発生します)。これはFirefoxでは遅くなる可能性がありますが、IEではそれほど悪くはありません(Bill GatesのOS統合に感謝しています)。
Seleniumは統合テスト用であり、単体テスト用ではありません。微妙ですが重要な違いです。私が通常目にする使用法は、ビルドの健全性チェックです。つまり、ログインするテスト、(たとえば)ストーリーを送信するテスト、コメントを作成するテストなどがあります。
アイデアは、サイトが壊れていることをユーザーに発見させるのではなく、展開前にシステム全体が連携して機能しているかどうかをテストすることです。
私はかなり良いWATIRを使用しました。Ruby であり、インタラクティブ性、利用可能な要素、およびソース コードの解析をテストできるため、気に入りました。しばらく使っていませんが、良くなったと思います。
Firefox と Safari に移植されていると思われますが、それはしばらく前から行われています。
Selenium Gridは、Web テストを複数のマシンで並行して実行できるため、Web テスト プロセスを高速化できます。
私は主にCubicTestを使用します。これは、テストをグラフィカルに定義できる Eclipse プラグインです。watir や selenium を含むいくつかのライブラリを介してテストをエクスポート/実行できます。ただし、ほとんどの人は Selenium ランナーを使用しています。
完全な開示: 私は開発者の 1 人なので、ちょっと偏見があります :)
ここで詳しく見てみましょう:cubictest.openqa.org
-アーレンド
Canoo Web Testをチェックしてください。これはオープン ソースであり、ANT フレームワーク上に構築されています。
ソフトウェア QA の大学院コースでしばらく使用しましたが、非常に強力なテスト ツールのようです。
現在、Web UI をテストするための Java 中心のアプローチであるSilk4Jを使用しています。Flash、Flex、AIR、Silver Light、Win32、HTML、およびその他のいくつかのアプリケーションをテストできます。
Silk4J は Win32 アプリを制御できるため、ブラウザー ダイアログを直接制御できます。これは、Selenium が制御できるものよりも一歩進んでおり、特にダウンロード プロンプトに役立ちます。
モリブデンは Selenium の上に構築されており、いくつかの追加機能があります。