バックグラウンドでSeleniumテストを実行する興味深い方法

画像

最近、私たちのプロジェクトは、Seleniumテストをバックグラウンドで起動するという問題を急激に提起しました。 チームのルールの1つに、すべての自動テストに合格するまでコードをコミットしないと書かれています。 私たちの規模のプロジェクトでは、これは非常に現実的です。 プロジェクトは2〜3か月ごとに変更され、通常、すべてのテストを実行するのに5〜15分かかります。 私たちが働いているオペレーティングシステムはUbuntuで、誰もが2台のモニターを持っています(顧客に感謝します)。 したがって、テストを見て、何か他のことをするのが便利です。 たとえば、タスクを確認するか、新しいタスクを開始します。 主な問題は、コンピューターでテストに合格する間、何もできないことです。 つまり、Webドライバーの各アクションにより、ウィンドウがアクティブになります。 したがって、通常の音楽のみを聴くことができます。 せいぜい、ビデオを読んだり見たりしてください。 しかし、印刷すると、テストはほぼ完全に失敗します。 この問題のため、各チームメンバーは多くの貴重な時間を無駄にしました。 そこで、私はこの問題の扇動を始めました。



最初は、誰もがchromeからphantomJsに切り替えることを勧めました。 これを試しましたが、ある問題が別の問題に変わりました。 多くの要素がページ上にありません。 いくつかのマイナスに気付きました。それは遅く、リポジトリ内の多くのメモリを占有します。 一般に、phantomJsは要件を完全に満たしていませんでしたが、Chromeは最も人気のあるブラウザーであり、テストする必要がありました。



私の最後のプロジェクトでは、クロムドライバーも使用しましたが、その動作は大きく異なりました。 テストの開始時に、クロムが開き、そのウィンドウがアクティブになりましたが、別の場所でマウスを1回クリックするだけで十分で、その後は正常に動作を続けることができました。 ウィンドウを最小化することさえ可能でした。 テストは引き続き機能し、スクリーンショットが作成され、レポートが生成されました...新しいプロジェクトでドライバーの動作をこのように構成したかったのです。



多くのサイトでこの問題について質問しました。 彼は、Seleniumに直接コミットする人を含むさまざまな専門家に手紙を書きました。 実際、そのように答えてくれる人はいませんでした。 基本的に、phantomJsを使用してローカルジェンキンを構成する提案がありました...情報を収集すると、この動作はオペレーティングシステムに関連しているという結論に達しました。 つまり、Windowsでは、クロムは開始時にのみフォーカスを取得し、UbuntuおよびMac OSでは、クリックであるか要素の値を確認するかを問わず、すべてのアクションに対してフォーカスを取得します。 ドライバーを起動した後、ウィンドウがアクティブにならないようにドライバーをセットアップすることに成功したが、まだ達成できていない。 したがって、この問題の解決策がある場合は、必ず共有してください。多くの人があなたにとても感謝しています。



ある時点で、私は完全に絶望し、この問題を解決できないと考えました。 そして、偶然に、私は別のチームの友人と相談することにし、彼は彼らがvncserverを通してテストを実行していると言った。 彼はそれを設定する方法を私に説明し、それを使用する過程で、プロセスをより簡単、より速く、より便利にするいくつかの詳細を思いつきました。 これが今日私があなたと共有したい方法です。



トピックから少し外れて、私はツチジドのレポートを使用しているため、すべてのテストに合格した後、すべてのテストの美しい結果が表示されることをお知らせします。 これにより、テストを監視するプロセスが不要になります。 この手順は、Ubuntu用であり、特にmavenを使用するJavaプロジェクト用です。 Macで働く人は、このアプローチがうまくいくと思うので、構成できる人は誰でも、指示を共有して記事を完成させてください。



最初に手順全体を読んでから、セットアップを続行することをお勧めします。



1.まず、vncserverをインストールする必要があります。ターミナルでコマンドを入力します: sudo apt-get install vnc4server



2.サーバーを起動する必要があります。ディスプレイ番号の下で、7番を選択しました。サーバーを初めて起動すると、パスワードの入力を求められます。 パスワードを忘れないでください。将来接続するために必要になります。 入力:vncserver:7



3.サーバーは、このコマンドを使用して(2番目のステップを実行せずに)小さなディスプレイ解像度で起動できます。目的の解像度を設定できます。vncserver:7 -geometry 1920-1080



4.任意のvncviewerを使用してサーバーに接続できます。私はReal VNCを好みます。 ダウンロード、インストール...



5.ビューアーを開きます。 「新規接続の開始」ボタンを押して、行にサーバーを入力します: localhost:7 、および暗号化:行にVNCサーバーを選択させます



6.「接続」をクリックして、2項で指定したパスワードを入力します。



7.デスクトップを複製するウィンドウが開きます。 このウィンドウでターミナルを起動します。



8.私の場合、プロジェクトフォルダーに移動して、コマンド「 mvn clean install」を入力します。



9.テストは他のプログラムに干渉することなく実行されます。 ウィンドウを安全に最小化するか、vncビューアプログラムを閉じることもできます-これはテストの合格に影響しません。



追加の手順:

vncviewerを使用せずにテストを実行する場合は、素晴らしいコマンドがあります。最後のプロジェクトフォルダーに移動し(IDEターミナルでも可能)、次のように入力します。

xterm -display localhost:7 -e mvn clean install

この方法の欠点は、コンソールの出力が表示されず、プロセスの終了のみが表示されることです。 レポートがある場合、これは特に重要ではありません。



vncserverを停止する場合は、 vncserver -kill:7と入力します。

コンピューターを再起動した後、通常はステップ2または3を繰り返す必要があります。次に、ビューアーを介して、または上記のコマンドを使用してターミナルでテストを直接実行します。



既に理解しているように、この方法は理想とはほど遠いですが、間違いなく、以前に行ったように、単にテストを実行するよりもはるかに優れています。 テストは、vncサーバーがない場合と同じくらい安定して迅速に合格します。



今、私にとって最も便利なことは、サーバーを起動し、すぐにIDEコンソールから直接テストを開始することです。 また、vncviewerでIDEを直接開こうとしました(このため、最初に通常のウィンドウで閉じる必要があります)。 たとえば、標準的な方法で、一度に1つずつテストを実行および実行します。 これは、特に1つの長いテストを議論して何度も実行する場合にも非常に便利です。



この資料が皆さんの時間の節約に役立つことを願っています。 作業を妨げずにテストを実行する方法がまだある場合は、必ずテストを共有してください。 また、このアプローチを改善する方法についてアイデアがある場合。



UPD:偶然にも、このWebドライバーの動作の理由(または理由の1つ)を見つけました。 テストには非常に長い時間がかかり、すべてのステップでスクリーンショットを無効にすることにしました。 これで、テストがクラッシュする前に、スクリーンショットがスナップショットでのみ取得されます。 そして突然、テストはバックグラウンドで正常に合格し始めました。 ここで、各ステップのスクリーンショットを使用したテストにより、WebドライバーがMac OS XおよびWindowsのバックグラウンドで動作するのを妨げるのではないかと考えています。



All Articles