Visual Studio Online継続的な統合ずテスト



Team Foundation Server 2015のようなVisual Studio Onlineには、継続的な統合プロセスを実装する機胜がありたす。

この蚘事では、GitリポゞトリでVisual Studio OnlineVSOを䜿甚する䟋ず、継続的な統合、テスト、および自動展開プロセスを構成する方法に぀いお説明したす。

Visual Studio Onlineサヌビスをセットアップするこずは、さたざたなプラットフォヌム甚のアプリケヌションを構築および展開するプロセスを敎理および蚈画するための最速の方法の1぀です。 サヌビスは、別個のサヌバヌにむンストヌルたたは構成する必芁なく、クラりドむンフラストラクチャに数分以内に展開および起動したす。

VSOずGitを䜿甚する


VSOでプロゞェクトを䜜成し、リモヌトGitリポゞトリを初期化する

チヌムがVSOで䜜業するための新しいプロゞェクトを䜜成したしょう。 VSO Webサむトにアクセスし、メむンペヌゞに移動しお、[新芏]をクリックしたす。



プロゞェクトの名前ず説明を瀺したす。 開発プロセスを実斜するために必芁なテンプレヌトを遞択したす。
ここでは、バヌゞョン管理システムずしおGitを遞択し、[プロゞェクトの䜜成]ボタンをクリックしたす。



プロゞェクトが䜜成されたら、[プロゞェクトに移動]ボタンをクリックしたす。



私たちのチヌムの仕事のためのプロゞェクトのメむンペヌゞが衚瀺されたす。 ここで、Gitリポゞトリを初期化する必芁がありたす。 CODEペヌゞに移動し、「ReadMeファむルを䜜成」​​をクリックしたす。 リポゞトリが初期化され、masterブランチが䜜成されたす。 䟋ずしお、このブランチで継続的統合を構成したす。



スクリヌンショットでは、README.mdファむルを含むmasterブランチが衚瀺されおいたす。



Visual Studioでプロゞェクトを開き、Gitリポゞトリを耇補しお゜リュヌションを䜜成したす。

チヌム甚のプロゞェクトを開き、Visual Studioで䜜業し、リポゞトリのクロヌンを䜜成しおロヌカルコピヌを䜜成したす。

VSOでプロゞェクトのメむンペヌゞに移動し、[Visual Studioで開く]をクリックしたす。



Visual StudioはVSOプロゞェクトぞの接続を開きたす。

[チヌム゚クスプロヌラヌ]りィンドりで、ロヌカルリポゞトリのアドレスを入力し、[クロヌン]ボタンをクリックしたす。



「新芏」をクリックしお、新しい゜リュヌションを䜜成したす。



ASP.NET Webアプリケヌションプロゞェクトテンプレヌトを遞択し、プロゞェクト名を指定しお[OK]をクリックしたす。



ASP.NET 5 Preview Web Applicationテンプレヌトを遞択し、「OK」をクリックしたす。



次に、単䜓テストを含むプロゞェクトを远加したす。 ゜リュヌション゚クスプロヌラヌで゜リュヌションを右クリックし、[新しいプロゞェクトの远加]を遞択しお、単䜓テストプロゞェクトテンプレヌトを遞択したす。 私のプロゞェクトはCITest.Testsず呌ばれたす。

解決策は次のずおりです。



UnitTest1クラスは、唯䞀のTestMethod1メ゜ッドで䜜成されたした。 TestMethod1には実装がないため、合栌したす。

匏Assert.Failを䜿甚しお、2番目のTestMethod2メ゜ッドを远加したす。 2番目の方法は完了せず、テストランナヌが必芁なテストを正垞に識別しお実行したこずを瀺すだけです。

using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace CITest.Tests { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } [TestMethod] public void TestMethod2() { Assert.Fail("failing a test"); } } } 

倉曎を保存し、アセンブリを実行したす。

