Slide 1

Slide 1 text

Cypressでサクッと始める E2Eテスト 2021.8.12 自動化大好きエンジニアLT会 - vol.4

Slide 2

Slide 2 text

  自己紹介  片岡 基 Kataoka Motoi   テクノロジーとサッカーを愛するエンジニア    TVISION INSIGHTS株式会社所属     SIer → スポーツデータ会社 → テレビデータ会社      フルサイクルエンジニア(企画-要件定義-設計-実装-テスト-運用)       AWS大好き、浦和レッズ大好き(iOS/Androidアプリ出してます) ティービジョン インサイツ

Slide 3

Slide 3 text

Cypressとは  ・オールインワンのE2Eテストツール   ・エンドツーエンド = 端から端まで = ブラウザからサーバサイドまで    ・設定したシナリオ通りにブラウザを自動操作してテストできる      ・Chrome、Firefox、Edgeでテスト可能       ・Mac、Windows、Linuxにインストールして使用        ・OSS、フリー、活発な開発

Slide 4

Slide 4 text

特徴  ① 内部的にSeleniumを使用していない  ② エンドツーエンドのテストを本当にうまく行うことに焦点を当てている  ③ あらゆるフロントエンドフレームワークまたはWebサイトで動作する  ④ テストはJavaScriptでのみ記述される  ⑤ オールインワン  ⑥ 開発者とQAエンジニア向け  ⑦ 非常に高速に動作 https://www.cypress.io/how-it-works/

Slide 5

Slide 5 text

オールインワン  ああああ https://www.cypress.io/how-it-works/

Slide 6

Slide 6 text

% yarn add cypress --dev ←インストール yarn add v1.22.10 info No lockfile found. [1/4] 🔍 Resolving packages... warning cypress > @cypress/request > [email protected]: this library is no longer supported warning cypress > @cypress/request > [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. warning cypress > url > [email protected]: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 🔨 Building fresh packages... success Saved lockfile. success Saved 149 new dependencies. info Direct dependencies └─ [email protected] info All dependencies ├─ @cypress/[email protected] ├─ @cypress/[email protected] ├─ @types/[email protected] ├─ @types/[email protected] ・・・中略・・・ ├─ [email protected] ├─ [email protected] └─ [email protected] ✨ Done in 8.55s. % npx cypress open ←起動 インストール & 起動

Slide 7

Slide 7 text

サンプルのテストファイル integrationディレクトリに サンプルのテストファイル cypressディレクトリが作成さ れる

Slide 8

Slide 8 text

テスト実行 - GUI テストファイルをクリック ブラウザが起動して 自動テスト

Slide 9

Slide 9 text

Cypress Studio  ブラウザ上で簡単にテストコード作成できる機能。  v8.2現在、experimental(実験的)扱い。  cypress.jsonで有効化して使用。{ "experimentalStudio": true }  ブラウザ操作とアサーションのテストコードを生成してくれる。  実演。 STUDIO

Slide 10

Slide 10 text

シナリオ作成 新規テストファイル作成

Slide 11

Slide 11 text

シナリオ作成 作成されたファイルをクリック

Slide 12

Slide 12 text

シナリオ作成 Cypress Studioでテスト作成へ

Slide 13

Slide 13 text

シナリオ作成 テスト対象URLを入力して 「Go→」

Slide 14

Slide 14 text

シナリオ作成 右の画面で行った操作が記録され る 保存

Slide 15

Slide 15 text

シナリオ作成 生成されたテストコード

Slide 16

Slide 16 text

テスト実行 - CUI npx cypress run 実行の様子が動画として 自動的に保存される(便利!)

Slide 17

Slide 17 text

小ネタ:テスト時のシステム時刻を固定化 テストコード内で上記を実行することで固定化できる。 あくまでクライアント側(ブラウザ側)のみ。 サーバサイドはlibfaketime等で対応。 const now = new Date(2021, 7, 23).getTime() cy.clock(now);

Slide 18

Slide 18 text

豊富な機能  ① テスト実行の様子をスクリーンショット・動画で出力  ② クラウド上に結果を保存・共有できるDashboard(有償サービス)  ③ CI対応(GitHub Actions、CircleCI、GitLab CI、etc)  ④ Gitホスティング対応(GitHub、GitLab、BitBucket)  ⑤ スクリーンショット前後比較テスト  ⑥ コンポーネントテスト(Angular、Vue、React対応。experimental)

Slide 19

Slide 19 text

活発な開発 2020.8 2020.11 2021.4 2021.7

Slide 20

Slide 20 text

Enjoy your E2E Life!!

Slide 21

Slide 21 text

参考 https://www.cypress.io/ https://user-first.ikyu.co.jp/entry/2019/04/23/090000 https://future-architect.github.io/articles/20200115/ https://blog.ecbeing.tech/entry/2021/04/08/114500 https://www.testim.io/blog/puppeteer-selenium-playwright-cypress-how-to-choose/

Slide 22

Slide 22 text

TVISION INSIGHTS ではエンジニアを大募集中です! ティービジョン  インサイツ 自社サービスをフルサイクルに開発したい方、是非! https://www.wantedly.com/companies/tvisioninsights