Поток прерван в параллельном веб-тесте с 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. может ли мой пул драйверов быть причиной этого?

Обновление: Я удалил свой пул драйверов, и эта проблема все еще возникает.

1 3

1 ответ:

Я почти сдался, но вот решение:

Mstest / noisolation

Это исключает qtagent32.все отлично, и с тех пор у меня не было проблем.