第2回Selenium勉強会に参加してきました③「ハイパフォーマンスSeleniumテスト@サイボウズ(仮)」

発表資料

www.slideshare.net

発表者

  • 宮田淳平さん
  • サイボウズ株式会社
  • 6年目
  • フロントからバックエンドまで
  • kintoneチームに所属

kintone

サーバサイド

  • Java
  • コード量は約23万行

クライアントサイド

  • Java Script
  • コード量は約33万行

テスト方法

  • Jenkins + PipelinePlugin
  • Gitでメインブランチにマージされる度にテスト実施
  • 36並列で実施
  • WebDriver + Selenium Grid

テストケース

  • 約800ケース
  • 受け入れ試験が中心

パフォーマンスの種類

  • 実行時間
  • 安定性
  • メンテナンス性

実行時間が長い!

  • 素早く繰り返したいのに…
    • 1日かかると、1回/日しかできない

短縮方法

  • 余計なテストは削除する
  • 並列化を行う

並列化の方法

  • ブラウザは1マシンにつき1つにすべき
    • フォーカスの関係で不安定になりがち

並列実行環境構築

  • クラウドサービス
    • 録画機能も付いたりする
    • ただし費用が…

VM

  • テンプレートを作って量産する
  • リソースが必要
  • メンテナンスも大変

docker

  • 高速にdeployできる
  • ただし環境が限られる

並列の理想実現のために

  • 理想は「全てのテスト実行時間÷1サーバのテスト実行時間=並列数」

テストの実行順序

  • 最後に時間の長いテストがあると、全体のテスト実行時間に関わる
  • 時間の長いテストは最初に
  • 長いテストケースは細かく分割する
  • 共通処理はまとめてテストする

初期データの作成

  • ブラウザ操作
    • 不安定
    • 遅い
  • dump
    • 速い
    • 変更があった場合のメンテナンスが大変(人間の目では分かりづらい)
  • API
    • そこそこ速い
    • 自チームでは実施中

安定性

安定性が低いと

  • バグじゃないのにテストが落ちる
    • テストの価値が…

安定性を上げるための施策

  • リトライ
    • 3回までリトライ実施
    • 該当箇所は不安定な場所なので、テスト後にも明示
  • 明示的なWait
    • 条件付きなWaitを行う

メンテナンス性

メンテナンス性が低いと

  • メンテナンスに時間を取られる
    • 手動の方が良いのでは…

メンテナンス性を上げるための施策

  • PageObjectパターンの利用
  • スクリーンショット&録画の実施
  • テストコードの品質も担保する
    • テストコードのレビュー実施
    • コーディング規約やDRY原則などの順守

Q&A

サーバ構成は?

開発者にどうやってテストを書かせたか

  • 一時、WebDriverがメンテ不能状態になった。
  • 『継続的デリバリー』の社内勉強会を実施し、CIの重要性を再認識

 

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

 
  •  QAなどを巻き込むことにした。
  • アジャイルテストの本の社内勉強会を実施し、Seleniumの必要性を再認識。

(おそらくこれ?)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

 

 

失敗した時のビデオ録画はどのようにして実施しているのか

  • Pythonのライブラリを使用し録画
  • テストに成功していたら自動的に削除

高速化出来るような環境は何か?

  • ブラウザはIE以外
  • OSは現在はWindowsだが、Linux+dockerを使うことで高速化が図れるのでは
  • 例えば、dockerで適時テストを行い、デイリーでWindowsとか