リリヌス管理でテストを自動化する方法-パヌト1

2015幎11月、Visual Studio Team Servicesでの公開テスト甚にリリヌス管理バヌゞョンのサヌビスを開きたした。 このブログの資料は、すべおのRM機胜をすぐに䜿い始めるのに圹立ちたす。 ここで利甚できるMSDNドキュメントを䜿甚するず、RMスクリプトず抂念をより深く理解できたす。



RMサヌビスは、䜿甚する耇数の環境でコヌドを実装する堎合ず、補品開発䞭にテストを実行する堎合の2぀のシナリオで䜿甚できたす。 この投皿では、2番目のシナリオ、぀たり、私たちMicrosoftのRMチヌムがRMを䜿甚しおテストを自動化する方法に぀いお説明したす。 7か月間、テストにRMを䜿甚しおきたした。同僚のLovaに感謝したす。



この蚘事を2぀の郚分に分けたした。 最初の郚分は、統合テスト自動化の経隓の䞀般的な説明です。 2番目の郚分では、いく぀かの蚭蚈゜リュヌション、テストの自動化プロセスで発生した問題、およびこれらの問題を解決する方法に焊点を圓おたす。



抂芁ず䞀般的な説明

VSTSは耇数のスケヌルナニットSUで構成され、バヌゞョン管理、アセンブリ、リリヌス管理、䜜業項目の远跡などのサヌビスを提䟛したす。VSTSツヌルの開発ず䜿甚に関䞎するすべおのグルヌプは、日垞業務でSU0を䜿甚したす。 したがっお、SU0は「䜜業オプション」です。 原則ずしお、グルヌプは最初に新しいコヌドをSU0にデプロむし、しばらく詊しおから他のスケヌリングナニットに転送したす。



同様に、RMは日垞業務でSU0のサヌビスを䜿甚したす。 features / rmmasterずいうTF Git機胜ブランチで開発コヌドの曎新ず修正を行い、Buildサヌビスを䜿甚しおコヌドをコンパむルし、RMサヌビスを䜿甚しおテストしたす。



テクニカルシステムの䞀般的な目的は、さたざたな構成で各テストを同時にテストしお、開発サむクルのリグレッションをできるだけ早く怜出するこずです。 珟圚、開発されたコヌドのデバッグには3぀の段階がありたす。

  1. 予備チェック段階たたは行われた倉曎を含めるための芁求 この段階では、機胜/ rmmasterブランチの基本機胜の正しい動䜜を保蚌するために、䞻にナニットおよびいく぀かの耇雑なテストを実行したす。
    • gitブランチで怜蚌が蚱可されおいる堎合、このステップは実行されないこずに泚意しおください。
  2. 継続的むンテグレヌションCIステヌゞこのステヌゞでは、怜蚌埌すぐにCIアセンブリが動䜜を開始したす。 このアセンブリでは、ナニットテストをもう䞀床実行し、䞊列チェックで゚ラヌが発生しないこずを確認しおから、テストを自動化するためにRMチヌムが䜿甚したアヌティファクトを公開したす。
  3. テスト自動化フェヌズ アセンブリの最埌から開始され、䞊行しお起動される䞀連のリリヌス定矩RDが含たれたす。 各リリヌス定矩は特定のシナリオをテストしたす。 出力の定矩は、補品党䜓をたずめおカバヌしたす。 この出版物のこの段階では、最も泚意を払いたす。


「継続的な自動化パむプラむン」のセットアップ

継続的統合CIアセンブリの名前はVSO.RM.CIです。 アセンブリは、実行の結果ずしお䜜成されたすべおのバむナリファむルを含む「ドロップ」ず呌ばれる単䞀のアヌティファクトを公開したす。





リリヌス定矩トリガヌプロパティを䜿甚しお、このアセンブリ定矩をリリヌス定矩のセットに関連付けたす。 ぀たり、以䞋で匷調衚瀺されおいる各リリヌス定矩は、VSO.RM.CIビルドの終了時に自動的にアクティブ化されたす。





各リリヌス定矩には固有の環境があるこずに泚意しおください。RMはメディアの䞊列実行をサポヌトしないため、9぀のリリヌス定矩を䜿甚せざるを埗たせん。この機胜はたもなく登堎したす。この堎合、9぀のリリヌス定矩を1぀のリリヌス定矩に結合したすアセンブリのトレヌサビリティを向䞊させる9぀の同時環境がありたす。

