Upgrade to Pro — share decks privately, control downloads, hide ads and more …

食べログのソフトウェアテスト自動化デザインパターン(ダイジェスト版)

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for ハゲワシ ハゲワシ
February 24, 2022

 食べログのソフトウェアテスト自動化デザインパターン(ダイジェスト版)

食べログのソフトウェアテスト自動化デザインパターン(ダイジェスト版)

Avatar for ハゲワシ

ハゲワシ

February 24, 2022
Tweet

More Decks by ハゲワシ

Other Decks in Programming

Transcript

  1. © Kakaku.com Inc. All Rights Reserved. 1 ⾷べログのソフトウェアテスト⾃動化 デザインパターン (ダイジェスト版)

    株式会社カカクコム ⾷べログシステム本部 技術部 Developer Productivityチーム hagevvashi 2022年04⽉21-22⽇
  2. © Kakaku.com Inc. All Rights Reserved. 2 ⽬次 1. ⾷べログのソフトウェアテスト⾃動化

    デザインパターン概要 2. ⾷べログのテスト⾃動化基盤 3. パターン詳細 4. 参考⽂献・クレジット
  3. © Kakaku.com Inc. All Rights Reserved. 3 ⽬次 1. ⾷べログのソフトウェアテスト⾃動化

    デザインパターン概要 2. ⾷べログのテスト⾃動化基盤 3. パターン詳細 4. 参考⽂献・クレジット
  4. © Kakaku.com Inc. All Rights Reserved. 4 ⾷べログのソフトウェアテスト⾃動化デザインパターン概要 ゆもつよ メソッド

    テスト観点表のセルで 並列実⾏ 選べる テスト実⾏単位 Page Object 賢すぎない Page Object データ駆動 テスト JSONデータ駆動 テスト Component Object Browser Automation API Wrapper StepにWait処理を 書かない テスト⾃動化で アクセシビリティ向上 アトミックな デプロイとテストの実⾏ ログインユーザのプール メンテナビリティ ファースト ⽣産性の実証 ACL Proxy Black Hole Proxy 振り分け プロキシ Credential付与 プロキシ 実⾏環境単位で レポート出⼒ テスト成功率の しきい値95% メッセージ キューデプロイ ログアウトタグ テスト要求分析パターン ⾔語・ツール選定のパターン フレームワーク設計パターン アーキテクチャ設計パターン パイプライン設計パターン テストケース⾃動化パターン インフラ設計パターン 課題 テスト⾃動化の⽬的の 早期のフィードバック、 テストの再利⽤の品質が 低い パターン適⽤後の結果 ・コード修正後20分以内の フィードバック ・1⽇10回実⾏して成功率90% ・要件追従が2、3⽇でできる 凡例 パターン パターン ⾷べログオリジナル デザインパターン 引⽤ デザインパターン 適⽤順序 A B
  5. © Kakaku.com Inc. All Rights Reserved. 5 ⽬次 1. ⾷べログのソフトウェアテスト⾃動化

    デザインパターン概要 2. ⾷べログのテスト⾃動化基盤 3. パターン詳細 4. 参考⽂献・クレジット
  6. © Kakaku.com Inc. All Rights Reserved. 7 ⾷べログのテスト⾃動化基盤2 プロダクト SCM

    メッセージ キュー ⾃動 デプロイ 要求 テスト ⾃動化基盤 ⾃動デプロイ マネージャ ⾃動 テスト 実⾏要求 デプロイ 要求 待ち受け 認証プロキシ テスト環境 ⾃動 デプロイ 実⾏ ⾃動 テスト 実⾏ Internal Network プロジェクト ソースコード 変更 ※1 ※2 ※3 ※4
  7. © Kakaku.com Inc. All Rights Reserved. 8 ⾷べログのテスト⾃動化基盤3 テスト ランナー

    ブラウザ操作 ⾃動化 ツール ブラウザ リクエスト 振り分け Proxy 認証情報 付与 Proxy 外部ドメインへの リクエスト (広告・計測 etc) 認証 プロキシ 認証情報 付与済み テスト環境への リクエスト Feature Step Page Object テスト観点表 テスト 環境 ⾃動テスト 実⾏要求 SET テスト⾃動化基盤 Chrome™ Microsoft Edge ※5
  8. © Kakaku.com Inc. All Rights Reserved. 9 ⽬次 1. ⾷べログのソフトウェアテスト⾃動化

    デザインパターン概要 2. ⾷べログのテスト⾃動化基盤 3. パターン詳細 4. 参考⽂献・クレジット
  9. © Kakaku.com Inc. All Rights Reserved. 10 パターン概要1: ⼿動テストと同じくらいフレキシブルなテスト実⾏ Feature

    foo @AAA Scenario xxxx Given xxxx When xxxx Then xxxx @BBB Scenario xxxx Given xxxx When xxxx Then xxxx @CCC Scenario xxxx Given xxxx When xxxx Then xxxx Feature bar @AAA Scenario xxxx Given xxxx When xxxx Then xxxx @BBB Scenario xxxx Given xxxx When xxxx Then xxxx @CCC Scenario xxxx Given xxxx When xxxx Then xxxx job job job job job ゆもつよメソッド 選べるテスト実⾏単位 テスト観点表のセルで並列実⾏ deploy test ユースケース 凡例 テスト条件 シナリオ テスト観点表 CucumberのFeatureファイル (テストスクリプト) ・テストの実⾏単位をユースケース、テスト条件でフレキシブルに選択できる ・テスト観点表のセルで並列実⾏することで、10分以内にテストが完了する タグ
  10. © Kakaku.com Inc. All Rights Reserved. 11 パターン概要2: 容易なテスト実装、変更に強いフレームワーク設計 Feature

    Step World Page Object Component Object 責務: ◦ページが受け付ける ブラウザ操作 責務: ◦テスト⼿順を実⾏コードに変換 ✖テスト⼿順と振る舞い ✖ページが受け付けるブラウザ操作 ✖UIパーツが受け付けるブラウザ操作 ✖ライブラリ依存分の集約 責務: ◦UIパーツが受け付ける ブラウザ操作 責務: ◦ライブラリ依存部分の集約 責務: ◦テスト⼿順と振る舞い Step の責務からページやUIパーツ、ライブラリ依存の責務を別のオブジェクトに分割
  11. © Kakaku.com Inc. All Rights Reserved. 12 パターン概要3: 安定したテストのためのテストケース⾃動化設計 JSONデータ駆動テスト

    StepにWait処理を書かない ログアウトタグ When 都道府県を<都道府県>に設定して検索 Examples: | 都道府県 | | 東京都 | ⁝ When ジャンルを<ジャンル>に設定して検索 Examples: | ジャンル | | 和⾷ | 異なるテスト⼊⼒毎に、 別のテスト⼿順を⽤意 When 検索条件を<検索条件>に設定して検索 Examples: | 検索条件 | | ʼ{ “都道府県”: “東京都” }ʼ | | ʻ{ “ジャンル”: “和⾷” }ʼ | After Before Scenario Outline: ネット予約する Given ログイン状態である When ネット予約する Then 予約の条件が<期待結果>である And ログアウトする Before After Before After JSONデータによって異なるテスト ⼊⼒のテスト⼿順を共通化 Wait処理の実装忘れを防ぎ、テストの 安定性を向上 Featureに事後条件を書かずに済み、 テストの⼿順が⾒やすくなる When(“xxxx”, async function() { const page = new RestaurantPage(); await this.driver.wait(/* 要素1を待つ */); page.menu.doSomething(); await this.driver.wait(/* 要素2を待つ */); }); When(“xxxx”, async function() { const page = await this.getPage(“レストラ ンページ”); await page.menu.doSomething(); }); Wait処理を忘れると、ブラウザがクラッ シュしたりする 勝⼿に要素の表⽰を待ってくれる @logout Scenario Outline: ネット予約する Given ログイン状態である When ネット予約する Then 予約の条件が<期待結果>である 全部のシナリオでログアウトさせたい わけではない
  12. © Kakaku.com Inc. All Rights Reserved. 13 パターン概要4: 柔軟なネットワーク設定を可能にするインフラ設計 ブラウザ

    リクエスト 振り分け Proxy 認証情報 付与 Proxy 外部ドメインへの リクエスト (広告・計測 etc) 認証 プロキシ 認証情報 付与済み テスト環境への リクエスト テスト 環境 Chrome™ Microsoft Edge 課題: ⾃動テストからプロキシの例外設定・認証情報の 設定ができない 本来やりたかったこと: ブラウザの設定で、リクエストの振り分けとプロキシ の認証情報の付与 解決策: browsermob-proxyなどでプロキシサーバを⽴て、 リクエストの振り分け・認証情報の付与を⾏う 結果: 社内のSaasから社内のテスト環境にテストでき るようになった ⼿動テストの場合は、 OSの設定でプロキシの認証情報を設定可能
  13. © Kakaku.com Inc. All Rights Reserved. 14 ⽬次 1. ⾷べログのソフトウェアテスト⾃動化

    デザインパターン概要 2. ⾷べログのテスト⾃動化基盤 3. パターン詳細 4. 参考⽂献・クレジット
  14. © Kakaku.com Inc. All Rights Reserved. 15 参考⽂献 ・湯本 剛

    『ゆもつよメソッドによるテスト分析の 成り⽴ちと狙い』 (2020) http://jasst.jp/symposium/jasst20kansai/pdf/S5.pdf ・Dima Kovalenko. Selenium Design Patterns and Best Practices. (ディマ・コヴァレンコ ⽟川 紘⼦・太⽥ 健⼀郎(監訳)、笹井 崇司(訳). Seleniumデザインパターン & ベストプラクティス 株式会社オライリー・ジャ パン) (2015) ・Graham Dorothy, Fewster Mark. Software Test Automation. (フュースター・マーク、グラハム・ドロ シー テスト⾃動化研究会(訳). システムテスト⾃動化標準ガイド 株式会社 翔泳社) (2014) ・Vaughn Vernon. Implementing domain-driven design. (ボーン・ヴァーノン ⾼⽊ 正弘(訳). 実践ドメイン駆 動設計 : エリック・エヴァンスが確⽴した理論を実際の設計に応⽤する 株式会社 翔泳社) (2015) ・渋川 よしき『アクセシビリティ情報を使った壊れにくいE2Eテスト』 (2021) https://docs.google.com/presentation/d/e/2PACX- 1vShjxNOc81VhSwY5vDmH2pY6Opc05ZJuY3aemnQ0dmLc10ppBYxJYfKK9DcHLVxp_dQ0u6FUgaL_I_o/em bed
  15. © Kakaku.com Inc. All Rights Reserved. 16 クレジット ※3 Cucumber

    is a registered trademark of Cucumber Ltd. ※2 Squid NOW icon - copyright Squid Project ※1 Jenkins® is a registered trademark of LF Charities Inc. ※5 Mozilla、Firefoxの商標およびロゴは、Mozilla Foundationの⽶国およびその他の国における登録商標また は商標です。 ※4 Selenium is a registered trademark of Software Freedom Conservancy, Inc.
  16. © Kakaku.com Inc. All Rights Reserved. 18 パターン関係図 ゆもつよ メソッド

    テスト観点表のセルで 並列実⾏ 選べる テスト実⾏単位 Page Object 賢すぎない Page Object データ駆動 テスト JSONデータ駆動 テスト Component Object Browser Automation API Wrapper StepにWait処理を 書かない テスト⾃動化で アクセシビリティ向上 アトミックな デプロイとテストの実⾏ ログインユーザのプール メンテナビリティ ファースト ⽣産性の実証 ACL Proxy Blackhole Proxy 振り分け プロキシ Credential付与 プロキシ 実⾏環境単位で レポート出⼒ テスト成功率の しきい値95% メッセージ キューデプロイ ログアウトタグ テスト要求分析パターン ⾔語・ツール選定のパターン フレームワーク設計パターン アーキテクチャ設計パターン インフラ設計パターン パイプライン設計パターン テストケース⾃動化パターン