我正在最後一英里得到這個工作。線程在MSTEST和Selenium平行Web測試中中止
我在Local.testsettings改變parallelTestCount設置在我的測試項目中同時運行多個測試:
<Execution parallelTestCount="5">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
我安裝的熱修復KB2619410,以解決在VS.並行測試問題
在UnitTesting.AssemblyInitialize()
我啓動Selenium服務器集線器和節點。我在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
實例,並登錄到我的網站
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中的並行測試似乎存在很多問題。我的司機池可能造成這種情況嗎?
更新: 我刪除了我的驅動程序池,並且此問題仍然存在。