Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

kintoneをとりまく自動テストたち

7,159 views

Published on

2018/03/05 Osaka Venture Today Meetup #3 テスト自動化の発表資料です。
kintoneの開発で行っている自動テストと、APIパフォーマンスを測定するテストを追加したよという内容です。

Published in: Engineering
  • Be the first to comment

kintoneをとりまく自動テストたち

  1. 1. サイボウズ株式会社 鈴木 亜耶 @szkayeah kintoneをとりまく自動テストたち Osaka Venture Today Meetup #3 テスト自動化 新メンバーも 大紹介! キントーン
  2. 2. はなすひと 鈴木 亜耶 @szkayeah • サイボウズのエンジニア • 2017年1月に中途入社(大阪拠点) • 好き:CI・自動化・モニタリング すず き あ や
  3. 3. おしながき • kintoneってなーに? • kintoneの自動テスト • 新メンバー:APIパフォーマンステスト • どんな自動テスト? • 苦労したこと・工夫 • まとめ
  4. 4. kintoneってなーに?
  5. 5. kintoneとは サイボウズの クラウド型の グループウェア
  6. 6. 梅田で広告 ありました!
  7. 7. ブラウザ上で アプリを作る
  8. 8. アプリに データ登録 コメントで やりとり
  9. 9. データを グラフ化
  10. 10. kintoneの自動テスト
  11. 11. kintoneのリリース 1月 2月 3月 4月 5月 開発期間 試験期間 開発期間 試験期間 開発期間 試験期間 リリース リリース リリース
  12. 12. kintoneのリリース 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 不具合改修 品質向上
  13. 13. kintoneのリリース 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 不具合改修 品質向上 スクラム
  14. 14. kintoneのリリース 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 不具合改修 品質向上 CIそして 自動テスト
  15. 15. 自動テストのタイミング develop topic1 topic2 Local push merge merge
  16. 16. 自動テストのタイミング develop topic1 topic2 Local push merge merge push後の トピックブランチで 自動テスト
  17. 17. 自動テストのタイミング develop topic1 topic2 Local push merge merge プルリクエストを マージ後の developで自動テスト
  18. 18. 自動テストのタイミング • 自動でテスト実行 • ローカルブランチからリモートへpushした時 • プルリクエストをdevelopにマージした時 • 手動でも実行可能 • ひとつひとつJenkinsのジョブになっている • テストが通らないとプルリクエストをマージできない
  19. 19. パイプライン
  20. 20. kintoneと自動テスト • めっちゃ頼りになる 高めの カバレッジ
  21. 21. 自動テストの種類 • ユニットテスト • APIテスト • ブラウザテスト • その他 • 静的コード解析 • コードフォーマットチェック etc.. 適宜実装 ツールを 活用
  22. 22. 自動テストの種類 • ユニットテスト • Java:JUnit, Mockito(モック用) • Java Script:Mocha, Sinon(モック・スタブ用) • APIテスト • Junitを使用したE2Eテスト • ブラウザテスト • Selenium
  23. 23. APIテスト • APIにHTTPリクエストを送り、レスポンスを検証 API JSON JSON
  24. 24. 新メンバー: APIパフォーマンステスト
  25. 25. APIパフォーマンステスト • 従来のAPIテストを性能検証に転用
  26. 26. 従来の性能検証 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 品質向上 性能検証 脆弱性検証 回帰試験 移行試験
  27. 27. 従来の性能検証 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 品質向上 性能検証 脆弱性検証 回帰試験 移行試験 個々のタスクで 検証することは あっても
  28. 28. 従来の性能検証 1月 2月 開発期間 試験期間 バックログ実装 バックログ実装 不具合改修 品質向上 性能検証 脆弱性検証 回帰試験 移行試験 必ず行う検証は QAさんに おまかせだった
  29. 29. 従来の性能検証 • 試験期間に実施 • 負荷テスト • Scale Bench • ユーザー操作がシナリオ=ブラウザテストに近い
  30. 30. 従来の性能検証 • 試験期間に実施 • 負荷テスト • Scale Bench • ユーザー操作がシナリオ=ブラウザテストに近い →より狭い範囲で開発期間にできる性能検証はないか?
  31. 31. APIパフォーマンステスト • 従来のAPIテストを性能検証に転用 • API単位で性能検証 • not 負荷テスト but パフォーマンステスト • レスポンスタイムを見る • 毎日まわせる
  32. 32. APIパフォーマンステスト 測定 開始 測定 終了 測定結果 記録 劣化通知 API JSON JSON APIテスト
  33. 33. 苦労したこと・工夫 • 測定結果の安定化・ゆらぎの考慮 • 環境面 • 測定方法 • 性能劣化の検知ロジック
  34. 34. 苦労したこと・工夫 • 測定結果の安定化:環境面 • 毎日VMを作り直す • VMは他用途では使用しない
  35. 35. 苦労したこと・工夫 • 測定結果の安定化:測定方法 • テストを並列実行しない • ひとつのAPIで数十~数百回測定 • ただし与えるinputはバラす(キャッシュに乗るのを避ける) • 中央値で集計 • not平均値
  36. 36. 「本日のAPI測定値」 として 複数回の測定結果を ひとつの点に集計
  37. 37. 測定値の集計 100 150 200 250 300 350 400
  38. 38. 測定値の集計 100 150 200 250 300 350 400 中央値:100 平均値:150 外れ値につよい 中央値を採用
  39. 39. 苦労したこと・工夫 • 測定結果の安定化:性能劣化の検知ロジック • どのAPIも過去の中央値より●%以上遅かったら通知! • 中央値が小さいほど外れやすくなる • Jenkins先生が毎日怒っている状態に ↓ • APIごとに閾値を設定 • 今までの実施値より決めた
  40. 40. 苦労したこと・工夫 • 測定結果の安定化:性能劣化の検知ロジック • APIごとに閾値を設定したものの… • 「その日だけ偶然遅かった」がまあまあある • 翌日しれっと戻っている ↓ • 3日連続で閾値より遅かったら通知 • 苦肉の策(検知の質は上がるが検知が遅くなる)
  41. 41. まとめ
  42. 42. まとめ • kintoneの自動テストは心強い • kintoneの自動テストにパフォーマンステストを追加した • 性能検証は奥深い
  43. 43. ありがとうございました

×