我正在尝试使用JMeter 2.5.1进行负载测试。该应用程序使用PHP编写,并使用标准的基于cookie的会话管理和命名会话。目前,测试计划是一个非常简单的2 HTTP请求和1个线程组内的1个Cookie管理器。 Cookie管理器的cookie策略设置为兼容,如教程所示。但是,会话仍然会在每个请求中丢失。
在第一页调用中,会话已初始化。我在session_start调用之前和之后打印了以下信息:
before session start:
session_name() = 'PHPSESSID'
session_id() = ''
$_COOKIE = array (
)
after session start:
session_name() = 'sasExtSMSESSID'
session_id() = 'ihl8svsbl76au7h1ccn3c0ci61'
$_COOKIE = array (
)
在第二页呼叫中,该会话应该已经设置。但似乎JMeter的cookie管理器的cookie被破坏了:
before session start:
session_name() = 'PHPSESSID'
session_id() = ''
$_COOKIE = array (
'sasExtSMSESSID' => 'ihl8svsbl76au7h1ccn3c0ci61, sasExtSMSESSID=ihl8svsbl76au7h1ccn3c0ci61',
)
after session start:
session_name() = 'sasExtSMSESSID'
session_id() = '2ro2bkd3t3liq76h7lqn603gm7'
$_COOKIE = array (
'sasExtSMSESSID' => 'ihl8svsbl76au7h1ccn3c0ci61, sasExtSMSESSID=ihl8svsbl76au7h1ccn3c0ci61',
)
因此,似乎cookie数组以某种方式被破坏,并且由于会话ID无效,因此会生成新的。除了调用session_name()
和session_start()
之外,应用程序中没有任何特殊处理cookie。使用浏览器访问页面也有效。所以我想我没有正确配置JMeter。知道是什么导致了这个吗?非常感谢任何帮助。
答案 0 :(得分:0)
我不确定这是否真的是一个答案,因为我仍然不知道发生了什么,但我想这是其他人可能从中受益的解决方案。
将Cookie管理器的策略从兼容性更改为默认值让我回避这个问题,因为腐败显然发生在cookie变量的另一部分:
session_name() = 'sasExtSMSESSID'
session_id() = 'gknq98q7fpecjciti3da9l6mj7'
$_COOKIE = array (
'$Version' => '0',
'sasExtSMSESSID' => 'gknq98q7fpecjciti3da9l6mj7',
'$Path' => '/, sasExtSMSESSID=gknq98q7fpecjciti3da9l6mj7',
)
到目前为止,$ Path已损坏并未产生任何不利影响。
仍然会感谢任何人向我解释这里发生的事情。