Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Selenium Serverを
サービス化した時の話
Dec/12/2016
Naoya Kojima
@jugemix
環境作りの前に
やりたいこと(背景・要求)と、ユースケースによる実現手法の整理
背景
 Selenium を使って実装した自動テストを自分の端末で実行していた
 画面を占有される為、他の作業をできなかった
 自動テスト実行イメージ
 時々遊んでいる(使われていない時間がある)端末が隣にあった
テストシステ
ム
Se...
ビジネス要求
 自分の端末で実行する場合は、自動テストが画面を占有しないようにしたい
 自動テストは従来通り自分の端末で実行するが、利用者不在の稼働中端末があ
れば、そこでも実行出来るようにしたい
 端末利用者が在席している場合は、自動テ...
機能要求
 自動テストは、バックグランドで実行されなければならない
 ブラウザを操作するSelenium をバックグランドで実行する必要がある
 バックグランドで実行
 サービス/デーモンとして実行すること
 課題
 バックグランド...
本資料の用語定義
 自動テスト
 テストにおけるブラウザの操作を、テストシステムへの入力として一定のアプローチに基づき定めたもの
 テストシステムへの入力
 今回はキーワード駆動アプローチを用いた為、テストステップファイルがそれに該当す...
ユースケース図
主なユースケース記述1
 テストシステムによる自動テストリクエストの送信
 テストシステムは、Hub役のSelenium Serverへ従来通りJSON Wire Protocolに従った
自動テストをHTTPリクエストとして送信する
 ...
主なユースケース記述2
 Selenium Grid Hub の起動・停止
 Selenium Server 搭載サーバは、起動時にGrid Hub をサービスとして起動する
 Selenium Server 搭載サーバは、停止時にGri...
主なユースケース記述3
 Selenium Grid Hub のリクエストの送・受信
 Hub役のSelenium Serverは、テストシステムからリクエストを受信する
 Hub役のSelenium Serverは、Node役のSele...
要求の実現イメージ
 自動テスト実行イメージ
テストシ
ステム
Selenium
Server
Hub
Selenium
Server
Node
chrome
driver
etc…
Google
Chrome
etc…
自動テスト
自分の端...
課題
 Selenium Serverの配布、設定が面倒
 テスト実行用端末へのNode役のSelenium Server
 開発用サーバ等へのHub役のSelenium Server
Selenium Gridをサービス化する
方法とポイント
Selenium Server Grid Hub & Node の
サービス化
 用意するもの
 Java Service Wrapper
https://wrapper.tanukisoftware.com/doc/japanese/in...
サービス化のポイント1
4種類のサービス化の方法のうち、今回は
selenium-server-standalone-x.x.x.jarファ
イルが既に提供されていることから、
WrapperJarAppヘルパークラスを使用する
方法を採用する...
サービス化のポイント2
wrapperクラスがselenium-server-standalone-x.x.x.jar実行する時
に必要なパラメータを指定する。
スペース区切りで1つずつパラメータを指定する。10個目のクォー
トで囲むパラメータ...
サービス化のポイント3
これは、Windows 7(64bit)「services.msc」で参照したインス
トール後のサービスの状態。
4行目「ログオン」列を見ると、1~3行目とユーザが異なってい
ることが分かる。次スライドで理由を説明する。
サービス化のポイント4
 自動テストで証跡としてスクリーンショットを撮る場合の注意点
 Internet Explorerは、ローカルシステムアカウントのサービスとして実行されない場
合、スクリーンショットが真っ黒になる為、下記の通り設定す...
サービス化のポイント5
selenium-server-standalone-x.x.x.jar
(Node役のSelenium)がJSON Wire Protcol
に基づくHTTPリクエストを送信するドライ
バは、binディレクトリに格納する
結果
 自分の端末で実行する場合も、自動テストが画面を占有しなくなった
 利用者不在の稼働中端末でも、自動テストを実行出来るようになった
 端末利用者が在席している場合も、自動テストがその仕事を邪魔しないようになっ
た
 Java Se...
