CI/CD テスト自動化

テスト自動化は CI/CD パイプラインの中心であり、リリース頻度を上げるのに不可欠なステップです。TeamCity はテストの並べ替えテストの並列化、スマートなエラー解析クオリティゲートなど、自動テストを最大限に活用できるようにする広範な機能を多数提供しています。TeamCity には .NET、Java、Python、JavaScript、およびその他のプログラミング言語用の一般的なテストフレームワークを組み込みでサポートしているため、コード品質の改善とソフトウェアスタック全体のリリースプロセスの信頼性向上に寄与します。

ユーザーのワークフローに適合

ソフトウェアのテストワークフローはソフトウェアそのものと同じくらいの多様性があります。Docker コンテナーのオーケストレーション、テスト環境の構成、各種パラメーターに基づくテスト範囲の変更、クオリティゲートのセットアップは、CI/CD ツールで実施する一般的なアクティビティのほんの一部に過ぎません。幸いにも TeamCity はこれらのシナリオをすべてサポートしており、特定のテストワークフローに合った自動パイプラインを簡単にセットアップすることができます。

あらゆる一般的なビルド・テストツールとの統合

TeamCity は他の CI/CD ソリューションとは異なり、ビルドツールとテストフレームワークを統合します。テストの実行を並列化し、不安定なテストを識別し、実行する各テストのビルドログ、実行時間、実行順、コードカバレッジ、および静的解析の結果などを含む履歴を記録します。TeamCity は収集するテスト統計が増えるほど、どのような変更がよくテストを失敗させているかを把握するのに欠かせない存在となります。

あらゆる規模と複雑さのプロジェクトに適合

CI/CD ツールを別の CI/CD ツールに移行した経験がある方は、移行プロセスに数か月を要する場合があることをご存知かと思います。TeamCity なら、会社がビルドシステムの規模を上回り、別のシステムに切り替えざるを得なくなることを心配する必要がなくなります。このソリューションはどんなに大規模で複雑なプロジェクトも処理できるように作られています。たとえば、JetBrains の社内では 1,000 人以上の開発者が 1 つの TeamCity インストール環境を使用して 5,000 ビルド以上を同時に実行しています。

高度なテストレポートで生産性をアップ

テストを自動化して定期的に実行することで、チーム全体が変更に対する迅速なフィードバックを得られます。新しいバグがより早く検出され、変更内容がまだはっきりと記憶に残っている状態で迅速に修正できるようになります。

TeamCity では、自動化テストを CI/CD パイプラインに組み込む形で構成できます。テスト結果はその場で提供されるため、迅速なフィードバックが得られます。テストに失敗した場合は TeacmCity が関連するコード変更の詳細をスタックトレース、ログ、およびビルドアーティファクトと併せて提供するため、すぐにデバッグプロセスに取り組むことができます。不安定なテストと新たに失敗したテストはハイライトされ、後のビルドでテストが修正された場合にはテスト結果ページが対応する情報で自動的に更新されます。

テスト結果はウェブ UI で表示できるだけでなく、メール、Slack、またはその他のメッセンジャーで送信したり、IDE に直接配信したりできます。この場合もビルドステップの完了を待つ必要がないため、チームは最新の変更に対するフィードバックを即座に得ることができます。

主なテスト自動化機能

エラー解析とコードカバレッジ

TeamCity にはソフトウェアのビルド、テスト、およびデプロイに使用されるツールと統合する各種のビルドランナーが備わっています。ビルドランナーを使ってテストスイートが実行された場合、TeamCity がビルド中に発生するイベントを認識し、コードカバレッジの確認、その場でのレポート提供、統計の収集、傾向の解析が可能になります。

テストスクリプトを TeamCity のビルドステップに変換するのは現実的ではないと思い、一般的なコマンドラインビルドランナーを代わりに使用しようと思うこともあるでしょう。その方針で進めることにした場合はスクリプトの出力に TeamCity サービスメッセージを追加して TeamCity に進捗を通知すれば、すべてのスマート機能を使用できるようになります。たとえばテスト名とその実行時間に関する情報を提供した場合、TeamCity がテストの並列化方法を計算できるようになります。詳細については、ドキュメントの「サービスメッセージ」セクションをご覧ください。

TeamCity でビルドを成功または失敗にマークする条件を特定の要件に応じて定義できます。たとえばユニットテストのカバレッジがビルドごとに縮小しないことを重視する場合は、コードカバレッジのメトリクスをビルドステップの失敗条件にすることができます。

TeamCity でテストエラーを管理する場合、チームメンバーに調査を割り当てるか、直ちに修正する必要のないテストをミュートすることができます。ミュートされたテストは後続のパイプライン実行で無視されるため、パイプラインに手動で変更を加えることなく、自動テストプロセスを中断なく続行させることができます。

ビルドランナーは、以下のようなすべての一般的なツールとプログラミング言語向けに開発されています。

  • Gradle
  • Kotlin
  • Maven
  • .NET
  • Node.js
  • Python
  • その他多数

JetBrains がサポートするビルドランナーのほか、100 以上の無料プラグインや、TeamCity と独自のツールやスクリプトとの統合を可能にする包括的な API が用意されます。

