Slide 1

Slide 1 text

Selenium でさらに 60% の作業効率化した話 ビアバッシュなにわ at 2017.12.12 カワナミユウ@FC2

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Advent Calendar に書きました! ● https://qiita.com/advent-calendar/2017/rakus

Slide 7

Slide 7 text

新しい課題

Slide 8

Slide 8 text

その後も増え続けるクラスタ (15→30)

Slide 9

Slide 9 text

リリース作業の概要 : : : : ①インフラエンジニアが対象サーバ群に リリースモジュールをデプロイ (並列) ②開発エンジニアが対象サーバ群に 動作確認テストを実行 (直列) デプロイ完了 を連絡 確認完了 を連絡 ③もう片系にも同じ 作業を実施する 直列なのでサーバ数に 比例して実行時間が増 加する

Slide 10

Slide 10 text

動作確認テストを 並列実行したい

Slide 11

Slide 11 text

どうやって実現する? ● テストコード(JUnit)で頑張る? ● テストランナー(Gradle)で頑張る? ● Any other ideas?

Slide 12

Slide 12 text

それ xargs でできるよ

Slide 13

Slide 13 text

xargs ● 標準入力を読み込み、それを引数として指定したコマンドを実行する ○ http://itpro.nikkeibp.co.jp/article/COLUMN/20140331/547143/ 例:レビュー済みのブランチを削除する 例:連番を振ったファイルを作成する $ seq 1 5 | xargs -Ino touch server_list.no.csv $ ls servers/ server_list.1.csv server_list.2.csv server_list.3.csv $ git branch | grep REVIEW/ | xargs git branch -D

Slide 14

Slide 14 text

xargs で並列処理 ● 「-P {MAXPROCS}」「--max-procs={MAXPROCS}」オプションで指定したプロセス数 まで同時実行する # 最大3並列で処理する $ cat target_list | xargs -P 3 -Itarget ./heavey_process.sh target # すべて成功:0、1つでも失敗:1 $ echo $?

Slide 15

Slide 15 text

結果

Slide 16

Slide 16 text

実行コマンド ● Before(直列) ● After(並列) $ ./gradlew clean releaseCheck -Plist=/tmp/server_list.all.csv # テスト対象のサーバ一覧ファイルを分割して用意する $ ls servers/ server_list.1.csv server_list.2.csv server_list.3.csv # 3並列で実行する $ find servers/ -type f | \ xargs -P 3 -Ifile ./gradlew clean releaseCheck -Plist=file テスト対象のサーバ一覧 ファイルのパス

Slide 17

Slide 17 text

実行時間 ● 直列の場合と比べて、実行時間を3分の1程度まで短縮できた ● 並列数を増やすとクライアントPC(ブラウザが起動するPC)のCPU負荷がボトル ネックになり、実行時間の減少はゆるやかに

Slide 18

Slide 18 text

ジョブ化してさらに実行がかんたんに!

Slide 19

Slide 19 text

(おまけ)Advent Calendar に書きます! ● https://qiita.com/advent-calendar/2017/selenium