䞀般的な考え方は、各リリヌス定矩がテストに必芁なバむナリをダりンロヌドし、テスト環境をセットアップし、叀いバむナリず新しいバむナリ䟝存サヌビスずテストDLLを削陀し、VsTestタスク結果を発行するを䜿甚しおテストを実行するこずです、レポヌトの準備ずその埌の分析を簡玠化したす、もう䞀床環境をクリヌンアップしたす。 埌で、このブログのリリヌス決定デバむスを詳しく芋おいきたす。

コヌドを凊理しおテストを公開するプロセスは、抂略次のずおりです。



゚ヌゞェントプヌルの構成

開始するには、最初に継続的統合CIアセンブリおよびリリヌス定矩のビルド/リリヌス゚ヌゞェントを構成する必芁がありたす。 通垞、䞀郚のサヌバヌでは、RM / SPS / TFSサヌビスを展開するために、ビルド/リリヌス゚ヌゞェントプヌルのタスクが最初に起動され、これらのタスクのために他のサヌバヌでテストが実行されたす。 この堎合、同じテストの耇数のむンスタンスを同時に䜿甚するために、゚ヌゞェントコンピュヌタヌにサヌビスを展開するこずにしたした。



各テストには独自の芁件があり、ホストされた゚ヌゞェントプヌルの䜿甚は蚱可されたせんでした。 このため、RMAgentPoolずいう単䞀の゚ヌゞェントプヌルを䜜成したした。 RM.CDPごずに個別のコンピュヌタヌを甚意したした*リリヌス定矩、それぞれにビルド/リリヌス゚ヌゞェントをむンストヌルし、これらのコンピュヌタヌをRMAgentPoolプヌルに远加したした。



これを行うために、䞋の図で匷調衚瀺されおいる[゚ヌゞェントのダりンロヌド]リンクを䜿甚しお、各テストコンピュヌタヌに゚ヌゞェントをダりンロヌドしたした。 ゚ヌゞェントのzipファむルを解凍し、「Team Foundation ServerのURL」パラメヌタヌ「Team Foundation ServerのURL」でアカりントを指定しお構成したした䟋 https : //OurAccount.visualstudio.com 。



各コンピュヌタヌには、「RmCdpCapability」ず呌ばれる新しいナヌザヌ機胜が割り圓おられおいたす。 このパラメヌタヌの倀によっおコンピュヌタヌの目的が決たりたした。たずえば、連続統合アセンブリ甚に準備されたコンピュヌタヌでは、パラメヌタヌRmCdpCapability = CIが䜿甚されたした。





別の䟋RM.CDP.TfsOnPremリリヌス決定が実行された゚ヌゞェントでは、パラメヌタヌ「RmCdpCapability = TfsOnPrem」が䜿甚されたした。







次に、リリヌス定矩は、RmCdpCapabilityパラメヌタヌを、適切な゚ヌゞェントで実行するテストの芁件ずしお䜿甚したした。



RM.CDPリリヌス定矩の抂芁*

甚語に関する泚蚘Webクラむアントに基づくRMは、Team Web AccessTWAずも呌ばれたす



VSTSは、単䞀のSprintモデルを䜿甚しお開発される耇数のマむクロサヌビスのセットであるこずに泚意しおくださいすべおのグルヌプは同じ3週間サむクルで動䜜したすが、各グルヌプは互いに独立しお展開されたす。 RMはそのようなマむクロサヌビスの1぀であり、SPSやTFSなどの他のマむクロサヌビスに䟝存しおいたす。

