3

我正在最後一英里得到這個工作。線程在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中的並行測試似乎存在很多問題。我的司機池可能造成這種情況嗎?

更新: 我刪除了我的驅動程序池,並且此問題仍然存在。

回答

4

我幾乎放棄了,但這裏是解決方案:

MSTEST/noisolation

這完全消除qtagent32.exe,因爲我還沒有問題。