$30 off During Our Annual Pro Sale. View Details »

kintoneをとりまく自動テストたち / 20180305 Kintone's Automatic Test

kintoneをとりまく自動テストたち / 20180305 Kintone's Automatic Test

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

szkayeah

March 05, 2018
Tweet

More Decks by szkayeah

Other Decks in Programming

Transcript

  1. サイボウズ株式会社
    鈴木 亜耶 @szkayeah
    kintoneをとりまく自動テストたち
    Osaka Venture Today Meetup #3 テスト自動化
    新メンバーも
    大紹介!
    キントーン

    View Slide

  2. はなすひと
    鈴木 亜耶 @szkayeah
    • サイボウズのエンジニア
    • 2017年1月に中途入社(大阪拠点)
    • 好き:CI・自動化・モニタリング
    すず き あ や

    View Slide

  3. おしながき
    • kintoneってなーに?
    • kintoneの自動テスト
    • 新メンバー:APIパフォーマンステスト
    • どんな自動テスト?
    • 苦労したこと・工夫
    • まとめ

    View Slide

  4. kintoneってなーに?

    View Slide

  5. kintoneとは
    サイボウズの
    クラウド型の
    グループウェア

    View Slide

  6. View Slide

  7. 梅田で広告
    ありました!

    View Slide

  8. ブラウザ上で
    アプリを作る

    View Slide

  9. アプリに
    データ登録
    コメントで
    やりとり

    View Slide

  10. データを
    グラフ化

    View Slide

  11. kintoneの自動テスト

    View Slide

  12. kintoneのリリース
    1月 2月 3月 4月 5月
    開発期間 試験期間
    開発期間 試験期間
    開発期間 試験期間
    リリース
    リリース
    リリース

    View Slide

  13. kintoneのリリース
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    不具合改修
    品質向上

    View Slide

  14. kintoneのリリース
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    不具合改修
    品質向上
    スクラム

    View Slide

  15. kintoneのリリース
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    不具合改修
    品質向上
    CIそして
    自動テスト

    View Slide

  16. 自動テストのタイミング
    develop
    topic1
    topic2
    Local
    push
    merge
    merge

    View Slide

  17. 自動テストのタイミング
    develop
    topic1
    topic2
    Local
    push
    merge
    merge
    push後の
    トピックブランチで
    自動テスト

    View Slide

  18. 自動テストのタイミング
    develop
    topic1
    topic2
    Local
    push
    merge
    merge
    プルリクエストを
    マージ後の
    developで自動テスト

    View Slide

  19. 自動テストのタイミング
    • 自動でテスト実行
    • ローカルブランチからリモートへpushした時
    • プルリクエストをdevelopにマージした時
    • 手動でも実行可能
    • ひとつひとつJenkinsのジョブになっている
    • テストが通らないとプルリクエストをマージできない

    View Slide

  20. パイプライン

    View Slide

  21. kintoneと自動テスト
    • めっちゃ頼りになる
    高めの
    カバレッジ

    View Slide

  22. 自動テストの種類
    • ユニットテスト
    • APIテスト
    • ブラウザテスト
    • その他
    • 静的コード解析
    • コードフォーマットチェック etc..
    適宜実装
    ツールを
    活用

    View Slide

  23. 自動テストの種類
    • ユニットテスト
    • Java:JUnit, Mockito(モック用)
    • Java Script:Mocha, Sinon(モック・スタブ用)
    • APIテスト
    • Junitを使用したE2Eテスト
    • ブラウザテスト
    • Selenium

    View Slide

  24. APIテスト
    • APIにHTTPリクエストを送り、レスポンスを検証
    API
    JSON JSON

    View Slide

  25. 新メンバー:
    APIパフォーマンステスト

    View Slide

  26. APIパフォーマンステスト
    • 従来のAPIテストを性能検証に転用

    View Slide

  27. 従来の性能検証
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    品質向上
    性能検証
    脆弱性検証
    回帰試験
    移行試験

    View Slide

  28. 従来の性能検証
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    品質向上
    性能検証
    脆弱性検証
    回帰試験
    移行試験
    個々のタスクで
    検証することは
    あっても

    View Slide

  29. 従来の性能検証
    1月 2月
    開発期間 試験期間
    バックログ実装
    バックログ実装
    不具合改修
    品質向上
    性能検証
    脆弱性検証
    回帰試験
    移行試験
    必ず行う検証は
    QAさんに
    おまかせだった

    View Slide

  30. 従来の性能検証
    • 試験期間に実施
    • 負荷テスト
    • Scale Bench
    • ユーザー操作がシナリオ=ブラウザテストに近い

    View Slide

  31. 従来の性能検証
    • 試験期間に実施
    • 負荷テスト
    • Scale Bench
    • ユーザー操作がシナリオ=ブラウザテストに近い
    →より狭い範囲で開発期間にできる性能検証はないか?

    View Slide

  32. APIパフォーマンステスト
    • 従来のAPIテストを性能検証に転用
    • API単位で性能検証
    • not 負荷テスト but パフォーマンステスト
    • レスポンスタイムを見る
    • 毎日まわせる

    View Slide

  33. View Slide

  34. View Slide

  35. APIパフォーマンステスト
    測定
    開始
    測定
    終了
    測定結果
    記録
    劣化通知
    API
    JSON JSON
    APIテスト

    View Slide

  36. 苦労したこと・工夫
    • 測定結果の安定化・ゆらぎの考慮
    • 環境面
    • 測定方法
    • 性能劣化の検知ロジック

    View Slide

  37. 苦労したこと・工夫
    • 測定結果の安定化:環境面
    • 毎日VMを作り直す
    • VMは他用途では使用しない

    View Slide

  38. 苦労したこと・工夫
    • 測定結果の安定化:測定方法
    • テストを並列実行しない
    • ひとつのAPIで数十~数百回測定
    • ただし与えるinputはバラす(キャッシュに乗るのを避ける)
    • 中央値で集計
    • not平均値

    View Slide

  39. 「本日のAPI測定値」
    として
    複数回の測定結果を
    ひとつの点に集計

    View Slide

  40. 測定値の集計
    100
    150
    200
    250
    300
    350
    400

    View Slide

  41. 測定値の集計
    100
    150
    200
    250
    300
    350
    400
    中央値:100
    平均値:150
    外れ値につよい
    中央値を採用

    View Slide

  42. 苦労したこと・工夫
    • 測定結果の安定化:性能劣化の検知ロジック
    • どのAPIも過去の中央値より●%以上遅かったら通知!
    • 中央値が小さいほど外れやすくなる
    • Jenkins先生が毎日怒っている状態に

    • APIごとに閾値を設定
    • 今までの実施値より決めた

    View Slide

  43. 苦労したこと・工夫
    • 測定結果の安定化:性能劣化の検知ロジック
    • APIごとに閾値を設定したものの…
    • 「その日だけ偶然遅かった」がまあまあある
    • 翌日しれっと戻っている

    • 3日連続で閾値より遅かったら通知
    • 苦肉の策(検知の質は上がるが検知が遅くなる)

    View Slide

  44. まとめ

    View Slide

  45. まとめ
    • kintoneの自動テストは心強い
    • kintoneの自動テストにパフォーマンステストを追加した
    • 性能検証は奥深い

    View Slide

  46. ありがとうございました

    View Slide