Cypress の Free プランは上限に達するのが早いのでダッシュボードに記録する対象を絞る

前提

CI で Cypress を回す際に何も考えずに全実行しているとあっというまに Free プランの枠を食いつぶしてしまうので、実行する対象を絞ります。

もちろん、💴Free プランでない💴ならばリッチに使いましょう。

Free プランの上限

Free プランの上限(制限)は、「Test Results が毎月 500 まで」です(公式ドキュメント)。

gyazo.com

この「Test Results」というのが曲者で、これは「Cypress コマンドの実行回数ではなく、いわゆる Spec の数」です。その数はダッシュボードから確認できます。

gyazo.com

開発ペースにもよりますが、一般的には 500 個のテストなぞすぐに走り尽くしてしまうでしょう。

Free プランの上限に達したときの挙動

Free プランの上限に達したときには枠が回復するまでに以下の制約が課されます。なお、上限に達する直前にメールで通知が来ます*1

  • テストの並行実行ができなくなる(ダッシュボード上での実行時)
  • 結果がダッシュボードに表示されなくなる

後者の「結果がダッシュボードに表示されなくなる」というのが凶悪で、「今までのすべての結果」が表示されなくなります*2

gyazo.com

gyazo.com

どうするか(本題)

Free プランだとあっというまに上限に達してしまうことは明らかなので、ダッシュボードでの実行に関しては CI のコード内での条件分岐により実行対象を絞りましょう。おそらく一番現実的なのは、 stagingmain (master) へのコミットの際に発動させるというものです。

ダッシュボードでの実行をさせずとも、CI 上で CLI で実行すればテスト自体は問題なく実行されます。また、動画や静止画についても Artifacts を利用することで全て保存されます。

すなわちダッシュボードの利用意図としては、重要なコミットの際の証跡であったり、多人数での状況の共有などになるでしょう。

どうするか(CircleCI の例)

CircleCI ではたとえば以下のように書くと staging および main 以外のブランチではダッシュボードに記録されなくなります。

(ここまで省略)
      - when:
          condition:
            or:
              - equal: [ main, << pipeline.git.branch >> ]
              - equal: [ staging, << pipeline.git.branch >> ]
          steps:
            - run:
                name: Cypress を実行する(ダッシュボードにも保存する)
                command: |
                  npx cypress run --record --key $CYPRESS_RECORD_KEY
      - when:
          condition:
            and:
              # 以下の 'pattern' だと、'main' または 'staging' が先頭に来た場合もマッチしてしまうので注意する
              - matches: { pattern: "^(?!main).+$", value: << pipeline.git.branch >> }
              - matches: { pattern: "^(?!staging).+$", value: << pipeline.git.branch >> }
          steps:
            - run:
                name: Cypress を実行する(ダッシュボードには保存しない)
                command: |
                  npx cypress run --record false

上記のように記述することで Cypress をダッシュボードで実行する場合に条件をつけることができます。ただし、動画や静止画の保存のためには、別途 store_artifacts を定義する必要があります。

余談ですが、GitHub Actions の場合は Artifacts はいったん手元にダウンロードする必要があり(動画や画像をブラウザ内で見られない)、地味にストレスです*3

*1:この通知は実質的にはほぼ上限に達した通知に等しい

*2:超過分だけではない

*3:そのうち改善されると思います

Powered by はてなブログ