WebおよびモバイルアプリケーションをテストするためのArachnidium自家製フレームワーク。 パート2.設定について少し

こんにちは!



以前の記事で残した調査の結果によると、 「WebおよびモバイルアプリケーションをテストするためのArachnidium自家製フレームワーク。 大多数が賛成」に賛成票を投じました。 さて、ショーは続けなければなりません!



この小さな出版物では、記述されたフレームワークのフレームワーク内で、Webアプリケーション/クロスプラットフォームのクロスブラウザーテストの設定を準備し、モバイルアプリケーションを起動してテストを実行できる開発について説明します。 特定の理由で機能があいまいに知覚される可能性があることをすぐに言わなければなりません。 それらのいくつかは非常に客観的であり、記事の最後に名前を付けます。



この投稿は、何らかの形で自分のドキュメントの構成の章を視覚化します( これまではgithubのwikiページです )。これは近い将来更新されます。 ここでは、セットアップの準備の簡単な例と、SeleniumおよびAppiumを使用したテスト自動化のコンテキストでのフォーマットの使用方法の例を示します。 この記事には、興味深いビジュアルなビデオが含まれています。



計画:

「どのような問題を解決しようとしましたか?」

-シンプルなデモ

-クロスブラウザテストのデモンストレーション

-不足しているもの

-発表



今後のソリューションはすべてgithubにあります。



行こう!



どのような問題を解決しようとしましたか?



そもそも、TestCompleteなどのツールを使用した重要なバックグラウンドがあります。 以下は、このソリューションが自動テストを使用してプロジェクトインスタンスを設定することを提案する方法の例です。



画像



これは、変数を設定するスイートエディターです。 彼は提供しています

1.変数を作成する

2.そのタイプを示します

3.デフォルト値を指定する

4.ローカル値を示します

5.必要に応じて、説明を追加します。



3および4について詳しくお読みください。ローカル値がない場合はデフォルト値が適用され、そうでない場合はローカル値と重複します。



これらの設定の欠点は何ですか? はい、一般的にはそうではありません。 しかし。 まれではないことは言うまでもありませんが、1つの(それを呼び出しましょう)テストセッションで、同じ変数のいくつかの異なる値(純粋に論理的に)が必要な場合がありました。 フレームワークの特性のために(私はそれが悪いとは言いません)、テストをパラメーター化する通常の手段は常に助けにはなりませんでした。 そのような場合、変数のリスト、およびそれに応じてローカル値とデフォルト値が大きくなり始めました。



テストがJavaで記述されている現在のプロジェクトでは、別の状況が見られます。

変数のセットは同じであり、それらの値の非常に多くがあります。

そして、これはすべて* .propertiesファイルに書き込まれます

* .propertiesファイルには、同じパラメーターの値の1から数セットが含まれています。 パラメータのセットはファイルごとに同じで、値は部分的に同じです(大部分)。

私の意見では-便利で冗長ではありません!



だから。 私の意見では、上記の例には、OOPが継承/オーバーラップと呼ぶものがありません。



画像



私は、 ブラックジャックと次のプロパティを使用してチューニングする独自の方法を考え出すために、運用時間を決定しました。



書式:

a)形式はデータのグループ化を許可する必要があり、グループに含まれる要素の数は制限されません

b)形式は保存されたデータを単純に典型化できるべきである

c)形式は冗長であってはなりません。 読みやすく、直感的で、編集しやすいものでなければなりません...





* .propertiesが何らかの形で消えました。 XML(ポイントイン 、私見-形式は冗長です)。 JSONに決めました。 しかし、おそらくこれは最も興味深い瞬間ではありません。



組織:

a)すべてのデフォルト値が最大限に記録される共通設定の存在の可能性を提供する必要がある

b)必須パラメーターが特定の(デフォルトではない)設定で指定されていない場合に、デフォルト値の重複とそれらの使用の両方の可能性を提供する必要があります。





Java:

a)全体として構成にアクセスできるようにする1つまたは複数のクラスを作成します。 私の意見では、最良のオプションはグループと目的のパラメーターを指定することです。 マップする方法。

b)必要に応じて、データへのアクセスを容易にし、格納されたデータをより複雑なオブジェクトに変換するために、その子孫を使用できる1つ以上の抽象クラスを作成します。





最終的に、以下に示すものを手に入れました。 これは、説明されている問題の解決策の1つであることを知っています。 同様の問題が解決されたプロジェクトは間違いなくいっぱいです。 確かに誰かが何かもっとうまくやった。



この機能はさまざまなプロジェクトのニーズに使用できることを提案しました。 ただし、デフォルトでは、さまざまなブラウザ、モバイルアプリケーションの起動、タイムアウトの設定、さまざまなWebdriverオプションなどがあります。



だから...



簡単なデモンストレーション



このビデオでは、非常に簡単な例を使用して、設定を準備する方法とコラボレーションの原理を示します。







自分自身から小さな発言をしたい...型のリストを拡張することができます。 列挙型の拡張が便利です( ENUM 、それを呼び出しましょう)。 他のクラスのオブジェクトでは、すべてが複雑です。 これと、デフォルト以外のコンストラクターのさまざまなオプションの存在。 これは、たとえば、Springのようなフレームワークを使用する必要があり、Beanを操作する必要があるという前提です...



以下は、もう少し複雑な状況の例です。







クロスブラウザーテストデモ



ショータイム! 以下に、機能を使用してブラウザーを起動する例を示します(同じことがモバイルアプリケーションでも機能します)。 今回はすべてが非常に簡単です。 ユーザーがGoogle検索エンジンに入り、何かを入力します-たとえば、Hello World Wikipedia-私がビルドの前で行ったテストのコピーアンドペーストで、Googleが何かを見つけたように見えます。 行こう!







同様の例がgithubで利用可能です:

1

2

3



不足しているもの。



客観的には、現時点では、Webdriverの起動以外に、この機能の周りに十分なインフラストラクチャがありません。 どういう意味ですか?



このような設定は、Mavenプロファイルで使用できます。 Mavenプラグインが必要です。

このような設定は、継続的な統合システムで使用できます-少なくとも、必要に応じてJenkins、TeamCity、その他です。

このような設定は、テストを実行するフレームワークで使用できます(たとえば、パラメーター化など)。 したがって、JUnit、TestNG、JBehave、およびCucumber JVMのプラグイン、リスナー、ランナー、その他の斑点があると便利です。

いくつかのルール、フォーマット、およびグループと設定の準備された名前があるので、事前定義されたグループとパラメーター値を構成し、独自のインターフェイスを作成できる人間工学に基づいたインターフェイスを備えたIDEのプラグイン(EclipceやIDEaなど)があると非常に便利です。



このすべては、私がする時間を持っていませんでした。 フレームワークを開発することが理にかなっている場合は、フレームワークを作成できます。 この機能をどこでどのように開発するかを知るために、私は批判と提案を喜んでいます。 ishamsおよびpullリクエストと同様に。



発表



素材が退屈に見えないことを願っています。 がんばりました。

さらに2つのトピックを作成したいと思います。 以下では、WebdriverおよびPage / Screenオブジェクトに関連する非常に興味深い(キラー)機能について説明します。 後-チルアウト、私はいくつかの実験的な開発を実証しますが、また興味深い。



All Articles