自動テストをCI/CDプロセスに統合することは、コードの変更ごとに欠陥を早期に発見することを保証します。これは、現代の開発プロセスと製品の安定性にとって重要です。
問題の背景: 従来、自動テストは手動または個別のタスクを使用して実行されていました。継続的インテグレーション(CI)および継続的デプロイメント(CD)の概念が登場したことで、すべてのテストを各コミット時に自動的に実行する必要が生じました。現在では、Jenkins、GitLab CI/CD、GitHub Actions、TeamCityなどのシステムが広く使用されています。
問題: 自動テストの統合がない場合、バグは遅れて発見されます。開発者が問題に気付かない場合、問題は本番環境にデプロイされる可能性があります。手動での実行はリリースを遅らせ、変更の品質に対する完全な信頼を提供しません。
解決策: CI/CDに自動テストを統合することで、以下が可能になります:
これを実現するために、テストはパイプライン内の個別タスクとして設定されます:通常、ユニットテスト、統合テスト、UIテスト、負荷テストのためのフェーズがあります。.gitlab-ci.ymlの例:
stages: - test - deploy unit_test: stage: test script: - npm run test:unit ui_tests: stage: test script: - npm run test:ui
主要な特徴:
CI/CDで自動テストを統合することで開発が遅れることはないか?
いいえ、適切に設定されたパイプラインは並列性、アイソレーション環境、および必要なテストのみを実行するためのトリガーを使用しており、バグを早期に発見することでリリースを加速します。
パイプラインの各段階で全ての自動テストを実行すべきか?
いいえ、通常、初期段階(プルリクエストのキューなど)では迅速なチェック(リンターやユニットテスト)を使用し、完全な回帰自動テストはリリース前やナイトリービルドのみで実施します。
CI/CDで自動テストだけで手動回帰を省略してもいいか?
推奨されません。自動化は繰り返しのシナリオに対して効果的ですが、複雑なケースやユーザーエクスペリエンスのチェックは依然として手動チェックを必要とします。
プロジェクトでは全ての自動テストが各コミットで実行され、パイプラインは40分に及び、開発者はテストの終了を待たなければならず、マージの際に競合が発生し、リリースが遅れました。
利点:
欠点:
タスクを分けたパイプラインを設計し、フィーチャーブランチではのみ迅速なテストを実行し、完全な回帰をステージ/プロダクションで実施しました。バグとレポートはボットによってキャッチされ、チームは失敗について通知され、迅速に対処しました。
利点:
欠点: