|
首先还是贴出脚本,是使用html协议录制的
vuser_init()
{
........
//下面是对登录界面的登录数据提交。出于安全考虑,采用了scas。这里要注意的是lt,它是使用服务器分配的值,在提交登录数据的时候提交给服务器进行确认的。这个值是服务器随机产生的,也就是说,这个值应该做关联。
web_submit_data("login",
"Action=http://192.168.0.3/SCAS/login?service=http%3A%2F%2F192.168.0.3%2Fdocexchange%2Fwebforms%2Findex.jsp",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.0.3/SCAS/login?service=http%3A%2F%2F192.168.0.3%2Fdocexchange%2Fwebforms%2Findex.jsp",
"Snapshot=t2.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value=no1", ENDITEM,
"Name=password", "Value=111111", ENDITEM,
"Name=lt", "Value=LT-762-04MIletGofhEX6K8bcqH", ENDITEM,
"Name=x", "Value=0", ENDITEM,
"Name=y", "Value=0", ENDITEM,
LAST);
//根据提交的数据和lt的值,服务器会分配不同的ticket,因此ticket的值应该做关联。
web_url("index.jsp",
"URL=http://192.168.0.3/docexchange/webforms/index.jsp?ticket=ST-94-KeDhvFUFCInvCirAcMKp",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t3.inf",
"Mode=HTML",
LAST);
问题首先是关联引起的,我采用的是录制后回放脚本后,关联脚本。关联函数:
//关联lt 的值为WCSParam_Diff1,就是前一个粗体部分
web_reg_save_param( "WCSParam_Diff1", "LB= value=\"", "RB=\"", "Ord=2", "Search=Body", "RelFrameId=1", LAST );
//关联ticket的值为WCSParam_Diff2,就是后一个粗体部分
web_reg_save_param( "WCSParam_Diff2", "LB=ticket=", "RB=\"", "Ord=2", "Search=Body", "RelFrameId=1", LAST );
和开发人员交流知道:1、html语言的赋值语句赋的值都是字符,虽然在程序中可以写为 value=abcdef。但是在提交给服务器的时候实际上是 value=”abcdef“。因此,lt的左边界是value= ”,右边界是双引号。这也是为什么有人手动关联html语言的时候,出现不能匹配的原因之一。
2、关于scas:lt的值是应用程序请求服务器,服务器分配给应用程序的一个随机值,在提交登录数据的时候,应用程序把这个随机值和登录数据再提交回服务器,验证登录数据的正确性。根据登录数据和lt分配的随机值,会产生相应的ticket的值,也就是说ticket的值是与lt的值相适应的。
做法:1、修改WCSParam_Diff1的关联函数,把左边界的约束改为:"LB= value=",也就是说左边界只有 value=,回放提示错误出现在WCSParam_Diff2上:Error -26377: No match found for the requested parameter "WCSParam_Diff2". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size
。初步看很奇怪,但是我试图解释:WCSParam_Diff1左边界少了一个双引号,匹配的值由LT-762-04MIletGofhEX6K8bcqH变成了“LT-762-04MIletGofhEX6K8bcqH,由此引起了ticket的变化,所以,WCSParam_Diff2不匹配。但问题接着提出来了:ticket的值是根据WCSParam_Diff1生成的,WCSParam_Diff1变化了,服务器分配为i给ticket的值只能随之变化,但不应该是不匹配和长度不足的错误消息吧。由此很想了解lr关联的内在机制,是怎样进行关联的。
做法2 :既然ticket的值WCSParam_Diff2是与WCSParam_Diff1的值相适应的,那么取消WCSParam_Diff1的关联,应该在lt的位置提示错误吧,结果不是,回放错误仍然和上面的错误提示一样: Error -26377: No match found for the requested parameter "WCSParam_Diff2". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size 。
由此想清楚vugen的回放机制:vugen回放是根据脚本提供的代码信息回放的吗?答案应该是肯定的,但是:脚本提供了lt提交的随机值:LT-762-04MIletGofhEX6K8bcqH,服务器应该能产生相应的ticket值,绝不会出现参数不匹配的错误。还有,既然lt是随机的,那么更改其中的一两个字母,应该不会出现什么问题。 但实际结果是出现上述WCSParam_Diff2不匹配一样的错误。由此,可以怀疑一点:vugen是完全根据脚本代码信息回放的么?深入一点,在congtroller中运行脚本,特别是进行联机负载测试的时候,是不是负载pc也是完全根据脚本代码信息运行的?
前面提出了我的一点疑惑和看法,很希望有人能解答。很有可能在对scas和关联的机制上,我理解有偏差。因为,我还是相信 联机负载测试,特别是做负载的pc是根据脚本信息运行的。
[ Last edited by wghong on 2004-11-5 at 20:31 ] |
|