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

[ご意見ください]OWASP ZAP のアクティブスキャンとE2Eテストをまとめて実行する試み #482

Merged
merged 41 commits into from
Jan 19, 2022

Conversation

nanasess
Copy link
Contributor

@nanasess nanasess commented Oct 1, 2021

OWASP ZAP のアクティブスキャンとE2Eテストをまとめて実行する試みです。ご意見ください

4系(EC-CUBE/ec-cube#5169 )と同様に、2系でも OWASP ZAP の自動化を進めていきたいが、そもそもCodeception によるE2Eテストがほとんどできていない。
Codeception ではなく、 PlaywrightでE2Eテストを実施して、OWASP ZAP のアクティブスキャンと共に実装してしまおうという試みです。

慣れの問題もあるかもしれませんが、 Codeception に比べ、 Playwrightの方が設定が楽で簡易に実装できると思います。
良さげでしたら、 Codeception から Playwright のテストへ切り替えていきたいと思いますのでご意見いただけると嬉しいです。

以下のコマンドでE2Eテストのみを実行します(Pull Request ごとに実行する想定です)

yarn test:e2e e2e-tests

スクリーンショット 2022-01-05 165927

以下のコマンドでE2EテストとOWASP ZAPによるアクティブスキャンを実行します(GitHub Actions の cron で週1回程度実行する想定です)

yarn test:attack e2e-tests

スクリーンショット 2022-01-05 170040

メリット

  • 古い Codeception の依存を解消できる
  • Codeception よりも設定が楽
  • 最新のテスティングフレームワークを使用できる

デメリット

  • ダミーデータの生成など、PHP で実装されていたプログラムの移植が必要
  • カバレッジがとれない(全く不可能ではないらしい)
  • PHPバージョンが Docker コンテナに依存してしまう(matrix で実行するのが難しい)

設定方法

  1. docker-compose を使用して EC-CUBE をインストールします
    # MySQL を使用する例
    export COMPOSE_FILE=docker-compose.yml:docker-compose.mysql.yml:docker-compose.dev.yml:docker-compose.owaspzap.yml:docker-compose.owaspzap.daemon.yml
    docker-compose  up -d
    # PostgreSQL を使用する例
    export COMPOSE_FILE=docker-compose.yml:docker-compose.pgsql.yml:docker-compose.dev.yml:docker-compose.owaspzap.yml:docker-compose.owaspzap.daemon.yml
    docker-compose  up -d
  2. テスト用のデータを生成します
    # MySQL を使用する例
    ## require-dev のパッケージをインストールしておく
    docker-compose exec ec-cube composer install
    docker-compose exec -T ec-cube composer update 'symfony/*' --ignore-platform-req=php -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);"
    
    # PostgreSQL を使用する例
    ## require-dev のパッケージをインストールしておく
    docker-compose exec ec-cube composer install
    docker-compose exec -T ec-cube composer update 'symfony/*' --ignore-platform-req=php -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 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);"
  3. yarn でテストを実行します。
     ## 初回のみ
     yarn install
     yarn playwright install
     
     ## E2Eテストを実行する場合
     HTTPS_PROXY=127.0.0.1:8090 HTTP_PROXY=127.0.0.1:8090 yarn test:e2e e2e-tests
     ## E2Eテストとアクティブスキャンを実行する場合
     HTTPS_PROXY=127.0.0.1:8090 HTTP_PROXY=127.0.0.1:8090 yarn test:attack e2e-tests

TODO

  • GitHub Actionsのワークフロー実装
  • 既存の Codeception を移植
  • ダミーデータ生成
  • テストからDBアクセスできるようにする 今のところは不要なので、必要になったら検討する
  • OWASP ZAP 用のパッチをあてる必要がある

@codecov-commenter
Copy link

codecov-commenter commented Oct 1, 2021

Codecov Report

Merging #482 (f1c3216) into master (261ef5d) will increase coverage by 7.78%.
The diff coverage is n/a.

Impacted file tree graph

@@             Coverage Diff              @@
##             master     #482      +/-   ##
============================================
+ Coverage     46.62%   54.40%   +7.78%     
============================================
  Files            81       76       -5     
  Lines         10580     9039    -1541     
============================================
- Hits           4933     4918      -15     
+ Misses         5647     4121    -1526     
Flag Coverage Δ
tests 54.40% <ø> (+7.78%) ⬆️

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

Impacted Files Coverage Δ
data/class/SC_Query.php 68.43% <0.00%> (-0.07%) ⬇️
data/class/SC_Initial.php 0.00% <0.00%> (ø)
data/class/SC_PageNavi.php 0.00% <0.00%> (ø)
data/class/SC_MobileEmoji.php 0.00% <0.00%> (ø)
data/class/SC_MobileImage.php 0.00% <0.00%> (ø)
data/class/api/SC_Api_Utils.php 0.00% <0.00%> (ø)
data/class/api/SC_Api_Abstract.php 0.00% <0.00%> (ø)
data/class/api/SC_Api_Operation.php 0.00% <0.00%> (ø)
data/class/helper/SC_Helper_CSV.php 0.00% <0.00%> (ø)
data/class/helper/SC_Helper_Bloc.php 0.00% <0.00%> (ø)
... and 58 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 261ef5d...f1c3216. Read the comment docs.

@kaorukobo
Copy link
Contributor

@nanasess テストのメンテナンスをありがとうございます。
あまり議論の本筋と関係がないのですが、
Codeception は依存パッケージが多いですし、ec-cube2/cli を入れようとすると、Symfonyコンポーネントの依存関係が衝突するので Codeception を削除しないといけないという問題があります。
Codeceptionを除くという点では良い方向だと思いました。

@nanasess
Copy link
Contributor Author

nanasess commented Oct 1, 2021

@kaorukobo ありがとうございます!
#480 にも記載しましたが、 実行可能な Codeception のバージョンが古くて開発効率も悪いため、依存を解消したい狙いもあります。
現在、 ctests/acceptance/_bootstrap.php でダミーデータの生成をしていますが、これも ec-cube2/cli で実行できるようにしたいと思ってます

@nanasess nanasess force-pushed the e2e-testing-selenium branch 7 times, most recently from ebf50ed to 865e989 Compare November 8, 2021 12:14
@nanasess
Copy link
Contributor Author

4系の実装を Selenium から Playwright へ置き換えてみたところ、大変良い感じなのでこちらも Playwright へ置き換えてみたいと思います
EC-CUBE/ec-cube#5263

@nanasess nanasess marked this pull request as ready for review January 13, 2022 01:50
@nanasess nanasess changed the title [WIP][ご意見ください]OWASP ZAP のアクティブスキャンとE2Eテストをまとめて実行する試み [ご意見ください]OWASP ZAP のアクティブスキャンとE2Eテストをまとめて実行する試み Jan 13, 2022
@nanasess
Copy link
Contributor Author

既存の Codeception から Playwright への移植も完了し、テストもすべて通りましたので WIP を外しました

@chihiro-adachi
Copy link
Contributor

@nanasess
ありがとうございます。マージしました。

@chihiro-adachi chihiro-adachi merged commit a9603a1 into EC-CUBE:master Jan 19, 2022
@nanasess nanasess deleted the e2e-testing-selenium branch October 3, 2022 08:11
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.

5 participants