0

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 ビルドに関する知識が私を失望させています。誰かが私に何か指針を与えることができますか?

4

2 に答える 2

0

最後にたどり着きました!

したがって、これを設定する行のどこかで、app.config で次のような結果になりました。

 <component
          name="IE"
          type="Baseclass.Contrib.SpecFlow.Selenium.NUnit.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin"
          service="OpenQA.Selenium.Remote.RemoteWebDriver, WebDriver"
          instance-scope="per-dependency">
    <parameters>
      <parameter name="browser" value="InternetExplorer" />
      <parameter name="url" value="http://192.168.1.3:4444/wd/hub" />
    </parameters>
  </component>

問題は (エラーに示されているように)、OpenQA.Selenium.Remote.RemoteWebDriver が見つからなかったことです。Bassclassページで見つけた例の1つでこれを見たと思います。これを OpenQA.Selenium.IWebDriver に変更した後、すべてが正常に機能し、nUnit は TFS 2010 ビルド サーバーで specFlow テストを実行できました。ビルドが結果を解析しようとしたときに、MSTest 10 ではなく 11 を使用しようとしたという別の問題が発生しました (VS 2012 を使用していたためと思われます)。ただし、この TFS マシンは単なる概念実証であり、Windows 7 の Virtual PC で実行されている Windows 2008 32 ビット版でした (64 ビットを実行できなかったため、ビルド サーバーに VS2012 をインストールできませんでした)。MStest 11 用の新しい環境変数を作成し、MSTest 10 を指すようにして、これを解決しました。プロセス全体が完全に機能するようになりました。

于 2013-10-16T12:18:42.780 に答える
0

しかし、最初のエラーは基本的に、TFS の nunit サポートが CreateProcess を呼び出したときにファイルを見つけられないことを示しています。あなたが言うように、ローカル テストの実行では機能するので、テストを実行しているマシンに NUnit がインストールされていないのと同じくらい簡単です。あなたのために?

于 2013-10-07T12:15:52.480 に答える