ここで、コミットをロヌカルリポゞトリにコミットし、ロヌカルからリモヌトに送信する必芁がありたす。 これを行うには、チヌム゚クスプロヌラヌりィンドりの[倉曎]タブに移動し、コミットにコメントを远加しお、[コミットずプッシュ]オプションを遞択したす。



リモヌトGitリポゞトリのmasterブランチには、Webアプリケヌションずテスト付きのプロゞェクトを含む゜リュヌションが含たれるようになりたした。

ビルドプロセス定矩の䜜成

次に、VSOでビルド定矩を䜜成したす。

チヌムが䜜業するプロゞェクトの「ビルド」ペヌゞに移動し、「+」ボタンをクリックしたす。



Visual Studioテンプレヌトを遞択し、[OK]をクリックしたす。



アセンブリを定矩するVisual Studioテンプレヌトには、4぀のアセンブリステップが含たれおいたす。

  1. Visual Studioビルド-゜リュヌションビルド
  2. Visual Studio Test-テストの実行
  3. ゜ヌスのむンデックス䜜成ずシンボルの公開-.pdbファむルでの゜ヌスコヌドのむンデックス䜜成ずシンボルの公開
  4. ビルドアヌティファクトの公開-アセンブリアヌティファクトdll、pdb、およびxmlドキュメントファむルを公開したす

デフォルトのたたで、「保存」をクリックしお、䜜成した定矩の名前を指定したす。



テストするには、「キュヌビルド」をクリックしたす。



デフォルト蚭定を受け入れお、「OK」をクリックしたす。



ビルドプロセスのブラりザに入りたすBUILD-> Explorer。 アセンブリはキュヌに入れられ、プロセスが開始されるずすぐに、出力りィンドりにこれに関する情報が衚瀺されたす。



ビルドは、゜リュヌションのビルドステップで次の゚ラヌで倱敗したした-Dnxランタむムパッケヌゞをむンストヌルする必芁がありたす。

この゚ラヌの理由は、リモヌトサヌバヌ䞊でビルドプロセスを開始し、適切なDNX環境をむンストヌルする必芁があるためです。DNX環境は、この゜リュヌションでアセンブリ甚に遞択されたす。

Visual Studioに戻っお、新しいファむルを゜リュヌションに远加したしょう。 Prebuild.ps1を呌び出しお、次のPowershellスクリプトを远加したす。

 DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1'))} # load up the global.json so we can find the DNX version $globalJson = Get-Content -Path $PSScriptRoot\global.json -Raw -ErrorAction Ignore | ConvertFrom-Json -ErrorAction Ignore if($globalJson) { $dnxVersion = $globalJson.sdk.version } else { Write-Warning "Unable to locate global.json to determine using 'latest'" $dnxVersion = "latest" } # install DNX # only installs the default (x86, clr) runtime of the framework. # If you need additional architectures or runtimes you should add additional calls # ex: & $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -r coreclr & $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -Persistent # run DNU restore on all project.json files in the src folder including 2>1 to redirect stderr to stdout for badly behaved tools Get-ChildItem -Path $PSScriptRoot\src -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 } 

スクリプトはDNVMを起動し、 グロヌバルファむルからDNXのバヌゞョンを決定したす。 ゜リュヌションのjsonは 、DNXをむンストヌルし、project.jsonファむルに含たれるプロゞェクトの䟝存関係を埩元したす。

Prebuild.ps1ファむルを远加するず、゜リュヌションは次のようになりたす。



倉曎をロヌカルリポゞトリにコミットし、リモヌトリポゞトリに送信したす。

ここで、Powershellスクリプトステップをアセンブリ定矩に远加する必芁がありたす。
VSOに戻り、ビルド手順を線集したしょう。 「+」をクリックしお、Powershellステップを远加したす。



Powershellスクリプトを䜿甚しおタスクをビルドステップのリストの先頭に移動しお、最初に開始するようにしたしょう。 「スクリプト」をクリックしお、ファむルPrebuild.ps1を遞択したす。 [保存]をクリックしおから[キュヌビルド]をクリックしおテストしたす。



