使用分布式JMeter服务器分片工作负载,而不是镜像

使用分布式JMeter服务器分片工作负载,而不是镜像,jmeter,Jmeter,JMeter的默认行为显然只是在服务器之间复制您的测试计划。因此,如果测试计划有10个线程,那么在X台服务器上运行它将产生10个线程 有没有办法让它更智能?例如,尽管我有5台服务器来分配更大的负载,但我可能只希望运行某个HTTP线程的一个副本 另一个例子…我想确保我的采样器为每个线程使用唯一的ID,但我的服务要求预先设置用户名,以便它们不能预先设置…我还没有找到一种简单的方法来跨分布式服务器无状态地协调这一点 一个简单的实现可能是,如果JMeter内置了分布式测试感知变量,那么客户端向服务器发送

JMeter的默认行为显然只是在服务器之间复制您的测试计划。因此,如果测试计划有10个线程,那么在X台服务器上运行它将产生10个线程

有没有办法让它更智能?例如,尽管我有5台服务器来分配更大的负载,但我可能只希望运行某个HTTP线程的一个副本

另一个例子…我想确保我的采样器为每个线程使用唯一的ID,但我的服务要求预先设置用户名,以便它们不能预先设置…我还没有找到一种简单的方法来跨分布式服务器无状态地协调这一点

一个简单的实现可能是,如果JMeter内置了分布式测试感知变量,那么客户端向服务器发送类似ServerID和ServerCount的内容,这样测试计划就可以使用数字ServerID作为前缀或服务器计数的mod。或者,JMeter可以选择切分thread_num,这样,如果您说10000个线程,并且有10个服务器,那么它将在每个服务器上运行1000个线程,线程_num在分布式测试中从不重复。对于给定的采样器示例,如果thread_num%serverCount!=服务器ID


实现这一点的最佳方法是什么?

使用分布式测试感知变量的一种方法是使用不同的变量值启动每个jmeter服务器:

bin/jmeter-server -Jvariable=valuehost1
然后在测试脚本中只需使用:

${__P(variable)}

我相信詹金斯会给你这种灵活性。根据设计,JMeter从节点是哑节点,它们只知道复制脚本和执行脚本。