Поток прерван в параллельном веб-тесте с MSTEST и Selenium
Я на последней миле, чтобы это сработало.
У меня есть несколько тестов, запущенных одновременно в моем тестовом проекте, изменив параметр parallelTestCount в Local.тестовые задания:
<Execution parallelTestCount="5">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
Я установил hot fix 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 для назначения доступных веб-драйверов ожидающим тестам. Всякий раз, когда я проверяю, доступен ли драйвер, или изменяю его статус, я использую 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 файлы (x86)Microsoft Visual Studio 10.0Common7IDEUnitTestAssemblies", а затем обновление QTAgent32.exe.config, чтобы перечислить это в privatePath:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="PrivateAssemblies;PublicAssemblies;DataCollectors;DataCollectorsx64;PrivateAssembliesDataCollectors;PrivateAssembliesDataCollectorsx64;UnitTestAssemblies;"/>
</assemblyBinding>
Теперь тесты выполняются некоторое время, а затем мой UnitTesting.AssemblyCleanup()
proc неожиданно запускается и убивает все браузеры и сервер Selenium. 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. может ли мой пул драйверов быть причиной этого?
Обновление: Я удалил свой пул драйверов, и эта проблема все еще возникает.