Slide 1

Slide 1 text

Selenium で 80% 以上の 稼働削減を実現した話 ビアバッシュなにわ at 2017.05.09 カワナミユウ@FC2

Slide 2

Slide 2 text

こんばんわ、PHPSeleniumおじさんです。

Slide 3

Slide 3 text

課題

Slide 4

Slide 4 text

リリース時の本番動作確認に時間がかかる ● マイナーリリースやメジャーリリースで、アプリケーションのデプロイ後に 毎回、本番サーバに1台ずつログインして手動で動作確認を行っていた ○ しかも、確認手順や観点はほとんど作業者まかせ ● 1回のリリース作業につき30台弱のサーバ ○ リリース日程は2日に分かれており1回のリリース作業で約 15クラスタ(約30サーバ)が バージョンアップされる ● 1人で確認すると2時間くらいかかる ○ 合計(リリース作業2回)で4時間くらい

Slide 5

Slide 5 text

それ Selenium で自動化できますよ (注)自動化するまでには色々な経緯がありました。

Slide 6

Slide 6 text

動作イメージ サーバ一覧を舐めて順番に 動作確認テストを実行する

Slide 7

Slide 7 text

確認項目リスト

Slide 8

Slide 8 text

自動化した結果(効果) ● (定量的)動作確認にかかる時間が、1リリース作業あたり約20分に ○ 83%(2時間→20分)の稼働削減 ○ これからずっと83%オフ ○ この時間はさらに短縮可能(※後述) ● (定性的)リリース担当者からめっちゃ楽になったという声 ● (副次的)テストコード化するにあたり、確認手順や観点が整理された

Slide 9

Slide 9 text

工夫したこと

Slide 10

Slide 10 text

かんたんに実行できる ● 動作確認対象のサーバ一覧ファイル(CSVファイル)を作って、コマンドを 1つ実行するだけ ○ Seleniumの知識がなくても実行できる ● さらに、サーバ一覧ファイルを分割して並列に実行すれば、かんたんに作業 をスケールできる ● しかも、いちど実行すれば終るまで手放しで良いので、作業者は別の作業に 取り組める

Slide 11

Slide 11 text

サーバ一覧ファイルのイメージ ● 誰でもつくれるCSVファイル v8.2.4,cluster1,server1,https://192.168.0.1/xxxxxxxxxxx/ v8.2.4,cluster1,server2,https://192.168.0.2/xxxxxxxxxxx/ v8.2.4,cluster2,server3,https://192.168.0.3/xxxxxxxxxxx/ v8.2.4,cluster2,server4,https://192.168.0.4/xxxxxxxxxxx/ リリース バージョン ログインURL クラスタ名とサーバ名 (ログ出力用の自由文字列)

Slide 12

Slide 12 text

かんたんに実行結果を確認できる ● 実行結果を2つのファイルに分けて出力 ● リリース担当者が結果を確認するためのサマリーログ ● エラー発生時に開発者が確認するためのスタックトレースログ

Slide 13

Slide 13 text

サマリーログのイメージ ● 実行結果の一覧性を重視 2017-04-18 13:52:46,033 START cluster1 server1 https://192.168.0.1/xxxxxxxxxxx/ 2017-04-18 13:53:03,296 FINISH cluster1 server1 https://192.168.0.1/xxxxxxxxxxx/ 2017-04-18 13:53:03,296 START cluster1 server2 https://192.168.0.2/xxxxxxxxxxx/ 2017-04-18 13:53:10,277 ERROR cluster1 server2 https://192.168.0.2/xxxxxxxxxxx/ com.example.LoginTest testLogin 2017-04-18 13:53:46,165 FINISH cluster1 server2 https://192.168.0.2/xxxxxxxxxxx/ 2017-04-18 13:53:46,165 START cluster2 server3 https://192.168.0.3/xxxxxxxxxxx/ 2017-04-18 13:54:27,580 FINISH cluster2 server4 https://192.168.0.3/xxxxxxxxxxx/ 2017-04-18 13:54:27,581 START cluster2 server4 https://192.168.0.4/xxxxxxxxxxx/ 2017-04-18 13:54:47,138 FINISH cluster2 server4 https://192.168.0.4/xxxxxxxxxxx/ エラーが発生した場合は テストクラス名と テストメソッド名を出力

Slide 14

Slide 14 text

スタックトレースログのイメージ ● エラーの原因を特定するためにスタックトレースを出力 2017-04-18 13:53:10,280 ERROR cluster1 server2 https://192.168.0.2/xxxxxxxxxxx/ com.example.LoginTest testLogin org.openqa.selenium.TimeoutException: Expected condition failed: waiting for frame to be available: main (tried for 4 second(s) with 100 MILLISECONDS interval) Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700' System info: host: 'M-KITAOKA-LT', ip: '192.168.71.151', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_25' Driver info: driver.version: unknown at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:296) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:265) at com.codeborne.selenide.SelenideTargetLocator.frame(SelenideTargetLocator.java:32) at com.example.TopPage.(TopPage.java:13) at com.example.LoginPage.login(LoginPage.java:26) at com.example.LoginTest.testLogin(LoginTest.java:43) : :

Slide 15

Slide 15 text

FIN.