背景 アジャイル モデルは広く使用されており、テストは特に重要です。新しいバージョンは頻繁にリリースする必要があるため、そのバージョンに新しいバグが導入されないように、テストケースをより頻繁に実行する必要があります。 多くのリソースを消費するテスト結果の分析を含め、完全なテストプロセスに必要な時間とリソースは無視できません。品質を確保するために、いかにしてより短時間で完全かつ包括的なテストを提供するかは、私たちが解決したい問題であり、アジャイル開発をスムーズに進めるための鍵でもあります。 Jenkins は無人テスト プロセスを実装します。開発が完了し、テスト環境が正常に展開されると、下流のテスト タスクがすぐに実行されます。 Jenkins の適用により、ある程度の人的資源を節約でき、Docker テクノロジによりコンテナの急速な拡張を実現できるため、多くの設備リソースと時間を節約し、テストを迅速に完了できます。これは、図 1 に示すように、Jenkins パイプライン (コード パイプライン管理) の非常に重要な部分です。 図 1. Jenkins パイプライン 本記事では主にDocker Swarmのクラスタ機能とSelenium Gridのスクリプト配信機能を利用して、動的に拡張可能なSelenium自動化スクリプト実行環境を構築する方法を紹介します。 Selenium 自動化スクリプト実行環境として実機を使用する場合と比較して、この環境を使用すると、さまざまなブラウザの種類やバージョンの管理など、実行環境のメンテナンス作業を大幅に削減できます。また、スクリプト実行環境への材料投資を大幅に削減し、さまざまなリソースを節約することもできます。 Docker Swarm クラスターの構築 Swarmの紹介 Swarm は、Docker クラスターを管理するために Docker によって公式に提供されているクラスター管理ツールです。複数の Docker ホストを 1 つに抽象化し、これらの Docker ホスト上のさまざまな Docker リソースを統一されたエントリを通じて管理します。 Swarm は単なるスケジューラとルーターです。Swarm 自体はコンテナを実行しません。Swarm は Docker クライアントから送信されたリクエストを受け入れ、コンテナを実行する適切なノードをスケジュールするだけです。つまり、Swarm が何らかの理由でクラッシュした場合でも、クラスター内のノードは通常どおり実行され続けます。Swarm が実行を再開すると、クラスター情報を収集して再構築します。 Swarm は Kubernetes に似ていますが、Kubernetes よりも軽量で機能も少ないです。 環境の準備 Docker Swarm クラスター環境を構築するために、例では 2 台のマシンを用意しました。 1 つのノードはマネージャー ノードとしてもワーカー ノードとしても機能し、もう 1 つのノードはワーカー ノードとしてのみ機能します。 ここでは、2 台のマシンの IP 情報が次のとおりであると想定します。
バージョン 1.12.0 以降、Docker Engine には Docker Swarm がネイティブに統合されているため、各マシンに Docker がインストールされていれば、Docker Swarm を直接使用できます。ここでは、Docker のインストールについては詳しく説明しません。インストールについては、公式の Docker Swarm ドキュメントに従ってください。インストールが完了したら、各マシンで Docker サービスを開始します。 ヒント: 注: マシンのファイアウォールをオフにすることをお勧めします。そうしないと、Swarm クラスターのネットワーク接続に問題が発生する可能性があります。 ファイアウォールをシャットダウンするコマンド: systemctl stop firewalld.service ファイアウォールの起動コマンドを無効にする: systemctl enable firewalld.service ステップ 1. 管理ノードを作成します。 マシン M1 をマネージャー ノードとして使用し、このマシン上でコマンドを実行してクラスター環境を初期化します。コマンドは次のとおりです。 sudo docker swarm init --advertise-addr 10.13.181.1 このコマンドを実行すると、他のワーカーがこのクラスターに参加できるように、クラスターに参加するためのトークンが返されます。 リスト 1. クラスター参加トークンの例: 次のようにコードをコピーします。 docker swarm に参加 --token SWMTKN-1-5p3kzxhsvlqonst5wr02hdo185kcpdajcu9omy4z5dpmlsyrzj- 3phtv1qkfdly2kchzxh0h1xft 10.13.181.1:2377 クラスターに再度参加するためのコマンドを取得する場合は、次のコマンドを実行します。 sudo docker swarm join-token ワーカー 2. マシン M1 をワーカー ノードとしてクラスターに追加します。 リスト 1 のコマンドをマネージャー ノード マシンで実行して、マシン M1 をワーカーとして Swarm クラスターに追加します。 3. 別のマシン M2 をワーカー ノードとしてクラスターに追加します。 上記のリスト 1 のコマンドをマシン M2 で実行して、M2 がクラスターに参加できるようにします。 4. 次のコマンドを実行してクラスター ネットワークを作成します。 sudo docker ネットワーク作成 -d オーバーレイ seleniumnet ここで、seleniumnet は作成したクラスター ネットワークの名前です。 5. 新しく作成したクラスター ネットワーク上に Selenium Grid サービスを作成します。 a. Selenium Grid Hub サービスを作成します。クラスター ネットワーク seleniumnet に基づいて、ポート 4444 をクラスターのポート 4444 にマップし、タイムアウト時間を 120 秒に設定します。リスト 2 に示すように、タイムアウト時間を増減できます。 リスト 2. Selenium Grid Hub サービスの作成: 次のようにコードをコピーします。 sudo docker サービス作成 --name selenium-hub --network seleniumnet -p 4444:4444 -e GRID_TIMEOUT=120 セレン/ハブ b. Selenium Grid Firefox ノード サービスを作成し、新しく作成したハブ サービスに接続します。リスト3に示すように。 リスト 3. Selenium Grid Firefox ノード サービスの作成: sudo dockerサービス作成\ --name ノード-firefox \ --レプリカ 5 \ -p 7900:5900 \ --network セレンネット \ -e HUB_PORT_4444_TCP_ADDR=セレンハブ\ -e ハブポート4444_TCP_PORT=4444 \ selenium/node-firefox-debug bash -c 'SE_OPTS="-host $HOSTNAME" /opt/bin/entry_point.sh' パラメータの説明: -p:7900:5900 は、Docker の内部 VNC5900 をホストのポート 7900 に公開し、ユーザーが VNC を介して外部から Docker の内部実行を監視できるようにします。 c. Selenium Grid Chrome Node サービスを作成し、新しく作成した Hub サービスに接続します。リスト4に示すように。 リスト 4. ノード サービスを作成する: sudo dockerサービス作成\ --name ノード-chrome \ --レプリカ 3 \ -p 7901:5900 \ --network セレンネット \ -e HUB_PORT_4444_TCP_ADDR=セレンハブ\ -e ハブポート4444_TCP_PORT=4444 \ selenium/node-chrome-debug bash -c 'SE_OPTS="-host $HOSTNAME" /opt/bin/entry_point.sh' パラメータの説明: -p:7901:5900 は、Docker の内部 VNC5900 をホストのポート 7901 に公開し、ユーザーが VNC を介して外部から Docker の内部実行を監視できるようにします。 6. 環境が正常に構築されたかどうかを確認します。マシン M1 で次のコマンドを実行して、各サービスが正常に開始されているかどうかを確認します。 sudo docker サービス ls Selenium Hub、Firefox ノード、Chrome ノードがすべて正常に起動されていることがわかります。図 2 に示すように、Firefox のノード レプリカの数は 5 で、Chrome のノード レプリカの数は 3 です。 図2. Dockerサービスリスト 次に、任意のマシンの IP とポート 4444 を介して Selenium Hub URL を開き、起動した Firefox ノードと Chrome ノードが Hub ノードに正常にマウントされているかどうかを確認します (図 3 を参照)。 ハブ URL: 10.13.181.1:4444 図3. Selenium Hubインターフェース 図 3 からわかるように、5 つの Firefox ノードと 3 つの Chrome ノードがハブ ノードに正常にマウントされています。つまり、Selenium 自動テスト スクリプトを実行するために、Docker Swarm 環境で 5 つの Firefox ノードと 3 つの Chrome ノードが利用できるようになります。 拡張方法 ユーザーは、スクリプトの実行回数に応じていつでも動的にノードの数を拡張し、自動化されたスクリプトの実行効率を向上させることができます。たとえば、Firefox ブラウザを実行できるコンテナが 10 個必要な場合、対応するコマンドは次のようになります。 sudo docker サービススケール node-firefox=10 Docker Swarm で Jenkins ジョブを実行する ユーザーが Docker Swarm で Jenkins ジョブを実行する場合、Jenkins で追加の構成を行う必要はありません。代わりに、対応する自動化スクリプトで Selenium Hub を呼び出して、WebDriver をリモートで呼び出す必要があります。これは、Docker コンテナで Selenium スクリプトを実行することを実装します。 この記事のシナリオを例にとると、以下に示すように、自動化スクリプトでリモート Selenium Hub を呼び出すだけで済みます。http://9.111.139.104:4444/wd/hub Selenium Grid で自動化スクリプトを実行する 基本概念 Selenium Grid は分散自動テストに使用されます。つまり、Selenium コードのセットをさまざまな環境で実行できます。これにより、Docker によって提供されるさまざまなコンテナーでアプリケーションを簡単に実行できます。 Selenium Grid には 2 つの概念があります。
つまり、Selenium Grid にはメイン ハブが 1 つしか存在できませんが、ローカルまたはリモートで複数のブランチ ノードを確立できます。テスト スクリプトはメイン ハブを指し、メイン ハブはテスト ケースをローカル/リモート ノードに割り当てます。 実装 Selenium Grid で自動化スクリプトを実行するには、まずリモート ドライバー オブジェクトを作成する必要があります。これは、図 4 のソース コードを使用して実現できます。スクリーンショットの対応する入力パラメーター selhub は、Selenium ハブの URL です: http://9.111.139.104:4444/wd/hub 図4. 自動化スクリプトコードのスクリーンショット 上記のドライバーを呼び出すことで、Docker コンテナ内で自動化スクリプトを実行できます。 結論 継続的インテグレーションテストでは、Docker Swarm にテストをデプロイし、Selenium Grid を通じてテストを実行するためのノードを自動的に割り当てることで、テストの効率を向上させ、テストの範囲を広げ、迅速な反復で提供される製品の品質をより確実にし、テストリソースを節約できます。 オリジナルリンク: https://www.ibm.com/developerw ... .html 以下もご興味があるかもしれません:
|
<<: mysql order by in の文字順序の詳細な説明 (推奨)
>>: Windows 7 の mysql6.x で中国語の文字化けが発生する問題に対する完璧な解決策
閉鎖サービス nginx 停止systemctl 停止 nginx起動するサービス nginx 開始...
1. プラグインを追加し、pomファイルの下に次の設定を追加します。 <!-- mybatis...
以前にインストールしたmariadbを削除する1. rpm -qa | grep mariadb を...
nginx をリバース プロキシとして使用する場合、リクエストをそのまま次のサービスに転送するだけで...
今日、フラッシュ広告のコードを書いていたとき、フラッシュに付属するリンクはポップアップ広告と間違われ...
目次実装のアイデアアカウント パスワードを保存する方法は 3 つあります。機能インターフェースアカウ...
html <div class="totop" v-show="...
MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...
導入react-i18next は、 i18nextをベースにした強力な国際化フレームワークです。 ...
目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...
Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...
どの要素でもスクロールできるようにしながら、スクロールバーを非表示にするにはどうすればよいでしょうか...
Web ページを作成する過程では、<h1>、<h2>、<h3> ...
1. SSHリモート管理SSH はセキュア チャネル プロトコルであり、主にリモート ログイン、リモ...
1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...