3

私はこれを機能させる最後のマイルにいます。

Local.testsettings の parallelTestCount 設定を変更して、テスト プロジェクトで複数のテストを同時に実行しています。

  <Execution parallelTestCount="5">
    <TestTypeSpecific />
    <AgentRule name="Execution Agents">
    </AgentRule>
  </Execution>

VS での並列テストの問題を解決するために、ホット フィックス KB2619410 をインストールしました。

UnitTesting.AssemblyInitialize()Selenium Server ハブとノードを起動します。でこれらのプロセスを強制終了しUnitTesting.AssemblyCleanup()ます。

java -jar C:\...\selenium-server-standalone-2.25.0.jar -role hub
java -jar C:\...\selenium-server-standalone-2.25.0.jar -role node -hub http://localhost:4444/grid/register -browser browserName=chrome,maxInstances=5,platform=WINDOWS

5 つのスレッドを生成してRemoteWebDriverインスタンスを作成し、自分の Web サイトにログインします

    Dim desiredCapabilities As Remote.DesiredCapabilities = Remote.DesiredCapabilities.Chrome()
    Dim size As String = "--window-size={0},{1}"
    size = String.Format(size, browserWidth, browserHeight)
    Dim position As String = "--window-position={0},{1}"
    position = String.Format(position, browserWidth * index, 0)
    desiredCapabilities.SetCapability("chrome.switches", {size, position})
    driver = New Remote.RemoteWebDriver(New System.Uri("http://localhost:4444/wd/hub"), desiredCapabilities)
    ...
    ...code to use driver to log into web site

すべてのスレッドがログインするまでテストが開始されないように、スレッドに参加します。 DriverPoolManger クラスを作成して、使用可能な Web ドライバーを待機中のテストに割り当てます。ドライバーが利用可能かどうかを確認するとき、またはドライバーの状態を変更するときはいつでも、ReaderWriterLock を使用します。

    _readerWriterLock.AcquireWriterLock(Threading.Timeout.Infinite)
    _locks(index) = False
    _readerWriterLock.ReleaseWriterLock()

この時点で、テストをしばらく並行して実行した後、次のエラーで失敗しました。

Type is not resolved for member 'OpenQA.Selenium.WebDriverException,WebDriver, Version=2.16.0.0, Culture=neutral, PublicKeyToken=1c2bd1631853048f'. 

いくつかの調査の後、解決策は、探していたdllを「C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\UnitTestAssemblies」という名前の新しいフォルダーにコピーし、QTAgent32.exe.configを次のように更新することでしたこれを privatePath にリストします。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <probing privatePath="PrivateAssemblies;PublicAssemblies;DataCollectors;DataCollectors\x64;PrivateAssemblies\DataCollectors;PrivateAssemblies\DataCollectors\x64;UnitTestAssemblies;"/>
</assemblyBinding>

テストがしばらく実行されると、UnitTesting.AssemblyCleanup()proc が予期せず実行され、すべてのブラウザーと Selenium Server が強制終了されます。VSTTExecution は次のエラーを記録します。

(QTAgent32.exe, PID 8444, Thread 15) Unit Test Adapter threw exception: System.Threading.ThreadAbortException: Thread was being aborted.
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.RunTestMethod()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.ExecuteTest()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.Execute(UnitTestResult result)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestRunner.ExecuteSingleTest(UnitTestExecuter executer, UnitTestElement test, ITestContext testContext, UnitTestAdapterContext userContext, Boolean isLoadTest)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestRunner.Run(UnitTestElement test, ITestContext testContext, Boolean isLoadTest, Boolean useMultipleCpus)

ドライバープールなしで試してみますが、それは新しいドライバーを起動し、テストごとにログインすることを意味します。私はマルチスレッドの経験があまりなく、VS での並列テストには多くの問題があるようです。ドライバー プールが原因でしょうか?

更新: ドライバー プールを削除しましたが、この問題はまだ発生しています。

4

1 に答える 1

5

私はほとんどあきらめましたが、ここに解決策があります:

mstest /ノイズ分離

これにより、qtagent32.exe が完全に削除され、それ以来問題は発生していません。

于 2012-07-31T23:13:20.240 に答える