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

时间:2016-03-09 01:35:40

标签: jmeter

我正在测试群集应用程序,并且想要定义一个不同的线程来测试群集中的每台机器。我有一个包含两个HTTP请求的线程组,一次登录,以及多次重复的POST。我设置了一个CSV数据集配置来配置HTTP请求的服务器名称和端口号。 HTTP Cookie管理器保存登录请求产生的登录cookie。

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

有没有办法让每个线程只读取一次CSV数据集配置?或者也许是其他一些方法来设置每个线程的主机名/端口,而不是像我现在那样基于每个请求?

2 个答案:

答案 0 :(得分:0)

您可以使用HTTP request Defaults。 更新服务器IP,端口和协议详细信息。线程组中的所有HTTP请求都将从HTTP request Defaults

中获取默认的ip,端口等

查看here了解详情

enter image description here

答案 1 :(得分:0)

我相信CSV数据集配置的默认设置可以满足您的需求:

CSV Distribution

其他选项是使用If Controller分配线程:

  • 如果是控制器,条件:(${__threadNum} % 2 == 0)
    • 偶数线程的HTTP请求
  • 如果是控制器,条件:(${__threadNum} % 2 != 0)
    • 奇数线程的HTTP请求

这两个选项都使用__threadNum()函数,它基本上返回当前线程的数量,也许你将能够测试你的方法或者想出一个更好的方法。

通常,通过单独命中不同的主机来测试群集应用程序并不是最好的选择。最终用户通常通过硬件Load Balancer软件访问此类应用程序,因此他可以看到单个主机名或IP地址。负载均衡器使用各种算法在服务器之间分配请求。

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