Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

kintoneってなーに?

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

梅田で広告 ありました!

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

データを グラフ化

Slide 11

Slide 11 text

kintoneの自動テスト

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

パイプライン

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

苦労したこと・工夫 • 測定結果の安定化:性能劣化の検知ロジック • APIごとに閾値を設定したものの… • 「その日だけ偶然遅かった」がまあまあある • 翌日しれっと戻っている ↓ • 3日連続で閾値より遅かったら通知 • 苦肉の策(検知の質は上がるが検知が遅くなる)

Slide 44

Slide 44 text

まとめ

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

ありがとうございました