[原创]LR中 “simulate a new user on each iteration"设置项的作用
背景:
在用LR工具测试过程中,测试程序是JAVA,数据库是开源的MYSQL,脚本录制回放成功,里面调用了开发人员开放的2个接口,用来提交数据到数据库。
实际操作过程中,每次从controller中运行完成,从后来数据库中查看数据,总和预期数据量少,开始以为是参数设置的问题,问了好几个人,还有好心人给我关于LR参数的例子,让我花几个小时熟悉,但折腾来,还是一样的问题,根本就不知道是哪里的问题。
后来终于在网上搜到了LR中 “simulate a new user on each iteration"设置项的作用
很管用。原文转过来,谢谢原作者分享。
///////////////////////////////////////////////////////
“Simulate a new user on each iteration”(每次迭代都模拟一个新的用户)是LR的一个缺省设置项,曾经有人问过我该设置项的具体含义,当时按照LR手册上的说法描述了一下,但其实对这个选项带来的副作用并不十分明确。
正好昨天部门的一个员工在用LR进行选型的性能测试时遇到问题,经过分析,问题的产生就和这个选项有关。
昨天该员工在用LR对一个J2EE应用进行测试时,脚本录制修改和Play back都已经成功,但在controller里为脚本设置了100个VU,设置每个VU的迭代次数为20次,正确运行时应该在系统中生成2000条记录,但从controller里面看到,运行时这100个VU都只运行了一次,最终生成的只有100条记录。该员工百思不得其解,然后就向我求助。
开始我以为该问题是由脚本错误引起的,但经过对脚本的调试,验证确实没有问题,而且,在VUG中回放该脚本,回放多次就能生成多条记录,看来脚本的correlation等应该没有问题。仔细检查Web Server的日志,发现该日志中有多个访问“timeout.jsp”的访问记录,询问开发人员得知,在session超时时会访问这个页面。
HTTP协议本身是无状态的,因此为了保留住sessionid,一般的做法是用hidden field、cookie或是在URL上附加sessionid来解决这个问题,查看LR记录的页面访问数据,可以看到,该应用是用cookie解决这个问题的:
接下来的问题就清楚了,猜想是在两次迭代之间LR清除了cookie,查看RuntimeSetting的设置,果然“simulate a new user on iteration”选项被选中。
取消该选项的选中,重新运行Controller中的Senario,结果正常。
///////////////////////////////////////////////////////
这个选项默认LR是勾选的。