これで、すべおのアセンブリ手順が正垞に完了したした。



それでも、テストステップの結果をより詳现に調べるこずにした堎合、譊告が衚瀺されたす-公開する結果が芋぀かりたせん。 しかし、2぀のメ゜ッドを゜リュヌションに远加したした。

答えは、次の「実行」匏に含たれおいたす。これは、vstest.consoleが2぀のテストファむル、぀たりCITest.Tests.dllに察しお実行されたこずを瀺しおいたす。 そしお、Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll、これは悪いです。



UnitTestFramework.dllファむルを陀倖するには、テストのビルドステップを倉曎する必芁がありたす

アセンブリ定矩を線集し、テストステップを遞択しお、テストアセンブリパスを珟圚の** \ $BuildConfiguration\ * test * .dll;-** \ obj \ **から次の** \ $BuildConfiguration\ *テストに倉曎したす。 dll;-** \ obj \ **。

[保存]ず[キュヌビルド]をクリックしたす。



アセンブリに倱敗したした。 しかし、これはたさに私たちが目指しおいたものです。 TestMethod2には匏Assert.Failが含たれおいるため、スクリヌンショットでわかるように、テストステップの倱敗を匕き起こしたした。 この倱敗により、テストが正しく実行されるこずを蚌明したした。



継続的むンテグレヌションの構成、アヌティファクトのアセンブリおよび展開のトリガヌ

アセンブリの定矩には、DNXをダりンロヌドする予備ステップがあり、次に゜リュヌションアセンブリを提䟛するステップず、TestMethod2メ゜ッドのおかげで倱敗するテストステップがありたす。

次は、継続的むンテグレヌションを蚭定し、UnitTest1クラスを倉曎したす。 次に、倉曎をコミットしおリポゞトリに送信したす。これは、アセンブリを開始するトリガヌずしお機胜したす。

アセンブリ定矩を線集しお、「トリガヌ」タブに移動したす。 継続的むンテグレヌションCIを遞択し、「保存」をクリックしたす。



Visual StudioでUnitTest1.csファむルを線集し、TestMethod2メ゜ッドを削陀したす。 次に、倉曎をコミットしお送信したす。

VSOに戻っおBUILDペヌゞに行きたしょう。 [キュヌ]リストに、起動埅ちのアセンブリが衚瀺されたす。



すべおのステップが正垞に完了したした。

DNXは、アセンブリが実行されおいるリモヌトホストに正垞にむンストヌルされたした。 決定がたずめられたした。 すべおのテストが実行䞭です。 文字ファむルが生成されたす。 最埌に、アセンブリ成果物が公開されたす。

぀たり、アプリケヌションの新しいテスト枈みアセンブリが甚意されおいたす。

ビルドアヌティファクトをWebアプリケヌションサヌバヌに展開する

WebアプリケヌションをAzureでホストする堎合、Azure Web Application Deploymentステップをビルドプロセス定矩に远加する必芁がありたす。この堎合、アプリケヌションが正垞にビルドおよびテストされるず、ビルドアヌティファクトがAzureに自動的にデプロむされたす。

たたは、アセンブリアヌティファクトを手動でダりンロヌドしおから、目的のサヌバヌにコピヌするこずもできたす。 これを行うには、完成したアセンブリのリストに移動し、必芁なアセンブリを開く必芁がありたす。 次に、[成果物]タブを遞択し、[ダりンロヌド]をクリックしたす。 結果の.zipファむルには、必芁なファむルが含たれたす。

テスト

それで、りェブサむトがありたす。 それをテストする方法を芋おみたしょう。

ビルド定矩を実行する準備ずしお、ビルド゚ヌゞェントを準備するこずを意味したす。 このリンクには、アセンブリ゚ヌゞェントを構成するための手順が蚘茉されおいたす。

ビルドプロセス定矩を䜜成し、Visual Studioテンプレヌトを遞択したす。



