16
4

More than 5 years have passed since last update.

Selenium を活用してリリース時の本番動作確認を 80% 効率化した話

Last updated at Posted at 2017-12-11
1 / 16
  • 弊社の注力サービスである 楽楽精算 での Selenium の活用事例について紹介します
  • 取り組みの紹介が中心のため、今回はコードは出てきません
    • テックブログにて後日実装方法などの解説をする...かもしれません

課題


リリース時の本番動作確認に時間がかかる

  • リリース作業において、アプリケーションのデプロイ後に毎回、本番サーバに1台ずつログインして手動で動作確認を行っていた
    • しかも、確認手順や観点はほとんどリリース担当者まかせ
  • 1回のリリース作業につき数10クラスタのサーバ群(オンプレ)
  • 1人で確認すると2時間くらいかかる

それ Selenium で自動化できますよ


動作イメージ

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

スクリーンショット 2017-12-11 12.26.04.png


自動化した結果(効果)

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

工夫したこと


かんたんに実行できる

  • 動作確認対象のサーバ一覧ファイル(CSVファイル)を作って、コマンドを1つ実行するだけ

    • Selenium の知識がなくても実行できる
    # 実行例
    ./gradlew clean releaseCheck
    
  • いちど実行開始すれば終るまで手放しで良いので、作業者は別の作業に取り組める

  • サーバ一覧ファイルを分割して複数クライアントから実行すれば、かんたんに作業をスケールできる


サーバ一覧ファイルのイメージ

  • 誰でもつくれるCSVファイル
{リリースバージョン},{クラスタ名},{サーバ名},{ログインURL},{以降、テスト用パラメータ...}
8.3.3.0,cluster1,serverX,https://10.100.X.1/xxxxxxxx/,...
8.3.3.0,cluster2,serverY,https://10.100.X.2/xxxxxxxx/,...
8.3.3.0,cluster3,serverZ,https://10.100.X.3/xxxxxxxx/,...
 :

かんたんに実行結果を確認できる

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

サマリーログのイメージ

  • 実行結果の一覧性を重視
  • エクセルにコピペしやすいようタブ区切り
2017-12-11 13:52:46,033  START   cluster1  serverX
2017-12-11 13:53:03,296  FINISH  cluster1  serverX
2017-12-11 13:53:03,296  START   cluster2  serverY
2017-12-11 13:53:10,277  ERROR   cluster2  serverY  com.example.LoginTest  testLogin
2017-12-11 13:53:46,165  FINISH  cluster2  serverY
2017-12-11 13:53:46,165  START   cluster3  serverZ
2017-12-11 13:54:27,580  FINISH  cluster3  serverZ
 :

スタックトレースログのイメージ

  • エラーの原因を特定するために Selenium(Selenide) のスタックトレースを出力
2017-12-11 13:53:10,277  ERROR   cluster2  serverY  com.example.LoginTest
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: 'E2ETEST-MACHINE', 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.<init>(TopPage.java:13)
    at com.example.LoginPage.login(LoginPage.java:26)
    at com.example.LoginTest.testLogin(LoginTest.java:43)
      :

まとめ


まとめ

  • Selenium を活用できるのは開発時のリグレッションテストだけではない
  • 定量的な効果に加えて、定性的・副次的な効果も見逃せない
  • 新しい仕組みを作るの楽しいし、効果がでれば嬉しい!

おまけ

16
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
4