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

puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール

Yusuke Iwaki
January 20, 2021
1.5k

puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール

第13回フクオカRuby大賞 (2021) 本審査のプレゼン資料です。

ふりかえり記事はこちらです。
https://yusukeiwaki.hatenablog.com/entry/2021/01/24/puppeteer-ruby-on-fukuoka-ruby-award-13

Yusuke Iwaki

January 20, 2021
Tweet

Transcript

  1. 概要: Ruby/Railsのためのブラウザオートメーションツール 2 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 多くの開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。
  2. 概要: Ruby/Railsのためのブラウザオートメーションツール 3 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 多くの開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容
  3. E2Eテストのベース技術:ブラウザ自動操作 9 機械的な刺激を与える方法は2種類ある WebDriver Protocol CDP(Chrome DevTools Protocol) ・10年以上の歴史があり、対応ブラウザが多い ・対応言語も非常に多い

    ・対応ブラウザはChromeと一部のFirefoxのみ ・公式な対応言語はJavaScriptのみ どんな環境でも 「なんとなく」は 自動操作できる 一部の環境のみだが、 かなり高精度に自動操作できる。
  4. E2Eテストは意外と難しい! 人間が「正しい」と思う判断基準 ≠ ソフトウェアの判断基準 くるくるが 表示し終わるまで 待とう。。 長い・・・ おすすめ一覧は 出ていない。

    不具合ですね? 最大30秒待って おすすめ一覧が 出たらOK。 出なかったら 不具合ですね。 おすすめが出るまで 最大30秒は待つ くるくる が消えたら おすすめが出ると 思っている おすすめが 出ていないので 即時にNG判定する 「くるくるが消えるまで待て」と明示的にプログラムが必要
  5. 概要: Ruby/Railsのためのブラウザオートメーションツール 14 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容
  6. 概要: Ruby/Railsのためのブラウザオートメーションツール 15 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容 ・E2Eテストは、品質担保のために 単体試験が少ない(= 技術的に負債を抱えた)システム ほど重要である ・E2Eテストは、ソフトウェアの選定をしっかりしないと 人間が「正しい」と感じる判断基準を ソフトウェアで再現させるのが難しい
  7. 概要: Ruby/Railsのためのブラウザオートメーションツール 16 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容
  8. Flaky test:「100回に1回だけ失敗する」はOK? • Flakyテストの単体成功率は99% ◦ テスト項目が1000程度で、Flakyテストが全体の2%程度(20項目) テストの完走率は 81.7% (5回に1度は 失敗する)

    ◦ テスト項目が8000あり、Flaky testが全体の1%(80項目)ある場合の テストの完走率は 44.8% (2回に1度は 失敗する) • 現実問題では、完走率はもっと0に近く、 手動でのテスト結果精査作業が発生する / 手動テストで補完することが多い。 28
  9. 概要: Ruby/Railsのためのブラウザオートメーションツール 29 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容
  10. 概要: Ruby/Railsのためのブラウザオートメーションツール 30 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容 ・Ruby/Railsで一般的に利用されているのはCapybara ・CapybaraはベースがSelenium WebDriverで、 画面遷移やDOM変更検知に弱い。 「100回に1回失敗する」Flaky test問題を起こしやすい。 ・Flakyテスト問題を解決しないまま、 数千テストケースを運用すると、完走率が0に近くなる
  11. 概要: Ruby/Railsのためのブラウザオートメーションツール 31 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容
  12. 【再掲】ブラウザ自動操作 33 機械的な刺激を与える方法は2種類ある WebDriver Protocol CDP(Chrome DevTools Protocol) ・10年以上の歴史があり、対応ブラウザが多い ・対応言語も非常に多い

    ・対応ブラウザはChromeと一部のFirefoxのみ ・公式な対応言語はJavaScriptのみ どんな環境でも 「なんとなく」は 自動操作できる 一部の環境のみだが、 かなり高精度に自動操作できる。 Capybaraで使えるのは こっちだけ
  13. 【再掲】ブラウザ自動操作 34 機械的な刺激を与える方法は2種類ある WebDriver Protocol CDP(Chrome DevTools Protocol) ・10年以上の歴史があり、対応ブラウザが多い ・対応言語も非常に多い

    ・対応ブラウザはChromeと一部のFirefoxのみ ・公式な対応言語はJavaScriptのみ どんな環境でも 「なんとなく」は 自動操作できる 一部の環境のみだが、 かなり高精度に自動操作できる。 Rubyでもこっちを 使ってみたいよ??
  14. 概要: Ruby/Railsのためのブラウザオートメーションツール 48 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。 本日のプレゼンテーションで説明する内容 ・Flakyテスト問題を根本解決できるPuppeteer (公式にはJavaScript向け)を Rubyからも利用できるようにするためのソフトウェアを開発した。 ・既存のRuby/Railsのテストケースを JavaScriptへ「置換」しないとPuppeteerが利用できない状況は解消。 既存のテストケースと「共存」をして、 弱いところをPuppeteerでピンポイントに「補強」することが可能となった。 ・「テストケースの運用負荷は下げたいが、置換するほど工数はかけられない」 という組織へ、有用な選択肢/移行パスを提供できた。
  15. 概要: Ruby/Railsのためのブラウザオートメーションツール 49 背景:Webサービスの開発現場において、 Ruby on Railsは現在も非常に広く使われている。 少人数の開発現場では、継続的な品質担保のために、 自動試験が行われている。(CI: 継続的インテグレーション)

    課題:Ruby/Railsにおいて、現存する自動操作ソフトは 精度が低く、自動試験の運用負荷が非常に高い。 → JavaScriptで高精度の自動操作ライブラリをRubyに移植。 自動試験の運用負荷を改善。