CUITeによるASP.NETアプリケーションの自動テスト-機能



私はすぐに予約します-私はテスト自動化のプロのエンジニアではありません。 しかし、現時点ではこれが仕事の私の主な職業であることが判明したので、この分野の専門家からのコメントに特に喜んでいます。



この記事は、遭遇していない人のためのCUITeの簡単な説明、ASP.NETのフロントエンドでアプリケーションをテストするためのこのフレームワークの使用、および遭遇した問題です。



CUITeとは



codeplexプロジェクトの説明にあるように 、これはMicrosoftのUI Testingフレームワークの微妙なアドオンです。 説明には多くの利点がありますが、私にとっては2つになります:UIMapの代わりに-UIオブジェクトのオブジェクトリポジトリ(より美しい、定義)とコードの残りの部分)、およびさまざまな構文上の砂糖(すべてが明確です-UIオブジェクトで制御を取得して呼び出します)彼の方法)。

インストールは一般的です-インストーラを実行し、[次へ]-[次へ]-> [完了]を選択して、CUITe.dllプロジェクトに接続します-以上です。 相互作用の要素は、独自のCUITe Object Recorder™を使用して、または手動で見つけられます(後者が好ましい)。 ここでは録音の基本を説明しません-記事はそれについてではありません、基本に関する多くの情報がありますが、以下に説明する問題については言えません(興味があります-基本については別の投稿を書きます)。



だから、すべてがそれほどバラ色ではありません。





問題





アプリケーションがASP.NET 3.5上にあり、すべてのテストがInternet Exploe 8に合格したことをすぐに言わなければなりません。これにはいくつかの問題が関係しています。 同僚は、ASP.NET MVCプロジェクト(および一般的な最新の技術スタック)にはそのような問題はなかったと言います。



コントロールミス


各コントロール要素(コントロール)には、それと対話するためのメソッドがあります。たとえば、コンボボックスでは、値を選択できます。 残念ながら、エンジンは時々見逃します。 これは偶然に起こり、ケースの10%のどこかで発生します。40分のテストの終わり(少し後のテストの長さ)に起こると、大きな喜びが得られます。テスト全体をもう一度繰り返す必要があります。

解決策 -Playback.PlaybackSettings.DelayBetweenActionsパラメーターの値を増やします。 これは、別のアクションを実行する前にエンジンが待機する時間です。 デフォルトでは、100ミリ秒です。 120に増やしました。これにより、ミスの可能性が減る場合があります。



ページの読み込み中にアイテムを見つける前にテストが失敗する


ブレーキングのアプリケーションで発生する可能性があります。 UITestControlNotFoundException()をスローします。

解決策 -Playback.Wait(n)を使用します。nはミリ秒単位の時間です。 アプリケーションのユーザーが何らかのアクションを数秒間待つことに同意する場合、テストは同じ量だけ待つ必要があります。



エラースクリーンショットには常にスタートページがあります


デフォルトでは、CUITeはエラー時にアプリケーション画面を表示します。エレメントが見つからない場合、またはアサートが失敗した場合です。 有用性を過大評価することは困難です。 しかし、突然、すべてのスクリーンショットにエラーの場所が付属するのではなく、アプリケーションの開始ページが付属しました。 グーグルで私はmsdnに関する唯一のトピックを見つけましたが、そこで彼らは同様の問題について不平を言っていました。 ご覧のように、「解決策」は「そうあるべきです。ただあなたを駆け抜けて、間違ったスクリーンショットを貼るだけです」です。 作成されたすべてのスクリーンショット(LastRun)が保存されているフォルダーでは、必要なスクリーンショットがまだ見つかりませんでした(しかし、最初のページのスクリーンショットがさらにありました)ので、これは私の場合の問題の解決策ではなかったと思います。

解決策は、ありがとうございます。イベント(イベント)Playback.PlaybackErrorがあり、 UITestControl.Desktop.CaptureImage();



メソッドでハンドラーをブロードキャストしUITestControl.Desktop.CaptureImage();



。 その結果、次のような結果が得られます。

 string path = @"C:\ErrorScreens"; Image pic = UITestControl.Desktop.CaptureImage(); pic.Save(path + "\\" + "myerror__" + DateTime.Now.ToString("HH-mm-ss_ddd") + ".bmp");
      
      





その結果、ランダムな名前のフォルダーにパッケージ化された標準的なものではなく、すべてのスクリーンショットとカスタム名を持つErrorScreensフォルダーを取得します。このフォルダーには、エージェントの名前を持つ別のフォルダーがあります。 さらに、標準の実装では、スクリーンショットは同時にフォルダーに転送されるため、時間によるソートは機能しません(LastRunに登る必要があります)。



要素を見つける問題/要素に必要な方法の欠如


コンボボックスの検索に関する問題に気づきました。 単純なリスト( CUITe_HtmlList )の場合、アイテムを選択する方法はまったくありません。

解決策は、Microsoft.VisualStudio.TestTools.UITesting.HtmlControlsの要素を使用することです。このアドオンは、すべてCUITe_プレフィックスを持つHTML要素です。 たとえば、ドロップダウンリストで値を設定します。

 public void SetMyComboBoxValue(string value) { HtmlComboBox myComboBox = new HtmlComboBox(this); myComboBox.SearchProperties[HtmlComboBox.PropertyNames.Id]= "my-element-id"; myComboBox.SelectedItem = value; }
      
      







長いテストケースのハードデバッグ


39分でクラッシュするテストをデバッグすることは、すぐに問題の場所に移動することなく、別のアクティビティです。

解決策 -テスターが異なるページにデータを入力してから40分後にアプリケーションの特定の部分をチェックすることに慣れている場合は、より高速な方法を見つけてください。 テストケースを使用する準備をしておきます。 単体テストなどの自動テストは短くする必要があります。



エンジンの不安定性


IE 8と組み合わせたCUITeは、最も安定したオプションではありません。 時々、「ウィンドウハンドルが無効です」から落ちるか、8番目のロバのクラッシュが発生します。 後者は、後続のすべてのテストをクラッシュさせます。

現時点で解決策は見つかりませんでした。



結論と一般的な推奨事項





特にコード化されたUIとCUITeは特効薬ではありません。 コード化されたUIテストの利点は明らかですが、優れた手動テストを完全に置き換えることはできません。 もちろん、昨日壊れたものを正確に知るためにナイトビルドの自動テストをセットアップするのは本当にクールです。 しかし、環境が不安定な場合は、自動化の専門家をチームに連れて行くか、テストを念頭に置くことは簡単な作業ではないという事実に備えてください。



ソース:

1.Http//blogs.msdn.com/b/mathew_aniyan/archive/2009/08/10/configuring-playback-in-vstt-2010.aspx-Playback.PlaybackSettingsチンキのリスト。



All Articles