我正在对注册系统进行负载测试 . 我目前有一个JMeter脚本从CSV文件(CSV数据集配置)中提取用户信息,我的线程组有以下步骤:
-
联系CAS服务器,获取登录票
-
登录CAS
-
在注册系统中执行任务
-
退出CAS
JMeter作为单独的线程运行每个步骤,并且脚本可以工作 .
问题是,与现实生活中用户的行为相比,我们的测试不太准确 . 就像我提到的那样,这是一个注册系统,我们的最终用户在实际开始锤击实际系统之前几分钟登录并进行身份验证(通过CAS)(当注册在午夜打开时 - 并且闸门打开) .
在现实生活中,我们的CAS身份验证系统永远不会出现问题,因为我们没有数千名用户同时进行身份验证 . 当我们使用JMeter进行负载测试时,前两个步骤是通过CAS进行身份验证,这使CAS成为瓶颈,当我们在10秒的时间内为500个用户加载测试时,它开始失败 . 因此,我们的负载测试事务无法访问实际的注册系统,并且JMeter负载测试无效 .
有没有办法更新JMeter脚本以首先记录所有用户(循环前两个步骤并维护所有用户的CAS会话信息),然后执行其余步骤?
1 回答
斯特林,
请使用JMeter的'Synchronizing Timer'元素,等待所有用户登录,然后继续前进到下一步(注册系统) .
您可以使用以下结构创建脚本:
HTTP请求联系CAS服务器,获取登录票证
登录CAS的HTTP请求
同步定时器[根据您的要求将'Number of Simulated Users to Group by'设置为0和超时[建议的设置值为'300000',即5分钟] . 不要将Timeout设置为'0',否则如果任何用户在上一步中失败,您的测试将永远保持运行状态]
HTTP请求在注册系统中执行任务
用于退出CAS的HTTP请求
当测试完成“登录到CAS的HTTP请求”步骤时,它将等待所有用户到达该步骤,然后再转到“注册系统中的HTTP请求执行任务”步骤 .
如果您需要与其他JMeter元素相关的信息,那么您可以参考JMeter knowledge base以在一个地方获取所有关键信息 .
如果您有任何疑问,请告诉我 .