Selenium Committer Day 2017に参加してきました
7月1日にヤフー株式会社で開催されたSelenium Committer Day 2017に参加してきました。 Seleniumのコアコミッターの方々の話を日本で聞ける貴重な機会。Seleniumの歴史から、Seleniumを実務を使う上でのTipsまで、充実の内容でした。
Seleniumの次に来るのは何か? - Jim Evans
Seleniumの過去と現在と未来について熱く語っていただきました。
Selenium 1.0から、JSON Wired Protocolを用いたwebdriverベースのSelenium 2.0になり、所謂クリスマスまでにリリースと言われたSelenium 3.0まで。 Firefox 48とそのextensionの規約変更に伴う開発の苦悩の話などの裏話も聞けました。 Selenium 4.0からはW3CのJSON wired protocolに準拠する形でのリリースになるので 、ブラウザベンダーだけでなく、Sauce LabsやBrowserstackなどの周辺ツールベンダーへの影響も大きいそうです。 Selenium 4.0のリリース動向も含めて、各社ベンダーの対応に注視していきたいです。
また、コアコミッターさんとは言え、ボランティアという立場であるということを心なしか強調しているように感じました。ユーザーとしては感謝の気持ちを忘れないようにしたいです。
SeleniumとBrowsermobを活用したE2Eテスト分析 - Marcus Merrell
A/Bテストなどの、Business Intelligenceな評価にも、QAとして積極的に関わっていきましょうというお話。 BIって確かにビジネスの意思決定などにおける重要度は大きい割に、機能試験などに比べ疎かになりがちな気がします。
実際のBIの評価の方法として、BrowserMob proxyを用いた評価を紹介していただきました。 BrowserMob proxyはselenium committerの方が開発しているようで、Seleniumとの親和性が非常に高いとのことです。 BIの評価は仕事でもやっていますが、自動試験という形での運用はできていないので、紹介していただいた、BrowserMob ProxyやWAATなどと併せて自動化を進めたいと思います。
コンテナを使ったテスト - Manoj Kumar
CICDに耐えうる試験インフラを、と言うことで、スケーラブルなテスト環境のためのDockerについてのお話。 従来のVMベースの仮想化技術と比較したDockerの優位性を説明した上で、Selenium, Selenium GridをDockerで構築する評価環境と評価の実施ということでDDD(Docker Driven Development)という言葉を用いて、その手順やツールなどを紹介していただきました。
実際に仕事でDockerは使っているものの、Reusableではありつつも、ScalableにはDockerを有効活用できていない気がしているので、Selenium Gridなども含めて取り入れきれていない技術もあるので、これを機会にいくつか取り入れてみようと思います。
Manoj-sanの話の中で紹介頂いた、各種ツールのGithubのリンクなどを貼り付けておきます。
Android実機向けAppium server + Selenium NodeなDockerfile https://github.com/appium/appium-docker-android
Android Emulator実機向けAppium server + Selenium NodeなDockerfile https://github.com/butomo1989/docker-android
Manojさん作成のDockerオーケストレーションツール。Selenium Node/Grid特化。 https://github.com/manoj9788/kubernetes-docker-selenium
Sauce Labsのダッシュボードっぽいダッシュボードをローカル構築できます。テストの実施画面が見えたりビデオ録画ができたりするよう。 https://github.com/zalando/zalenium
Goで再実装されたSelenium Hub。安定しているのが売りとのこと。 https://github.com/aerokube/selenoid
Manojさんの話した内容のようなBlogの記事 from Docker blog https://blog.docker.com/2016/04/cicd-with-docker-cloud/
コミッター + 会場 Q&Aパネルディスカッション
聞くのに夢中でメモできず。。省略
E2E自動テストの長期運用に耐えるための5つの手法 - Toshiya Komoda
内容はslideshareを参照ください。 debugログの改善なんかは地道な活動ですけど、すごく重要だなあと最近思います。テストツールのユーザビリティが疎かになった結果、職人にしか理解できないという状況が現在の職場でも起きています。 ユーザーフレンドリーなテストを作るのも、テストエンジニアの重要な仕事ですね。
あとinput topic identification with machine learningもすごいなあと思いました。Page Objectをメンテナンスするコストも排除できるし、ユーザビリティの評価にも使えたりと、使い方次第で広がりもありそうです。
Let's step into the OSS community - KazuCocoa
CookpadのKazuCocoaさんから、OSSのcommunityに参加して行きましょうという話。
Cookpadは会社としてもOSSでの活動を推進しているとのこと。弊社は結構長いプロセスを踏まないといけないので、そういった環境は単純に羨ましいです。 OSSでの積極的な活動によりRubyのコアコミッターをハイアリングしたりと、会社としてもそのメリットを享受できているようで、そういったメリットを自分の会社も理解した上で、もう少し積極的な姿勢に変わっていければと思っています。
私もサンフランシスコで働いたときの経験から、ソフトウェアという世界で生きる上でOSSで活動することは、自分のキャリアを豊かにする小さな意味はもちろん、世界を豊かにするという大きな意味も含めて重要な活動だと思っているので、今後はもう少しそういった活動に足を突っ込んでいきたいです。
継続的E2Eテスト - Tomotaka Asagi
www.slideshare.net
内容はslideshareを参照ください。 DeNAの方の内容と重複するような内容。きっと多くの人が、Seleniumを使ったE2Eテストを継続的に実施することが難しいと考えているから、このような内容の発表が多いのではと思います。 実際、Seleniumを使ったE2Eテストの継続的な運用を、最初から成功させているようなところは少ないのではと思います。SeleniumのE2Eテストの設計は、最初から100点満点なものを作るのは難しいと思うので、テストウェアを継続的に改善していける体制を整えることが、E2Eテストを継続的に運用するコツなのかなあと個人的には思っています。
Windows Application DriverでWindowsアプリも自動テスト^_^ - Kenichiro Ota
Windows Application Driverを実際に触った上での感触と感想を話していただきました。 実際の話して頂いた内容ではないですが、同じくOtaさんのWindows Application Driverを触ってみた際の記事がQiitaにあったので貼り付けておきます。 qiita.com
そもそもほとんどWindows環境でSeleniumを使ったことがないので、勉強がてらどこかで触ってみようかなと思います。
最後に
Seleniumを使うようになってから1年半くらい経ちますが、まだまだ、と言うか全然使い切れていないなあと、今回のイベントを通して思いました。 運用面で今のE2Eテストを見直していくのが最優先課題なので、まずはその辺りからやっつけていきたいと思います。
pytest向けのpluginを書く
以前紹介したpython pluginの作り方に続いて、今回はpytestのpluginの作り方を紹介したいと思います。
そもそもpytestって何
pytest is a mature full-featured Python testing tool that helps you write better programs.
公式サイトの引用ですが、pytestはpythonのtestのための便利ツールという扱い。
ツールという言葉が正しいか難しいところですが、単にtest runnerとは言えないくらいたくさんの機能を有しています。詳細は公式サイトを参照ください。
https://docs.pytest.org/en/latest/index.html
作るもの
今回はpytestの特徴の一つである、hookの機能を利用して、setup/call/teardownでdebugメッセージを表示する、簡単なpytest pluginを作ってみようと思います。
構成
hello_pytest/
├ hello_pytest/
│ ├ __init__.py
│ └ plugin.py
├ test/
│ ├ __init__.py
│ └ test_sample.py
└ setup.py
pluginの実態となるコードはplugin.pyで、今回は動作確認用としてtestコードも用意しています。
コード
一部のコードについて解説します。
まずは、setup.pyですが、前回紹介したpython pluginのsetup.pyからの主な変更点として、entry_pointsがあります。
pytestはentry_points pytest11からpytestの各種pluginを探しに行きます。なので、自身でpluginを定義する場合は、ここに自身のpytest pluginの情報を追加する必要があります。
続いてpluginの実態となる部分のコードになります。
今回は3つのhook関数pytest_runtest_setup, pytest_runtest_call, pytest_runtest_teardownを定義することで、それぞれのタイミングでdebugログをコンソールに出力します。
各種hookの仕様は以下を参考にしてみてください。
Writing plugins — pytest documentation
_pytest.hookspec — pytest documentation
動かしてみる
まずはインストール。setup.pyのあるディレクトリで、pip3 installを実行。
sirouma$ pip3 install ./
Processing /Users/sirouma/Workspace/hello_pytest
Installing collected packages: siro-uma.hello-pytest
Running setup.py install for siro-uma.hello-pytest ... done
Successfully installed siro-uma.hello-pytest-0.1.0
実際にpytestを使ってtestを走らせてみる。
- sオプションをつけて、stdout/stderr/stdin capturingを無効にしましょう。
sirouma$ py.test test/test_sample.py -s
================== test session starts ==================
platform darwin -- Python 3.5.3, pytest-3.1.2, py-1.4.34, pluggy-0.4.0
rootdir: /Users/sirouma/Workspace/hello_pytest, inifile:
plugins: siro-uma.hello-pytest-0.1.0
collected 1 itemstest/test_sample.py pytest_runtest_setup
pytest_runtest_call
.pytest_runtest_teardown
================== 1 passed in 0.02 seconds ==================
少し見づらいですが、pytest_runtest_setup, pytest_runtest_call, pytest_runtest_teardownがコンソールログに出力されているのがわかります。
まとめ
上記の通り、自作のpytest pluginができました。
その他にもたくさんのhookや、今回は特に触れていませんが、fixtureという便利な仕組みもあるので、ぜひ便利なpytest pluginを作ってみてください。
サンフランシスコ滞在中に便利だったアプリなど
東京に戻ってきて、サンフランシスコ中に使っていたiOSアプリを削除しているんですが、何を使っていたか備忘録として残しておきたいな、と思い、アプリ以外の情報も含めてここに残しておこうと思います。
目次
iOSアプリ
Uber
説明不要ですね。サンフランシスコでの移動では大変お世話になりました。
Lyft
こちらも説明不要。使用した限りではUberより心なしか安い気がする。たまたまなのかサンフランシスコ国際空港から市内に向かうときは、UberよりLyftの方がかなり安いです。1人でもシェアライドを選べば、BARTより安いことも結構多いです。
Transit
サンフランシスコ市内での公共交通機関を使う場合はこちらが便利。乗り換えの検索や、最寄りのバス停・メトロ駅の検索、バス・メトロ運行状況をリアルタイム検索できたりと、UIの使い勝手も含めて、かなり優秀アプリです。
Yelp
サンフランシスコでレストランを探すならこれ(賛否両論あるようですが)。レビューが高くても個人的にイマイチと感じることもあったので、Google Mapのレストラン評価と併せて参考程度にするのが良さそうです。
私は床屋の検索もYelpで行いました。
OpenTable
レストラン予約アプリ。サンフランシスコでも人気のお店は予約が必要です。Yelpでレストランを検索し、OpenTableで予約することもありました。おいしいご飯を並ばずに食べたい人は必須アプリ。
Meetup
サンフランシスコ内では毎日たくさんのMeetupが行われています。主にMeetupの検索で使っていました。
The Weather Network
天気予報アプリです。数ある天気予報アプリの中で、かなり予報精度が高いです(少なくともサンフランシスコに関しては)。天気の変わりやすいサンフランシスコでは必需品ですね。
Couchsurfing
私は英語力上達のため、サンフランシスコでCouchsurfingでホストをしていました。ゲストとの連絡は、Whatsappなどに移るまではこちらを利用していました。泊める・泊まる以外にも、一緒に飲みに行く人や一緒に観光する人を探すこともできます。
余談ですが、サンフランシスコ市内にあるCouchsurfingの本社では、毎月?無料で映画が上映されるイベントが開催されています。
Webサイト
FunCheap
サンフランシスコ近郊で行われるイベントが網羅されています。日本では見ないようなユニークなイベントも多いので、こちらで見つけたイベントに結構参加してました。
Eventbrite
こちらもイベントが検索できるWebサイト。こちらはiOSアプリもあるようですが、上のFunCheapの方が掲載イベントが多かったので、利用頻度は少なめでした。
Spirit Airlines
サンフランシスコではないですが、湾向かいのオークランド国際空港からSpirit Airlinesの飛行機が飛んでいます。LA行きなどは、直前でも結構安く買えたりします。
最後に
すでにサンフランシスコでの生活を忘れつつあるので、何か思い出したら情報を追加しようと思います。