0

我正在努力扩展现有的基于 Selenium 的 Web 应用程序测试系统的功能。系统目前一次只能执行一项测试。我想通过为测试执行添加一些并行性来增加系统的吞吐量。

为此,我一直在研究不同的技术,并对 Microsoft 的 Orleans 感兴趣。但是,在阅读了 Orlean 的文档一天后,我找不到该技术是否支持我需要在一台计算机上最多运行特定的可扩展 Actor 的场景。

在我的情况下,它将是执行测试的演员。通常使用 Selenium,测试执行需要创建一个 WebDriver 对象,然后打开并控制一个 Web 浏览器实例。这些网络浏览器都必须作为单独的进程打开,而不仅仅是同一进程的新窗口。没有上限,假设一个包含 3 个节点的集群和一个包含 60 个测试的测试计划,我将在每台机器上同时打开 20 个 Web 浏览器,这可能会导致性能大幅下降或完全崩溃。我希望系统每台机器的上限为 3 个测试执行参与者,并将其余测试存储在队列中,仅在另一个工作参与者完成测试后运行它们。

我将如何使用奥尔良技术来实现它?

4

3 回答 3

2

对于奥尔良,正确的解决方案是不要乱用 MaxActiveThreads。你不应该真的改变它,几乎永远。相反,您可以总共只拥有 9 个常规谷物,仅通过 9 个不同的谷物 id (0...8) 来使用它们,系统会将它们随机分布在 3 个服务器上,当您发送新的测试请求时,只需发送它从这 9 个中随机抽取。

或者,您有 StatelessWorker grain,只有一个 grain,但将其最大激活数(每台服务器)设置为 3,这样每台服务器将有 3 次激活(总共 9 次),系统将自动进行负载平衡。

http://dotnet.github.io/orleans/Documentation/Advanced-Concepts/StatelessWorker.html

奥尔良没有建立持久排队。您要么必须在客户端/发送方排队,要么一次发送所有 60 个请求,每个grain 可以将请求存储在其内部内存队列中,并在前一个的工作完成时启动下一个。

于 2016-12-15T17:16:08.573 回答
0

你的问题:你想并行化你的测试执行。

解决方案是使用 Selenium-hub 和节点。你不需要奥尔良。

于 2016-12-09T15:42:45.800 回答
0

奥尔良将满足您开箱即用的大部分要求。当您在筒仓中进行配置时,它会创建如此多的并行颗粒(默认为 cpu 内核,请参阅MaxActiveThreads)。所有其他请求将由奥尔良排队。

您可以在 Orleans 配置文件中对其进行配置:

<Scheduler MaxActiveThreads="3"/>
于 2016-12-15T12:37:53.743 回答