Kei*_*ton 3 selenium multithreading automated-tests mstest selenium-grid
我正在最后一英里让这个工作。
通过更改 Local.testsettings 中的 parallelTestCount 设置,我在我的测试项目中同时运行了多个测试:
<Execution parallelTestCount="5">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
Run Code Online (Sandbox Code Playgroud)
我安装了修补程序 KB2619410 来解决 VS 中并行测试的问题。
在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
Run Code Online (Sandbox Code Playgroud)
我生成了 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
Run Code Online (Sandbox Code Playgroud)
我加入线程,以便在它们全部登录之前不会开始测试。我创建了一个 DriverPoolManger 类来将可用的 Web 驱动程序分配给等待的测试。每当我检查驱动程序是否可用或更改其状态时,我都会使用 ReaderWriterLock:
_readerWriterLock.AcquireWriterLock(Threading.Timeout.Infinite)
_locks(index) = False
_readerWriterLock.ReleaseWriterLock()
Run Code Online (Sandbox Code Playgroud)
此时,它并行运行了一段时间的测试,然后失败了:
Type is not resolved for member 'OpenQA.Selenium.WebDriverException,WebDriver, Version=2.16.0.0, Culture=neutral, PublicKeyToken=1c2bd1631853048f'.
Run Code Online (Sandbox Code Playgroud)
经过一番研究,解决方案是将它正在寻找的 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>
Run Code Online (Sandbox Code Playgroud)
现在,测试运行了一段时间,然后我的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)
Run Code Online (Sandbox Code Playgroud)
我将在没有驱动程序池的情况下尝试它,但这意味着启动一个新驱动程序并为每个测试登录。我在多线程方面没有很多经验,而且 VS 中的并行测试似乎存在很多问题。我的驱动程序池会导致这种情况吗?
更新: 我删除了我的驱动程序池,这个问题仍然存在。
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |