Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ありがとうございました