RM TWAに察しお実行するテストの簡単な説明

  1. RMOのテスト
    • RM.CDP.RmEqTfsRMスプリントリリヌスず䟝存サヌビスSPS、TFSのバヌゞョンが䞀臎する堎合、RMOのAPIに基づいお耇雑なテストe2eを実行したす。 たずえば、RM、SPS、およびFTSはS92スプリントにありたす。
    • RM.CDP.RmGtTfsRMリリヌスバヌゞョンがスケヌルナニットの䟝存サヌビスSPS、TFSよりも先にある堎合、RMOリリヌスバヌゞョンの耇雑なテストe2eを実行したす。 たずえば、RMはS92にあり、SPS / TFSはS91にありたす。
    • RM.CDP.RmLtTfsRMリリヌスバヌゞョンがスケヌルナニットの䟝存サヌビスSPS、TFSの背埌にある堎合、RMOリリヌスバヌゞョンの耇雑なテストe2eを実行したす。 たずえば、RMはS91にあり、SPS / TFSはS92にありたす。


    䞊蚘のテストマトリックスにより、䟝存するSPS / TFSサヌビスが展開されおいるかどうかに関係なく、スケヌル単䜍でRMOを展開できたすこれらのサヌビスが新しい機胜に䟝存しおいない堎合;この堎合、RmGtTfsテストスむヌトは倱敗したす、少なくずもそうするこずを望みたす 。
  2. RMオンプレミステスト
    • RM.CDP.TfsOnPremAPIずナヌザヌむンタヌフェむスの䞡方に基づいおRMオンプレミステストを実行したす。
  3. テストを曎新する
    • RM.CDP.DevFabricUpgradeRMOアップグレヌドスクリプトをテストしたすたずえば、S91からS92ぞ。
    • RM.CDP.OnPremUpgradeRMオンプレミス曎新スクリプトをテストしたす。
  4. X-plat RMテスト、すなわち RM゚ヌゞェントはLinux / iOSで実行されたす。
    • RM.CDP.XPlat


RM.CDPリリヌス定矩の開発*

RM.CDP.TfsOnPremリリヌス定矩は、他のリリヌス定矩で䜿甚される暙準的なテンプレヌトを䜜成するので、詳しく芋おいきたす。

  1. 以䞋のスクリヌンショットに瀺すように、リリヌス定矩は適切な゚ヌゞェントで実行されるように構成されおいたす 。RM.CDP.TfsOnPrem->線集->環境-> ...->゚ヌゞェントオプション->オプションタブ。
  2. 次に、リリヌス定矩はアヌティファクトのダりンロヌドをスキップしたすアヌティファクトのダりンロヌドをスキップ 





    CIの継続的むンテグレヌションアセンブリは、数GBのサむズのドロップず呌ばれる唯䞀の倧きなアヌティファクトを公開するため、アヌティファクトのダりンロヌドはスキップされたすが、すべおのテストには異なるファむルのサブセットが必芁です。

    珟時点では、RMでは、アセンブリによっお公開されたアヌティファクトのサブセットを簡単にダりンロヌドできたせん。この機䌚が珟れたら、次の2぀のこずを行いたす。1 「RmDrop」、「SpsDrop」など2RM.CDPのリリヌスを決定するために必芁なアヌティファクトをダりンロヌドしたす*。
  3. 各リリヌス定矩は、\\ファむルリ゜ヌスにあるdownloadArtifacts.ps1ファむルを実行しお、暙準ファむルのセットアセンブリの特定のフラグメントをダりンロヌドできるvssbinfetch.exeプログラムを含むをダりンロヌドしたす。 次に、リリヌス定矩は、vssbinfetch.exeプログラムを呌び出す「vssbinfetch」タスクを䜿甚しお、テストスクリプトのアセンブリから必芁なバむナリをダりンロヌドしたす 。 たずえば、RM.CDP.RmEqTfsはSPS、TFS、およびRMOのバむナリファむルをダりンロヌドし、RM.CDP.TfsOnPremはTFSをオンプレミスでダりンロヌドしたす。 これらの2぀のタスクを以䞋に匷調衚瀺したす。 リリヌスを決定するず、同時にコンピュヌタヌがクリヌンアップされ、叀いバむナリが削陀されたす。

  4. 次に、リリヌス定矩により、必芁なサヌビスずdllテストラむブラリがコンピュヌタヌに展開されたす。 たずえば、tfatはコンピュヌタヌにTFSオンプレミスサヌビスをむンストヌルする内郚ツヌルです。

  5. 最埌に、リリヌス定矩はテスト環境ファむルをセットアップし、Visual Studio Testタスクたたは䜿甚したいVsTestタスクを呌び出したす。 これにより、「TfsOnPrem」ずいう名前でテスト結果が公開されたす。

  6. 通垞、リリヌスの決定は、「テスト倱敗時に゚ヌゞェントを䞀時停止」タスクが完了し、必芁に応じおクリアされた埌に完了したす。 原則ずしお、「䞀時停止」タスクは無効になっおいたす。これに぀いおは、次のブログ投皿で説明したす。


テスト結果分析

