公開日:28、2019
C# と NUnit を使用した Selenium と Appium のテストのベスト プラクティス
C# と NUnit を使用した Selenium および Appium テストの最も役立つベスト プラクティスについて読み、テストの実行と分析にかかる時間を節約します。
モバイルまたは Web テスト プロジェクトで自動化された Selenium および Appium テストの使用を検討するときに生じる主な疑問は何でしょうか。
「自動テストの作成とサポートにかかる労力を考えると、本当にそれほどの時間が節約できるのでしょうか?」
実際、自動テストのベストプラクティスに精通していない人は、自動テストのコストがユーザビリティを上回ってしまうのではないかと心配する傾向があります。実際、これは全く正当な指摘です。自動テストの設計、作成、そしてサポートは、大変な作業になるかもしれません。幸いなことに、他のソフトウェア開発と同様に、確立されたいくつかのパターンとプラクティスを活用することで、この作業はほぼ簡単なものに思えるかもしれません。これらのプラクティスに従うことで、コーディングにかかる時間が大幅に短縮され、テストの実行と分析に費やす時間が増えます。
この記事では、一般的に最も役立つベスト プラクティスと、C# と NUnit を使用した Selenium および Appium テストの具体的なベスト プラクティスをいくつか紹介します。
一般的なテスト設計のベストプラクティス
まず、あらゆる自動テストに適した、Selenium と Appium のテストのベスト プラクティスについて説明します。
AAA – 手配、行動、主張
「Arrange, Act, Assert」は一般的なユニットテストパターンであり、あらゆる自動テストタスクに非常に効果的に活用できます。基本的に、単一のテストはArrange、Act、Assertという3つの明確な部分で構成されるべきであるとされています。「Arrange」部分ではアプリケーションをテスト用に準備し、「Act」部分では単一のアクションを実行し、「Assert」部分ではそのアクションの結果を検証します。 コード例についてはここをクリックしてください.
「Act」部分のアクションはできるだけ少なくするのが良い習慣と考えられています。これは、単一のテストをシンプルに保つためです。また、単一のテストにはアサーションを1つだけ使用することを強くお勧めします。
ページオブジェクトパターン
UI自動テストのプラクティスが存在する一方で、ますます多くの有用なパターンが登場しています。パターンは確立されたプラクティスの集合として機能し、コードの明確さ、保守性、そして変更性を高めることで、コードを大幅に改善します。Page Objectsパターンでは、アプリケーションの主要な操作対象部分(例えばページ)がクラスのオブジェクトとして表現されます。これらのオブジェクトを操作する手段は、このクラスのメソッドです。SeleniumまたはAppiumドライバーへの呼び出しはすべて、Page Objectクラス内に隠蔽する必要があります。 コード例についてはここをクリックしてください.
このテストでは、ターゲットページを表す AuthorizationPage クラスと通信します。MakeSuccessfulAuthorization() はこのクラスのメソッドであり、認証を成功させます。
テストに名前を付ける
複雑なアプリケーションでは、自動テストの数が多くなる傾向があります。厳密な命名ポリシーがなければ、いずれテストを区別することが難しくなります。テストへのアクセスを容易にし、レポートを分かりやすくするためには、テスト命名ポリシーのいくつかのルールに従うことが非常に重要です。ベストプラクティスとしては、テスト名がテストで何を検証するかを明確に表すようにすることです。 例を見るにはここをクリックしてください.
待ち時間の管理
最初の自動テストを作成する前にまず知っておくべきことの一つは、待機時間の管理方法です。通常、新しいページはボタンを押してもすぐには読み込まれず、必ず時間がかかります。自動テストでは、次のページが完全に読み込まれる前に実行を一時停止する必要があることがよくあります。待機を実装する最悪の方法は、Thread.Sleep() メソッドを使用することです。このメソッドは、常に正確なミリ秒数だけテストを一時停止するためです。つまり、ページが既に読み込まれている場合でも、テストは一定時間一時停止されるため、Thread.Sleep() を呼び出すたびに数秒のロスが発生します。また、ページの読み込みに定義よりも長い時間がかかった場合はどうなるでしょうか?その場合、テストは失敗します。
幸いなことに、SeleniumとAppiumフレームワークは柔軟な待機時間を設定する機能を提供しています。実際には、待機時間を管理するには暗黙的待機と明示的待機の2つの方法があります。暗黙的待機は、SeleniumまたはAppiumテストドライバーの最大待機時間を設定します。待機タイマーが切れる前に要素が見つかった場合、タイムアウトは終了します。 例を見るにはここをクリックしてください.
独立性をテストする
これは自動テスト設計の基本原則の一つです。自動テストは互いに依存すべきではありません。なぜでしょうか?それは、一部のテストだけを実行したい場合や、テストの実行順序を保証できない場合があるからです。望ましい実行順序を維持するために、SetUpアノテーションとTearDownアノテーションを使用することをお勧めします。
NUnitのベストプラクティス
この部分では、NUnit に特有のベスト プラクティスを見ていきます。
テストのタイムアウトを設定する
通常、NUnitはテストを実行し、完了するまで待機します。ただし、場合によっては、いくつかの理由により、テストが無期限に実行されることがあります。これを防ぐには、 タイムアウト属性を使用する.
パラメータ化にTestCaseを使用する
多くの場合、1つのデータセットだけでテストを実行するだけでは不十分です。実際のワークフローで想定される(あるいは想定されない!)様々なパラメータでテストを実行するのが効果的です。ほぼすべての自動テストフレームワークは、テストをパラメータ化する何らかの方法を提供しています。 NUnitではTestCase属性です.
上記のテスト メソッドは 3 回実行され、戻り値は ExpectedResult と等しいと自動的にアサートされます。
パラメータ化にRange()とValues()を使用する
テストをパラメータ化するもう一つの方法は、Range() 属性と Values() 属性を使用することです。Values() 属性は、テストメソッドのパラメータの値のセットを指定するために使用されます。Range() 属性は、値の範囲と、その範囲を通過するステップを指定します。 コード例はこちら.
上記のテストメソッドは、次のパラメータを使用して 9 回実行されます。
パラメータ化テスト(1, 0.2) パラメータ化テスト(1, 0.4) パラメータ化テスト(1, 0.6) パラメータ化テスト(2, 0.2) パラメータ化テスト(2, 0.4) パラメータ化テスト(2, 0.6) パラメータ化テスト(3, 0.2) パラメータ化テスト(3, 0.4) パラメータ化テスト(3, 0.6)
並列実行
テストを並列実行すると非常に便利な場合があります。長いテストの場合、時間とコストを大幅に削減できます。 チームのフィードバックループを高速化します.
上記の例では、NUnit は異なるパラメータを持つ 2 つのテスト フィクスチャを同時に実行します。
C# NUnit を使用した Selenium と Appium のテスト
SeleniumとAppiumのテストでは、ドライバーが主なツールとなります。ドライバーはUI要素とそれらに対するインタラクションを見つけ出します。例えば、ブラウザでXPathを使って要素を見つけ、Seleniumドライバーを使ってクリックするといったことが可能です。 コード例はここにあります.
SeleniumとAppiumのテストはどちらも簡単に起動できます on SeeTestプラットフォーム – クラウドベースのプラットフォーム、その 開発およびWebおよびモバイルテストの自動化のために、多様なブラウザとモバイルデバイスを提供しています。プログラミング言語やテストフレームワークとしてJAVAとjUnit、あるいはC#とNUnitのどちらを使用していても、SeeTestを使えばSeleniumとAppiumがサポートするあらゆる言語で記述されたテストを実行できます。さらに、SeeTestはWebおよびモバイルテストの自動化を行うためのクラウドプラットフォームの中でもトップクラスにランクされています。
結論として、自動テストに関しては、最初から確立されたグッドプラクティスやパターンに従うことが非常に有益です。これにより、自動テストがチーム全体にとって有益になり、SeleniumとAppiumのテストのサポートと拡張が容易になります。
デジタルトランスフォーメーションは、今後の方向性を決定づける重要な要素です。ウェビナー「デジタルトランスフォーメーションが継続的テストにどのような影響を与えるか」でご確認ください。障壁を打ち破る: クラウドでのテストが重要な理由"