Nächste SlideShare
Wird geladen in …5
×

20161212 selenium adventcalender

388 Aufrufe

Veröffentlicht am

for 20161212 selenium adventcalender

Veröffentlicht in: Ingenieurwesen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

20161212 selenium adventcalender

  1. 1. Selenium Serverを サービス化した時の話 Dec/12/2016 Naoya Kojima @jugemix
  2. 2. 環境作りの前に やりたいこと(背景・要求)と、ユースケースによる実現手法の整理
  3. 3. 背景  Selenium を使って実装した自動テストを自分の端末で実行していた  画面を占有される為、他の作業をできなかった  自動テスト実行イメージ  時々遊んでいる(使われていない時間がある)端末が隣にあった テストシステ ム Selenium Server chrome driver etc… Google Chrome etc… 自動テスト 自動テスト 自動テスト 自分の端末
  4. 4. ビジネス要求  自分の端末で実行する場合は、自動テストが画面を占有しないようにしたい  自動テストは従来通り自分の端末で実行するが、利用者不在の稼働中端末があ れば、そこでも実行出来るようにしたい  端末利用者が在席している場合は、自動テストがその仕事を邪魔しないようにした い
  5. 5. 機能要求  自動テストは、バックグランドで実行されなければならない  ブラウザを操作するSelenium をバックグランドで実行する必要がある  バックグランドで実行  サービス/デーモンとして実行すること  課題  バックグランドでSelenium を実行できるのか確認する  このとき、意図するブラウザで自動テストを実行できるのか確認する  複数端末で互いに独立したテストケースが並列実行されなければならない  Selenium Gridの環境下で自動テストを実行する必要がある  課題  同一(種類、バージョン)ブラウザを複数のSelenium Grid Nodeで並列実行できるか確認する
  6. 6. 本資料の用語定義  自動テスト  テストにおけるブラウザの操作を、テストシステムへの入力として一定のアプローチに基づき定めたもの  テストシステムへの入力  今回はキーワード駆動アプローチを用いた為、テストステップファイルがそれに該当する  構造化スクリプトを使用したアプローチの場合は、テストコード(Javaならメソッド)がそれに該当する(データ駆動アプローチであるかどうかは無 関係)  テストシステム  自動テストを一定のルールに基づき実行するプログラム  自動テストの識別や実行はJUnit、TestNG等のテストツールに委譲するよう設計するのが一般的である  自動テストをブラウザへのリクエストに変換する部分はSelenium に委譲する  自動テストが実行される仕組み(詳細は別スライドにて後日解説予定)  テストシステムは自動テストをselenium-java.jar等のライブラリを使用して実装する(一般的に、「Seleniumを使う」と 言った場合、これを指す)  テストシステムの実行時に自動テストはWebDriverの提供するJSON Wire Protocolに準拠するHTTPリクエストに変換される  JSON Wire Protocolに準拠したHTTPリクエストは、selenium-server-standalone-x.x.x.jarやchoromedriver.exe等の各種ド ライバが実装するRestful APIで受信できるようになる  この結果、各種ブラウザに対応したドライバによってブラウザの操作(自動テスト)が実行される
  7. 7. ユースケース図
  8. 8. 主なユースケース記述1  テストシステムによる自動テストリクエストの送信  テストシステムは、Hub役のSelenium Serverへ従来通りJSON Wire Protocolに従った 自動テストをHTTPリクエストとして送信する  参照  「本資料の用語定義」>「自動テストが実行される仕組み」
  9. 9. 主なユースケース記述2  Selenium Grid Hub の起動・停止  Selenium Server 搭載サーバは、起動時にGrid Hub をサービスとして起動する  Selenium Server 搭載サーバは、停止時にGrid Hubサービスを停止する  Selenium Grid Node の起動・停止  Selenium Server搭載クライアントは、起動時にGrid Nodeをサービスとして起動する  Node役のSelenium Serverは、サービス起動時に特定のブラウザの操作に特化したドライ バのセッションを生成する  課題と対策  テストが複数種類のブラウザに跨る場合、複数クライアントに同一ブラウザのインスタンスを生成しても、 Hub役はリクエストの転送しか行いません。つまり負荷分散をしないのでリクエストが偏る場合があります。 その偏りを防ぐ為に、ここではNode役にブラウザの種類を1:1で紐付けます。  Selenium Server搭載クライアントは、停止時にGrid Nodeサービスを停止する
  10. 10. 主なユースケース記述3  Selenium Grid Hub のリクエストの送・受信  Hub役のSelenium Serverは、テストシステムからリクエストを受信する  Hub役のSelenium Serverは、Node役のSelenium Serverにリクエストを送信する  Selenium Grid Node のリクエストの受信  Node役のSelenium Serverは、受信したリクエストを指定されたブラウザドライバに 送信する  ブラウザドライバは、受信したリクエストに基づきブラウザを操作する
  11. 11. 要求の実現イメージ  自動テスト実行イメージ テストシ ステム Selenium Server Hub Selenium Server Node chrome driver etc… Google Chrome etc… 自動テスト 自分の端末 開発用 サーバ等 テスト実行端末1 テスト実行端末2 テスト実行端末3 テスト実行端末… ドライバへのHTTPリクエストの送受信は バックグラウンドで実行される
  12. 12. 課題  Selenium Serverの配布、設定が面倒  テスト実行用端末へのNode役のSelenium Server  開発用サーバ等へのHub役のSelenium Server
  13. 13. Selenium Gridをサービス化する 方法とポイント
  14. 14. Selenium Server Grid Hub & Node の サービス化  用意するもの  Java Service Wrapper https://wrapper.tanukisoftware.com/doc/japanese/introduction.html  各種ドライバ  IEDriver , chrome driver , gecko driver  基本手順  実行環境に依存する為、次の躓きがちなポイントを抑える  ここでは下記公式の手順書を参照すれば分かることは割愛する  参考文献  https://wrapper.tanukisoftware.com/doc/japanese/integrate.html#method4  https://wrapper.tanukisoftware.com/doc/japanese/integrate-jar-win.html
  15. 15. サービス化のポイント1 4種類のサービス化の方法のうち、今回は selenium-server-standalone-x.x.x.jarファ イルが既に提供されていることから、 WrapperJarAppヘルパークラスを使用する 方法を採用する。 よってwrapper.confでは、wrapperクラス がselenium-serverは実行されるように指 定する
  16. 16. サービス化のポイント2 wrapperクラスがselenium-server-standalone-x.x.x.jar実行する時 に必要なパラメータを指定する。 スペース区切りで1つずつパラメータを指定する。10個目のクォー トで囲むパラメータは上記の通り指定する。
  17. 17. サービス化のポイント3 これは、Windows 7(64bit)「services.msc」で参照したインス トール後のサービスの状態。 4行目「ログオン」列を見ると、1~3行目とユーザが異なってい ることが分かる。次スライドで理由を説明する。
  18. 18. サービス化のポイント4  自動テストで証跡としてスクリーンショットを撮る場合の注意点  Internet Explorerは、ローカルシステムアカウントのサービスとして実行されない場 合、スクリーンショットが真っ黒になる為、下記の通り設定する。  一方、Chromeはローカルシステムアカウントの場合、自動テストが実行されないた め、以下の通り設定する。
  19. 19. サービス化のポイント5 selenium-server-standalone-x.x.x.jar (Node役のSelenium)がJSON Wire Protcol に基づくHTTPリクエストを送信するドライ バは、binディレクトリに格納する
  20. 20. 結果  自分の端末で実行する場合も、自動テストが画面を占有しなくなった  利用者不在の稼働中端末でも、自動テストを実行出来るようになった  端末利用者が在席している場合も、自動テストがその仕事を邪魔しないようになっ た  Java Service Wrapperのお陰でSelenium Serverをパッケージ化できた為、開発 用サーバ等やテスト実行端末へのSelenium Serverの配布、インストールが容易 になった Selenium Serverのサービス/デーモン化に挑戦してみよう!

×