開発者が倉曎を加えるず、誰の倉曎が倱敗の原因ずなったかを簡単に刀断できたす。 たずえば、次のスクリヌンショットでは、VSO.RM.CI_rmmaster_20151231.5のビルド埌にテストが倱敗したした。 匷調衚瀺されたリリヌスをダブルクリックしお、リリヌス抂芁ペヌゞを開きたす。





次に、[リリヌスの抂芁]ペヌゞの[テスト結果]セクションに移動し、このテストの埌、2぀のナヌザヌむンタヌフェむステストが倱敗し始めたこずを確認したす。 以䞋で匷調衚瀺されおいるテストぞのリンクをクリックするず、テストセクションに移動したす。





[テスト結果]サブタブは、問題の詳现な分析のための貎重な背景情報を提䟛したす。





テストログは、[実行の抂芁]サブタブで利甚できたす。

リリヌスサマリペヌゞの[コミット]タブを䜿甚しお、リグレッションずの可胜な関係を刀断するために、このリリヌスの固定に関する詳现情報を取埗できたす。 たずえば、次のスクリヌンショットは、このテストでのナヌザヌむンタヌフェむスの倉曎によっお、2぀のテストが倱敗する可胜性があるこずを瀺しおいたす。





RMを䜿甚したテストの利点

RMを䜿甚したテストには、次の利点がありたす。

  1. すべおのテストスむヌトを䞊行しお実行しお、アセンブリをすばやく怜蚌したす。
    • 最も遅いリリヌス定矩を怜出し、テストスむヌトを実行するために远加の゚ヌゞェントを远加しお、䞊列凊理を高速化できたす。 たずえば、継続的むンテグレヌションを構築するために2台のコンピュヌタヌがあり「RmCdpCapability = CI」、RM.CDP.RmEqTfsには別のコンピュヌタヌを远加する予定です。完了に時間がかかるためです。
  2. この蚭定により、さたざたなブランチを簡単にテストできたす。 機胜ブランチfeatures / rmmasterに継続的な統合が構成されおいるため、䞋のスクリヌンショットに瀺すように、releases / M92などのリリヌスブランチからアセンブリをキュヌに入れるこずができたす。 ビルドの最埌に、同じRM.CDP。*リリヌス定矩がアクティブ化され、このリリヌスブランチからのバむナリコヌドが凊理されたす。
    • ブランチでの柔軟な䜜業は、次のシナリオで拡匵できたす開発者にずっお面倒になる前にコヌドをテストしたすルヌルずしお、開発者が倚数の倉曎を行う堎合に実行する。たずえば、/ users / rahudha / rifiブランチで。 䞻なアむデアは、開発者がグルヌプのリ゜ヌスを再利甚するこずで、開発環境にテストむンフラストラクチャをセットアップせずに同じ問題を解決できるずいうこずです。


  3. 自動テスト環境ず同じテストを実皌働環境で実行できたすRMOを䜿甚しお実皌働環境に展開するためこれがRMOを䜿甚しおRMOを展開する方法です、同じテストタスクを䜿甚しお展開をテストできたす。
  4. すべおのテストスむヌトが同じバむナリコヌドセットに適甚されるため、「ビルド品質ずは」ずいう質問に簡単に答えるこずができたす。原則ずしお、ビルド環境を実皌働環境に展開する前にビルド品質に぀いお知りたいず思いたす。 以䞋のスクリヌンショットは、ビルド品質を決定するための簡単なク゚リを瀺しおいたす。





今埌数か月以内に、この機胜はリリヌス抂芁ペヌゞずさらに統合される予定です。



おわりに

最初は、開発プロセスをテストするずきにRMOを䜿甚しお、その機胜を理解するだけでした。 時間が経぀に぀れお、RMOの有効性は以前に䜿甚したテストむンフラストラクチャの有効性よりも倧幅に高いずいう結論に達したした。 開発者は、時間のかかるロヌカルテスト環境のセットアップなしに、䞻芁な倉曎をテストできるこずを奜みたす。



これで、RM開発チヌムがRMを䜿甚しおテストを自動化する方法がわかりたした。 私たちの経隓が、テストプロセスを自動化する方法に぀いおのアむデアを提䟛するこずを願っおいたす。



この蚘事の第2郚では 、いく぀かの蚭蚈゜リュヌション、リリヌス管理の線成プロセスで発生した問題、およびこれらの問題を解決する方法に焊点を圓おたす。



All Articles