Specflow UI テストを TFS ビルドで動作させようとしている最中で、非常に近い状態です。
いくつかのブラウザーで同じテストを実行できるようにしたかったので、調査の結果、次のことがわかりました。
http://www.baseclass.ch/blog/Lists/Beitrage/Post.aspx?ID=4&mobile=0
そして、ローカルでのテスト実行では夢のように機能します。次のステップは、TFS 2010 のビルド中にセレン グリッドを呼び出すようにすることでした。
nunit コミュニティ ビルド タスクをビルド テンプレートに取り込んだ後、解決できないエラーが発生しました。ビルドで次のエラーが報告されます。
エラー: 指定されたファイルが見つかりません。スタック トレース: System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at TfsBuildExtensions.Activities.CodeQuality.NUnit.RunProcess(String fullPath, String workingDirectory, String arguments) in d:\Projects \CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs: TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishMSTestResults(String resultTrxFile, String collectionUrl, String buildNumber, String teamProject, String platform の 339 行目、文字列フレーバー) d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:TfsBuildExtensions.Activities.CodeQuality.NUnit の 394 行目。
ただし、これは単にnunitがカスタムアセンブリを読み込めないと言っているだけなので、より深いエラーを隠しているようです。そのため、ビルド サーバーのバイナリ フォルダーで nunit ログを調べたところ、テスト実行の .xml ファイルに別のエラーが見つかりました。
System.Configuration.ConfigurationErrorsException : タイプ 'OpenQA.Selenium.Remote.RemoteWebDriver、Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin' が見つかりませんでした。「MyType、MyAssembly」などのアセンブリ修飾が必要な場合があります。
Autofac.Configuration.ConfigurationRegistrar.LoadType (String typeName、アセンブリ defaultAssembly) で Autofac.Configuration.ConfigurationRegistrar.RegisterConfiguredComponents (ContainerBuilder ビルダー、SectionHandler 構成セクション) で Autofac.Configuration.ConfigurationRegistrar.RegisterConfigurationSection (ContainerBuilder ビルダー、SectionHandler 構成セクション) で Autofac.Configuration. Core.ConfigurationModule.Load(ContainerBuilder builder) で Autofac.Module.Configure(IComponentRegistry componentRegistry) で Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules) で Autofac.ContainerBuilder.Build(ContainerBuildOptions オプション) で RegistrationForm.Tests.Acceptance.Features c の .UserRegistrationFeature.FeatureSetup():\Builds\1\Testing\RegistrationForm - Nightly - Main\Sources\Testing\RegistrationForm\Main\RegistrationForm.Tests.Acceptance\Features\UserRegistration.feature.cs:0 行目
ここから、カスタム アセンブリへのパスを調べ始めました。これは、プロジェクトの app.config ファイルで指定されます (ビルド中に変換されます。また、ファイルが変換されていることを確認し、ビルド サーバーの binaries ディレクトリにあります)。ファイルの関連セクションはこれです。
<specFlow>
<stepAssemblies>
<stepAssembly assembly="SpecFlow.Assist.Dynamic" />
<stepAssembly assembly="Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings" />
</stepAssemblies>
<unitTestProvider name="SeleniumNUnit" />
<plugins>
<add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.2.0\tools" />
</plugins>
これはローカルで機能します。変換されたファイルのパスを変更するだけでよいと考えました。最初は、作業ディレクトリがバイナリ ディレクトリであると想定していたので、変換ファイルには次のものがあります。
<specFlow>
<plugins xdt:Transform="Replace">
<add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="." />
</plugins>
dll は同じディレクトリ (バイナリ) にあるため、"."、""、".\" を試しましたが、どれも機能しませんでした。そのため、もう少し考えてエラーを注意深く読んだ後、ビルド サーバーの Sources フォルダーを調べる必要があると考えました。Dll はパッケージ フォルダー (nuget パッケージの復元) にあるため、パスはローカルで使用するパスと同じにする必要があります。これもうまくいきませんでした。では、エラーをスローする「.feature」ファイルへの相対パスはどうでしょうか? これには単に追加の「..\」が必要でした-まだ運がありません。
考えられるすべてのパスを試したと思いますが、specflow プラグインと TFS ビルドに関する知識が私を失望させています。誰かが私に何か指針を与えることができますか?