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

なぜE2Eテストがたまに落ちるのか / How do E2E tests fail randomly

なぜE2Eテストがたまに落ちるのか / How do E2E tests fail randomly

Fumiaki MATSUSHIMA

July 14, 2018
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

  1. ➔ visit 時に Rails の実サーバが test モードで起動する ◆ Initializers の類の

    stub タイミングには注意 ➔ 同一プロセスで動いている ◆ そのおかげでテスト中の stub などが効く ポイント
  2. ➔ Capybara は selenium-webdriver 越しの ChromeDriver 越しに Chrome を起動している ➔

    ChromeDriver とは REST API でやりとりしている ◆ WebDriver の仕様がある https://w3c.github.io/webdriver/ ➔ Capybara の DSL は driver に処理を移譲している ◆ driver を差し替えられるようにしている ポイント
  3. ➔ クリック処理は2段階に分かれている ◆ 1. 要素の座標を求める ◆ 2. 座標をクリックする ➔ 1

    と 2 の間に要素の座標が変わると見当違いの場所を クリックすることになる クリックに失敗する (原因)
  4. Chrome GET /users/1 (ポーリング) BEGIN TRANSACTION Minitest DB Rails SELECT

    GET /users/1 ROLLBACK create(:user) visit SELECT ブラウザ終了
  5. Chrome GET /users/1 (ポーリング) BEGIN TRANSACTION Minitest DB Rails SELECT

    GET /users/1 ROLLBACK create(:user) visit SELECT ブラウザ終了
  6. GET /users/1 (ポーリング) BEGIN TRANSACTION Minitest DB Rails SELECT GET

    /users/1 ROLLBACK create(:user) visit SELECT ブラウザ終了 Chrome
  7. ➔ ブラウザの終了処理をDBクリーンアップより先にやらな いといけない ◆ Rails System Test はリリース前に直した ➔ 自分で

    database-cleaner など teardown 処理を入れて いる場合には、順番に注意 Assertion 後にサーバーエラー (対策)
  8. ➔ Capybara とか DB とか ChromeDriver とかがどう絡み 合ってるか知ってると、何かおかしいときにアタリがつくの で覚えて損はない ◆

    別言語でも似たような構成にはなるはず ➔ だいたいの場合クリックに失敗してる ◆ わかっててもミスる ➔ たまに落ちるやつをうまいこと無視する仕組みが欲しい まとめ