如何使jmeter对线程中的所有HTTP请求使用相同的主机名/端口,但对每个线程使用不同的值?

如何使jmeter对线程中的所有HTTP请求使用相同的主机名/端口,但对每个线程使用不同的值?,jmeter,Jmeter,我正在测试一个集群应用程序,希望定义一个不同的线程来测试集群中的每台机器。我有一个线程组,有两个HTTP请求,一个登录完成一次,一个帖子重复多次。我设置了一个CSV数据集配置来配置HTTP请求的服务器名称和端口号。HTTP Cookie管理器保存登录请求产生的登录Cookie 问题在于,每次HTTP请求运行时,CSV文件都会被再次读取。通常,同一线程读取主机名和端口值,然后不发送登录cookie,因为它只应用于线程登录的原始计算机 有没有办法让CSV数据集配置在每个线程中只读取一次?或者,也可以

我正在测试一个集群应用程序,希望定义一个不同的线程来测试集群中的每台机器。我有一个线程组,有两个HTTP请求,一个登录完成一次,一个帖子重复多次。我设置了一个CSV数据集配置来配置HTTP请求的服务器名称和端口号。HTTP Cookie管理器保存登录请求产生的登录Cookie

问题在于,每次HTTP请求运行时,CSV文件都会被再次读取。通常,同一线程读取主机名和端口值,然后不发送登录cookie,因为它只应用于线程登录的原始计算机


有没有办法让CSV数据集配置在每个线程中只读取一次?或者,也可以采用其他方法,在每个线程的基础上设置主机名/端口,而不是像我现在这样在每个请求的基础上设置主机名/端口?

您可以使用
HTTP请求默认值。
更新服务器IP、端口和协议详细信息。线程组中的所有HTTP请求都将从HTTP请求默认值中获取默认ip、端口等

查看更多详细信息


我相信CSV数据集配置的默认设置提供了您想要的:

其他选项是使用If控制器分发线程,如:

  • 如果控制器,条件:
    (${uuuuThreadNum}%2==0)
    • 偶数线程的HTTP请求
  • 如果控制器,条件:
    (${uuuuThreadNum}%2!=0)
    • 奇数线程的HTTP请求
这两个选项都使用返回当前线程数的函数,也许你可以测试你的方法,或者想出一个更好的方法


通常,通过分别访问不同的主机来测试集群应用程序不是最好的主意。最终用户通常通过硬件的软件访问这些应用程序,因此他可以看到单个主机名或IP地址。负载平衡器使用各种算法在服务器之间分发请求


我认为这是您需要模拟的情况,最好添加到您的测试计划中,这样每个线程都可以自己解析主机名。

我尝试使用HTTP请求默认值,但没有帮助。我使用从CSV数据集配置中为服务器名称和端口号定义的变量${hostname}和${port}。不幸的是,每次任何一个HTTP请求运行时,HTTP请求默认值都会再次读取CSV文件,并导致与直接在HTTP请求中使用CSV变量相同的问题。您是对的,群集通常都有负载平衡器,但我们还没有这样做,我希望Jmeter能让我访问多个主机。我曾考虑过配置haproxy,如果jmeter没有解决方案,我可能会这样做。