2014年12月4日木曜日

Seleniumを動かすための環境の構成管理について

この記事は、Selenium/Appium Advent Calendar 2014の4日目の記事です。
前日は a_suenami さんの「Selenium + Capybara + Turnip で取り組んでること(まだ途中)」でした。

ごあいさつ

こんにちは、株式会社Pro-SPIRE エンジニアリングサービス事業部の戸田です。
みなさんSeleniumしてますか!!!

Seleniumしてると たまにはまってしまうのが、
Webブラウザーのバージョンが上がったタイミングや
Selenium自身のバージョンが上がったタイミングで、
せっかく構築した環境が、まったく動かなくなってしまうことです。

Seleniumは構成ソフトウェアが比較的多い仕掛けで、
すべてが抽象化されたレイヤーで動くわけでもなく
さらにそれぞれが協調してバージョンアップするわけでもないので、
全体の構成の整合性には気をつけて運用した方が良いのかな~と個人的に思っています。

今回は、そのあたりの「構成管理」と言われるような部分で
自社以外の他社様環境を個別に維持するにあたり気をつけているところや
はまりどころについて、雑多に書いていこうと思います。

Webブラウザーの更新時期と、

Seleniumを更新「しなければならない」時期


次の図は、Webブラウザー、Seleniumの主要バージョンのリリース時期に加え、
さらにWebブラウザーとSeleniumの間に立つIEDriverServerとChromeDriverのリリース時期を
今年2014年の分でかんたんにまとめたものです。


みんな時期がバラバラでひっきりなしです!!!!!
こんな構成管理やってられっか!!!!!

と、短気を起こすほどのことはあまり無いので落ち着きましょう。
実際にこれらの更新すべてにヴィヴィッドに反応しなければ動作環境を維持できないかというと
そういうことは決して無いです。
むしろ、Seleniumのバージョンアップ時にデグレードなどの罠もたまにありますので、
あまり生真面目に追従すると泣きを見ることが多くなります。

数か月に1回、定期的に運用環境に載せる安定バージョンをみきわめていくくらいが
今のところは現実的な運用なのかな~という感じです。

ただ、こういうノリとは別に
絶対に更新しなければならない!!!という時期も当然あります。
直近1年間の中で印象的だったのは、
Google Chrome のバージョンが 31 から 32 に変わったタイミングです。

Google Chrome の安定バージョンは
ちょうどこのあたりでUI関連の仕組みがざっくりと刷新されたため、
非常に不具合の多い時期でした。
その影響か、このあたりの時期では
ChromeDriverのバージョンともうまく足並みを揃えていないと
なんだかSeleniumで動かしているときの動作があやしいな、という感じでした。

最近はどのWebブラウザーも
何らかの形で開発者向けプレビューを公開するようになりましたので、
そこまで意識を高めなくても、安定バージョンでどんな問題が起こり得るのか、
ある程度は事前につかんで、備えられるようになってきたかな、と思います。
まずは公式ブログあたりの更新チェックからやってみましょう!

Selenium使用環境での

Google Chromeのバージョン維持


皆さんご存知の通り、Google Chromeは安定版と言えど
自動的にどんどんバージョンアップしてしまうようになっています。
しかも、公式サイトで特定の古いバージョンを配布していないので(いつだって最新版だけ!)
上記のような、あまり頻繁にバージョンを更新したくない向きの環境に組み込むには
なかなかつらい感じです。

弊社でも一時期、けっこう悩んだのですが、
今のところはGoogle ChromeのベースであるChromiumを代用品として使っています。


古いバージョンでも必ず手に入りますし、自動更新もデフォルトでOFFになっています。
構成管理の観点からは、こっちの方がベターかな、と思っています。

なるべくGoogle Chromeとの差分を無くしたくて
がんばってChromiumのビルド環境を作っていた時期もあったのですが、
最近は公式CIサーバーが出力しているスナップショットを使えば十分かな、と妥協しています。


Jenkins + Selenium


もう1点 気をつけているのは、
Seleniumが他のソフトウェアに組み込まれている場合の構成管理です。

代表的なのは、Jenkins用のSeleniumプラグインです。
このプラグインのリリースタイミングはSelenium自身のバージョンアップと必ずしも同期しておらず、
全体として無計画な構成管理下では
Jenkinsのプロセスから最新のWebブラウザーを動かせなくなる場合が往々にしてあります。



例えば、この記事を書いている2014年12月3日現在での
Seleniumの最新バージョンは 2.44.0 ですが、
Seleniumプラグインの最新バージョン 2.4.1 の内部には
2.41.0 をダウンロードして使うこと!」という依存性の設定があり、
バージョンが揃っていない状態です。

このバージョン差異を無くさないと○○ブラウザーがCI環境で動作しない!
などの問題も生じたりします。
弊社ではこのような場合、
依存性の設定を書き換えて再構築したSeleniumプラグインをインストールする、
ということもやったりしています。

宣伝!!


弊社ではこんな構成管理まで含めて、
他社様の自動テスト環境の総合的なサポートができるように日々努力しております!

これから環境を作るんだけど自社だけでは心細いという方や、
ちょっと前に他社に環境を作ってもらったんだけど
うまく動かなくなってしまって放置しているという方は、
ぜひ弊社までご相談ください!

弊社 お問い合わせページはこちら



バトンタッチ


次は myhr さんです。よろしくお願いします。

0 件のコメント:

コメントを投稿