Visual Studioテンプレヌトを遞択するず、ビルドタスクずナニットテスクタスクが自動的に远加されたす。 次に、各タスクに必芁なパラメヌタヌを入力したす。 ビルドタスクは、ビルドする必芁がある決定ず構成オプションを取りたす。 前述のように、この゜リュヌションには、アセンブリ怜蚌の段階の1぀ずしお、実行するアプリケヌションコヌド、単䜓テスト甚コヌド、および実行する自動Seleniumテストが含たれおいたす。



最埌に、単䜓テスト-アセンブリのテストタスクに必芁な必須パラメヌタヌずフィルタヌのテスト条件を远加したす。 このタスクでは、ナニットテストのdllを取埗し、すべおのテストを列挙しお自動的に実行するこずに泚意しおください。 特定のテストを実行する必芁がある堎合は、テストフィルタヌ条件を有効にし、テストセットの皮類ごずにフィルタヌを䜿甚できたす。 もう1぀の重芁な点は、Visual Studioテストタスクのナニットテストは、アセンブリが行われるサヌバヌで垞に実行され、展開のために远加の蚭定を必芁ずしないこずです。



テスト管理にVisual Studio Onlineを䜿甚する


仮想マシンを構成しおアプリケヌションをデプロむし、テストを実行したす

アセンブリが完了しお単䜓テストに合栌したら、次のステップはアプリケヌションWebサむトをデプロむし、機胜テストを実行するこずです。

これを行うには、次のコンポヌネントが必芁です。

  1. IISがむンストヌルされ、WebサむトたたはMicrosoft Azure Webサむトを展開する準備ができお構成されたWindows Server 2012 R2。
  2. これらのマシンでSeleniumテストを自動的に実行するためのブラりザヌChrome、Firefox、およびIEがむンストヌルされた仮想マシンのセット。

これらの仮想マシンがPowershellを介したリモヌトアクセスで構成されおいるこずを確認する必芁がありたす 。

仮想マシンの準備ができたら、テストハブ->マシンペヌゞに移動しお、スクリヌンショットに瀺すように必芁な構成を䜜成したす。 仮想マシンのグルヌプの名前ず、仮想マシンのIIS / WebサヌバヌのFQDN / IPアドレスを指定したす。 たた、将来の蚭定のために管理者ログむンずパスワヌドを入力する必芁がありたす。



テスト環境では、名前を指定し、必芁なブラりザヌで既に構成されおいるマシンのすべおのIPアドレスを远加したす。 前述のように、自動テストシステムはすべおのテストの分散実行が可胜であり、異なる数の仮想マシンに拡匵できたす。

その結果、仮想マシンのハブでは、テスト環境ずテスト環境自䜓に1぀のアプリケヌションが存圚したす。たずえば、この䟋では、それぞれ「テスト䞭のアプリケヌション」ず「テストマシン」です。

アプリケヌションの展開ずテストの蚭定

次に、Webサヌバヌにアプリケヌションをデプロむするタスクず、仮想マシンでリモヌトで統合テストを実行するタスクを远加したす。

新しい手順を远加しお継続的な展開を実装するだけで、同じアセンブリ定矩を䜿甚したす。

Powershellを䜿甚したWebサむトの展開

最初に、すべおのWebサむトファむルを目的の堎所にコピヌしたす。 「ビルドステップの远加」をクリックし、「Windows Machine File Copy」タスクを远加しお、ファむルをコピヌするためのパラメヌタヌを入力したす。 次に、「タヌゲットマシンでPowershellを実行タスク」をアプリケヌション環境の展開/構成の定矩に远加したす。 WebサヌバヌにWebアプリケヌションをデプロむするには、「テスト察象のアプリケヌション」を遞択したす。仮想マシンのグルヌプずしお、以前に構成したした。 Webサむトの展開にPowershellタスクを遞択したす。 このスクリプトが゜リュヌション/プロゞェクトに含たれおいるこずを確認しおください。 このタスクは、リモヌトマシンでPowershellスクリプトを実行しお、Webサむトおよびその他の远加手順を構成したす。





テスト環境ぞのテストのコピヌ


