2014-06-11 47 views
1

我有一个应该能够同时处理数百万用户请求的系统。为了检查系统如何处理负载,我设置了一个JMeter服务器集群(从属)和一个控制器(客户端)。用JMeter模拟数百万用户

我有一个所有用户(〜10M)的数据库,并且我需要发送来自不同用户的每个请求。

我想知道如何在JMeter中实现这样的事情。基本上,我想每个从机都划分一系列用户(比方说100,000),然后在给定的从机中,每个请求应该从本地100,000列表中读取一个新用户,并删除它。因此,我最终会发送来自每个用户的请求。

虽然这个想法在理论上听起来很合理,但我并不完全知道如何使用JMeter术语来实现它。另外,我不确定如何在测试中从数据库读取数据,尽管理论上我可以事先将它读入文本文件,并让每个从站包含具有100,000个用户部分的文本文件。

我可以设置一个非常大的机器集群,所以规模在这里不成问题。只是如何设置它。

+0

你为什么不尝试在云上进行负载测试?同样存在不同的工具。 –

+0

实际上,JMeter集群运行在谷歌计算引擎... :-)事情是我不知道如何分配用户: 1.在从属之间 2.在每个从属之间,线程之间。 此外,如果知道其他(云)工具,你认为可以做得更好,请让我知道哪些.. –

+0

火焰计,tlaloc(我的团队使用tlaloc) –

回答

0

这可以通过执行以下步骤来实现:

  • 以用户凭证转储并将其保存到一个CSV文件
  • 拆分csv文件。将1个文件复制到每个Jmeter从站,在所有 机器上的相同位置。从控制器的“C:\ Loadtest \”
  • ,在“CSV数据集配置”中给出您的csv文件的路径。
  • 运行测试。

通过执行上述步骤,Jmeter控制器将通过指示所有Jmeter从节点在同一位置“C:\ Loadtest \”中使用CSV文件来开始执行测试。 但这里的诀窍是,所有的机器将使用不同的用户组。

希望这会有所帮助。

+0

我想确保你的建议的一件事:在一台机器中,给定文件如:C:\ LoadTest \ usersXX.csv - 将并行运行的所有线程同时读取它吗?我需要每个用户只发送一次请求,所以这是一种需要消耗和清空的用户队列 - 它会如何工作?或者将所有的线程读取相同的数据? –

+0

每台机器都将在本地访问文件。即使所有机器上的文件名称相同,数据也可能不同。所以每个从节点都有自己的一组数据。 为确保1位用户严格只发送1个请求,请确保线程数/用户数小于或等于数据中的用户数。 例如如果要在10个从节点上运行1000个并发用户的负载。在控制器中的用户/线程应该是100. –

+0

其实,我刚刚看到这个帖子:http://community.blazemeter.com/knowledgebase/articles/40707-how-to-setup-a-different-csv-file-for-每个jmeter解释了如何在每个节点具有不同文件名的工作人员之间分发文件。 –

1

提供的JMeter用的参数列表的最佳方法是使用一个CSV文件: http://jmeter.apache.org/usermanual/component_reference.html#CSV_Data_Set_Config 您可以配置CSV数据集的配置做到使每一个线程中使用的CSV不同的线路。每个引擎都需要拥有自己唯一的CSV文件,因为共享模式在分布式测试中不能在引擎之间工作(您可以尝试自动执行此部分,这可以很有趣:))。

这是你的脚本应该如何看起来像:
1.线程组
1.1 HTTP取样(登录)
1.1.1 CSV数据集中配置
1.2秒HTTP采样
等等

登录采样器将使用从CSV文件加载的参数,因此对于每个“登录”它将使用不同的行。

分布式测试很简单: http://jmeter.apache.org/usermanual/remote-test.html 请记住,在一个单一的JMeter负载发动机运转100K并发用户将很难(的JMeter消耗服务器上的资源,所以你需要大量的CPU和内存)。所以你也应该监视引擎。 另外,1M用户将导致引擎将发送回控制台的大量数据,因此您可能需要并行开始一堆分布式测试,并在最后汇总结果。

干杯,

+0

我需要可配置的数据是json对象,因为我在请求正文中发送JSON。这也可以用CSV数据配置集来实现吗? –

+0

当前没有可以读取JSON格式的配置元素。您可以使用beanshell脚本尝试将JSON文件格式化为参数。另一种选择是使用HTTP采样器的“body data”选项使用CSV中的参数构建JSON请求。 – itaymendel

+1

@Yaniv Donenfeld 您可以随时从CSV数据集 '例如{ “name”:“$ {name}”, “username”:“$ {Uname}”, “password”:“$ {Pword}” } –