Azure Static Web AppsがGAしたようで、とてもうれしい。
直近のマイブームがE2Eテストなので、Static Web Appsの中でも特にいいなと思うGitリポジトリのPull Requestごとの動作環境に対してE2Eとビジュアルテストを仕掛けてみた。
E2Eテストは先日試したCypressをそのまま使い、ビジュアルテストはそれにPercyを連携してみた。
なんで Percy
Cypressをベースにしたビジュアルテストは公式なドキュメントにいくつか手法が紹介されている。その中でシンプルに画像を比較しているっぽくて試してみやすそうなPercyを選んだ。
構成
Static Web Appsはビルド、デプロイ用のGitHub ActionsのActionが用意されている。その出力にその時デプロイした環境のURLがある。これを後続のE2Eテストに入力してやる。
Cypressは環境変数でテスト時のベースURLを指定できるので、それを使ってみた。
jobs: build_and_deploy_job: if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') runs-on: ubuntu-latest name: Build and Deploy Job # アクションの出力を参照して outputs: static_web_app_url: ${{ steps.builddeploy.outputs.static_web_app_url }} steps: - uses: actions/checkout@v2 with: submodules: true - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ICY_COAST_005428600 }} repo_token: ${{ secrets.GITHUB_TOKEN }} action: 'upload' app_location: 'SRC.Sharp/SRCTestBlazor/' api_location: '' output_location: 'wwwroot' e2e: runs-on: ubuntu-latest needs: build_and_deploy_job steps: - name: checkout uses: actions/checkout@v2 - run: npm ci working-directory: ./SRC.Sharp/SRCTestBlazor/E2E - name: Percy exec Cypress run uses: percy/exec-action@v0.3.1 with: working-directory: ./SRC.Sharp/SRCTestBlazor/E2E command: 'cypress run --record' env: PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 別のジョブ、アクションに入力(環境変数に設定)してやる CYPRESS_BASE_URL: ${{ needs.build_and_deploy_job.outputs.static_web_app_url }}
感想
自分がよく知らない要素技術に関する感覚を掴むための手法の一つに、その要素でメジャーになっているサービスを使ってみるのは有効だと思っている。
できることや、よいとされているノウハウ(ベストプラクティス)、開発体験などを一手に仕入れることができる。結果として、その要素技術に対しての考え方のベースを得られる。
今回E2Eテストやビジュアルテストに関して「CypressやPercyではこうだった」という感覚をほんの少しではあるが得られた。これはいろんなところに生きてくるだろうなと思っている。
取り合えず処理時間を出力している部分がビジュアルの差分になってビルド失敗扱いになっているので、これをどうにかしよう。
追記:
取り合えず処理時間を出力している部分がビジュアルの差分になってビルド失敗扱いになっているので、これをどうにかしよう。
Percy的にはテストデータを安定したものにして、時刻なんかはフリーズしろって感じみたいだけれど、動作環境を参照していると難しそうだ。