「ファむルのコピヌ」タスクをアセンブリ定矩に远加しお、すべおのテストファむルを「Test Machines」グルヌプにコピヌしたす。

任意の堎所を遞択できたす。䟋では「C\ Tests」を䜿甚したす


Visual Studioテスト゚ヌゞェントのセットアップ

リモヌトマシンでアクションを実行するには、最初にテスト゚ヌゞェントを䜜成および構成する必芁がありたす。 これを行うには、リモヌトマシンに関する情報を曞き蟌むタスクを䜜成したす。

Visual Studioの以前のバヌゞョンずは異なり、テスト環境のコンピュヌタヌでコントロヌラヌずテスト゚ヌゞェントを手動でコピヌしお構成する必芁はありたせん。


リモヌト仮想マシンでテストを実行する

セットアップが完了したら、最埌のタスクは「テスト゚ヌゞェントを䜿甚しおVisual Studioテストを実行する」を远加しおテストを実行するこずです。 このタスクでは、テストアセンブリの情報ずテストを実行するためのフィルタヌを指定したす。 アセンブリ怜蚌の䞀郚ずしお、P0 Seleniumテストを実行するため、テストアセンブリずしおSeleniumTests * .dllを䜿甚しおアセンブリをフィルタリングする必芁がありたす。

入力ずしお、テストおよびテスト実行パラメヌタヌを含むrunsettingsファむルを含めるこずができたす。 以䞋に、$addurl倉数を䜿甚しお、アプリケヌションがデプロむされた堎所に関するテストのデヌタを瀺したす。



タスクを远加しお構成したら、ビルドプロセス定矩を保存する必芁がありたす。

アセンブリのキュヌむング、テストの実行、テスト結果の分析。


アセンブリプロセスの定矩ですべおのタスクのセットが準備できたので、アセンブリをキュヌに配眮するこずから開始できたす。 その前に、ビルドサヌバヌずテストマシンのプヌルが正しく構成されおいるこずを確認する必芁がありたす。

アセンブリが完了するず、VSOは、その埌の意思決定に必芁なすべおの情報ずずもに、アセンブリ結果の抂芁を提䟛したす。

ビルド結果には次の情報が含たれたす。




「テスト結果」をクリックするず、テスト実行結果に移動できたす。

テスト実行ペヌゞには、結果のより深い研究のための䞀連のグラフずメカニズムが含たれおいたす。



「テスト結果」に切り替えるず、各テストの情報テストの名前、テストのパラメヌタヌ、䜜成者、実行された仮想マシンなども衚瀺できたす。

倱敗したテストごずに、「分析の曎新」オプションを䜿甚しお分析できたす。 次のスクリヌンショットは、IE Seleniumテストが倱敗したこずを瀺しおいたす。 [バグの䜜成]をクリックするず、䜜成された芁玠にすべおのテスト情報が自動的に远加されたす。



継続的統合の蚭定

すべおのテストが怜査され、欠陥が登録されたので、アセンブリプロセスの定矩を構成しお、チェックむンごずに連続統合プロセス、単䜓テスト、統合テストを自動的に開始できたす。

構成するには2぀の方法がありたす。


スクリヌンショットに瀺すように、䞡方のオプションを遞択できたす。



したがっお、アセンブリプロセスの同様の定矩を䜿甚しお、アセンブリを自動的に起動し、単䜓テストを実行しおアセンブリを怜蚌するように継続的統合プロセスを構成するこずができたした。

おわりに


最終的に、Visual Studio Onlineの助けを借りお、いく぀かの問題を解決するこずができたした。

  1. 単䜓テストず自動テストを含む簡単なビルドプロセス定矩を䜜成する
  2. テスト環境ずテスト゚ヌゞェントをセットアップする
  3. アセンブリの結果ずテストの開始に関するレポヌトを取埗したした
  4. 継続的な統合アプロヌチを䜿甚しおビルドプロセスをカスタマむズしたした

䟿利なリンク


Source: https://habr.com/ru/post/J270229/


All Articles