设置特定谷物每个筒仓最多n个实例

时间:2016-12-07 12:11:40

标签: c# selenium actor orleans

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

为此,我一直在研究不同的技术,并对微软的奥尔良感兴趣。然而,在与Orlean的文档花了一天之后,我无法找到该技术是否支持我需要在一台计算机上运行特定可伸缩actor最多n次的场景。

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

我如何使用奥尔良技术实现这一目标?

3 个答案:

答案 0 :(得分:2)

对于奥尔良来说,正确的解决方案不是要使用MaxActiveThreads。你几乎不应该真的改变它。相反,你可以总共只有9颗普通颗粒,通过只有9种不同的谷物ID(0 ... 8)来使用它们,系统会将它们随机分布在3台服务器上,当你发送新的测试请求时,只需发送从那9个中随机出现。

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

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

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

答案 1 :(得分:0)

您的问题:您希望并行化测试执行。

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

答案 2 :(得分:0)

奥尔良将完全满足您的大部分需求。 它会在筒仓中创建并行创建如此多的谷物(默认为cpu核心,请参阅MaxActiveThreads)。 所有其他请求将由奥尔良排队。

您可以在Orleans配置文件中配置它:

<Scheduler MaxActiveThreads="3"/>