並列テスト

インテリジェントテスト並列化は、テストプロセスを大幅に高速化できる TeamCity 固有の機能です。複数のビルドエージェントを利用できる場合、TeamCity はテスト実行時間に基づいてテストを自動的に複数の均等なバッチに分割し、それらを並列実行できます。テストに TeamCity のビルドランナーではなくカスタムのスクリプトが使用されている場合は、サービスメッセージを使用して TeamCity に進捗を通知できます。それにより、TeamCity がテストの最適な並列方法を計算し、並列化のセットアップに役立つ特別な指示ファイルを生成できるようになります。

詳細については、ドキュメントの「並列テスト」セクションをご覧ください。

パフォーマンス監視

多くの場合、テストを実行するハードウェアやクラウドのインスタンスがプロジェクトに最適かどうかを判断するのは簡単ではありません。TeamCity のパフォーマンスモニターは CPU、メモリ、およびハードドライブのパフォーマンスに関する統計を自動的に収集するため、パイプラインを妨げているボトルネックの有無を把握するのに役立ちます。

詳細については、ドキュメントの「パフォーマンスモニター」セクションをご覧ください。

コードを VCS にコミットせずにテスト

TeamCity では、コードをバージョン管理システムにコミットせずにテストできます。これは 1 つの main ブランチで開発を行っている場合に特に便利です。ビルドが中断され、他のチームメンバーの作業が止まってしまうリスクを最小限に抑えられます。

変更をコミットせずにテストするには、IntelliJ ベースの IDE か Visual Studio 用 TeamCity プラグインのリモート実行機能を使用するのが最も簡単です。コードを Git でホストしているチームであれば、Git パッチを作成して TeamCity にアップロードし、TeamCity UI を使って個人用ビルドを実行することもできます。

自動テストパイプラインの柔軟な構成

TeamCity にはテストを自動的に開始するためのビルドトリガーが豊富に用意されており、TeamCity UI または IDE から手動でテストを実行することができます。ビルドのトリガー元やパイプラインの始めの方で発生したイベントに応じて、プロセスを合理化してテストの実行タイミングを制御する条件付きロジックをテストパイプラインに追加できます。たとえば、完全なテストスイートを実行するナイトリービルドのスケジュールを指定する、コミットごとにユニットテストのみを実行する、パイプラインを手動実行する際に正確なテスト範囲を指定するといったことが可能です。

テストワークフローを補完する TeamCity のその他の機能

CI/CD インフラストラクチャの自動スケーリング

多数のプロジェクトを抱える大規模な CI/CD システムでは、ビルドとテストの実行に必要なビルドエージェントの数を正確に判断するのが難しい場合があります。TeamCity はクラウドで新しいビルドエージェントを自動的に起動してパイプラインの能力を動的に高めることで、スケーラブルな CI/CD 環境の構築を支援します。サポート対象のクラウドプラットフォームには、Amazon EC2、Microsoft Azure、Google Cloud、VMWare vSphere、Kubernetes などがあります。

Docker 統合

TeamCity は Docker を利用するすべてのソフトウェア開発ワークフローをサポートしており、それらを高速化できます。たとえば、特定の環境バージョンでテストを実行して一貫性のある再現可能な結果を保証したり、複数の Docker コンテナーのオーケストレーションを必要とする統合テストを実行したりできます。CI/CD パイプラインで Docker をどのように使用するかに関係なく、TeamCity はビルド中に発生するすべてのイベントを追跡して、リアルタイムレポート、テスト解析、およびその他のインサイトを提供することができます。

変更の自動マージ

TeamCity にはビルドが成功した場合に指定された宛先ブランチに変更を自動マージする機能が備わっています。また、複数のマージ操作を連続実行するようにセットアップすることも可能です。VCS にコミットする前にコードをテストする機能と組み合わせると、ゲートコミットパターンを利用することができます。

FAQ: TeamCity の自動テスト

TeamCity のテスト並列化機能は無料ですか?

はい。テスト並列化は無料の自己ホスト型エディションを含むすべての TeamCity エディションで可能です。TeamCity On-Premises では、ライセンスで許容される数のビルドエージェントにテストを分散できます。

TeamCity はどのオペレーティングシステムをサポートしていますか?

TeamCity は Windows、Linux、macOS に対応しており、Docker ランタイムをサポートするすべてのプラットフォームで Docker コンテナーとして実行できます。また、インストール作業やも管理も必要としないマネージドサービスの TeamCity Cloud もご利用いただけます。

TeamCity は失敗したテストを自動的に再試行できますか?

はい。Retry ビルドトリガーを使用すると、ビルド失敗時に TeamCity が自動的にそのビルドをビルドキューに追加し直すことができます。これはネットワークの問題やその他の外部要因により、コードが正しくてもテストが失敗するような状況に対処する際に役立ちます。

TeamCity は UI テストフレームワークをサポートしていますか?

TeamCity は汎用性に優れた CI/CD ツールで、UI テストに使用されるフレームワークを含むさまざまなツールとテストフレームワークで使用できます。TeamCity を UI テストに使用する方法の詳細は、「TeamCity UI: テスト方法は?(英語)」というブログ記事をご覧ください。