Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

E2Eテストの OWASP ZAP 依存解消 #886

Merged
merged 10 commits into from
Apr 18, 2024
Merged

Conversation

nanasess
Copy link
Contributor

@nanasess nanasess commented Apr 8, 2024

環境変数 HTTP_PROXY を設定しない場合は、 OWASP ZAP を使用せずにE2Eテスト可能とする。

#482 より、 OWASP ZAP と Playwright をまとめて実行する試みを進めていましたが、以下のような問題がありました。

  • 環境構築の障壁が上がる
  • テストに時間がかかる
  • OWASP ZAP の起動がタイムアウトで失敗する

そもそも、 Playwright を実行するのみなら OWASP ZAP も必要無いため、環境変数 HTTP_PROXY を設定しない場合は、OWASP ZAP を経由しなくても E2E テストを実行できるように修正しました。

これにより、以下のようなメリットが得られます

  • GitHub Actions の高速化&安定化(約30分から約20分に短縮)
  • ローカルでの環境構築が簡単になる

E2Eテストの実行方法

PostgreSQL の場合

## 環境変数を設定
export COMPOSE_FILE=docker-compose.yml:docker-compose.pgsql.yml:docker-compose.dev.yml

## docker compose up を実行
docker compose up -d --wait

## ダミーデータ生成
docker compose exec -T ec-cube composer install
docker compose exec -T ec-cube composer require ec-cube2/cli "dev-master@dev" -W
docker compose exec -T ec-cube composer update 'symfony/*' -W
docker compose exec -T ec-cube php data/vendor/bin/eccube eccube:fixtures:generate --products=5 --customers=1 --orders=5
## 会員のメールアドレスを zap_user@example.com へ変更
docker compose exec -T postgres psql --user=eccube_db_user eccube_db -c "UPDATE dtb_customer SET email = 'zap_user@example.com' WHERE customer_id = (SELECT MAX(customer_id) FROM dtb_customer WHERE status = 2 AND del_flg = 0);"

## playwright をインストール
yarn install
yarn run playwright install --with-deps chromium
yarn playwright install-deps chromium

## 管理画面の E2E テストを実行
yarn test:e2e e2e-tests/test/admin
## フロント(ゲスト)のE2Eテストを実行
yarn test:e2e e2e-tests/test/front_guest
## フロント(ログイン)のE2Eテストを実行
yarn test:e2e e2e-tests/test/front_login

MySQL の場合

## 環境変数を設定
export COMPOSE_FILE=docker-compose.yml:docker-compose.mysql.yml:docker-compose.dev.yml

## docker compose up を実行
docker compose up -d --wait

## ダミーデータ生成
docker compose exec -T ec-cube composer install
docker compose exec -T ec-cube composer require ec-cube2/cli "dev-master@dev" -W
docker compose exec -T ec-cube composer update 'symfony/*' -W
docker compose exec -T ec-cube php data/vendor/bin/eccube eccube:fixtures:generate --products=5 --customers=1 --orders=5
## 会員のメールアドレスを zap_user@example.com へ変更
docker compose exec mysql mysql --user=eccube_db_user --password=password eccube_db -e "UPDATE dtb_customer SET email = 'zap_user@example.com' WHERE customer_id = (SELECT customer_id FROM (SELECT MAX(customer_id) FROM dtb_customer WHERE status = 2 AND del_flg = 0) AS A);"

## playwright をインストール
yarn install
yarn run playwright install --with-deps chromium
yarn playwright install-deps chromium

## 管理画面の E2E テストを実行
yarn test:e2e e2e-tests/test/admin
## フロント(ゲスト)のE2Eテストを実行
yarn test:e2e e2e-tests/test/front_guest
## フロント(ログイン)のE2Eテストを実行
yarn test:e2e e2e-tests/test/front_login

@codecov-commenter
Copy link

codecov-commenter commented Apr 8, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 55.20%. Comparing base (32c42a3) to head (0f6656d).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #886   +/-   ##
=======================================
  Coverage   55.20%   55.20%           
=======================================
  Files          75       75           
  Lines        8900     8900           
=======================================
  Hits         4913     4913           
  Misses       3987     3987           
Flag Coverage Δ
tests 55.20% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@nanasess nanasess changed the title [WIP] E2Eテストの OWASP ZAP 依存解消 E2Eテストの OWASP ZAP 依存解消 Apr 18, 2024
@nanasess nanasess marked this pull request as ready for review April 18, 2024 15:12
@nanasess nanasess enabled auto-merge April 18, 2024 15:32
@nanasess
Copy link
Contributor Author

ペネトレーションテストも不安定で、調整が必要なのでこちらは別途 PR します
https://github.com/EC-CUBE/ec-cube2/actions/workflows/penetration-tests.yml

@nanasess nanasess merged commit 4988b8f into EC-CUBE:master Apr 18, 2024
90 checks passed
@nanasess nanasess deleted the improve-e2e branch April 18, 2024 21:13
Copy link
Contributor

@seasoftjapan seasoftjapan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

既にマージされたようですので、master で実行してみました。
本件の影響か分かりませんが、yarn test:e2e e2e-tests/test/front_guest で以下の failed が発生します。

  1) [chromium] › test/front_guest/shopping.test.ts:110:7 › 購入フロー(ゲスト)のテストをします › 注文完了を確認します ────────

    Error: expect(received).toBe(expected) // Object.is equality

    Expected: 1
    Received: 2

      112 |
      113 |     const messages = await mailcatcher.get('/messages');
    > 114 |     await expect((await messages.json()).length).toBe(1);
          |                                                  ^
      115 |     await expect(await messages.json()).toContainEqual(expect.objectContaining(
      116 |       {
      117 |         subject: expect.stringContaining('ご注文ありがとうございます'),

        at /home/nob/htdocs/ec217/e2e-tests/test/front_guest/shopping.test.ts:114:50

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/test-front_guest-shopping-購入フロー-ゲスト-のテストをします-注文完了を確認します-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

yarn test:e2e --workers=1 e2e-tests/test/front_guest を指定したら全て passed となったので、本件の影響では無いと判断しました。

@nanasess
Copy link
Contributor Author

@seasoftjapan ご確認ありがとうございます!
サンクスメールをチェックするテストが並列実行に対応していないのが原因ですね。
ゆくゆくは改善したいと思いますが、今のところは --workers=1 を指定していただくのが良さそうです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants