关于LoadRunner手工关联的问题
上一篇 /
下一篇 2012-12-29 20:50:22
/ 个人分类:LoadRunner
最近在帮助同事解决LoadRunner相关问题的时候发现一个问题,当自动关联不能找到需要关联的数据的时候不知道用什么手段发现需要关联的元素。
比如说,远程调用dwr的时候,要传输JSESSIONID这个参数,比如:httpSessionId=100hk2v9witwv。
大多数人也猜测到,这个参数需要关联,可以这个httpSessionId哪里来呢?不知道了。其实我们只要看回放日志便可以发现踪迹。
点击菜单,VUser->运行时设置,选择常规->日志,将扩展日志全部勾选。
回放的时候,我们就可以看到服务返回的数据,搜索就就会发现,100hk2v9witwv 是在登录或者打开某个页面之后,服务器使用Set-Cookie返回给客户端。
vuser_init.c(20): HTTP/1.1 200 OK\r\n
vuser_init.c(20): Date: Wed, 16 May 2012 01:49:29 GMT\r\n
vuser_init.c(20): Content-Type: image/jpeg\r\n
vuser_init.c(20): Expires: Thu, 01 Jan 1970 00:00:00 GMT\r\n
vuser_init.c(20): Set-Cookie: JSESSIONID=100hk2v9witwv;Path=/Mrs\r\n
vuser_init.c(20): Cache-Control: no-store\r\n
vuser_init.c(20): Transfer-Encoding: chunked\r\n
vuser_init.c(20): Server: Jetty(6.1.22)\r\n
那么我们只要在打开在这个页面的代码之前加上关联就可以了。
web_reg_save_param("SessionId","LB=JSESSIONID=","RB=;Path",LAST);
什么时候需要关联呢?
从服务器返回的数据,在后续的脚本中会用到,并且是每次是变化的(每次,不是指每次迭代,是指在一个完整的执行过程),对于这样的数据,是需要关联的。
比如前文提到的远程调用dwr,JSESSIONID作参数出现在代码中,而这个数据是之前代码执行后,从服务器返回报文的报文头中反馈给客户端的,并且每次是变化的。那么SessionID是不是一定要做关联,不是的,通常情况下是作为cookie传递的,这个自动在报文头中提交给服务器端的,不会在后续的代码中出现,是不需要关联的。
另外有一种场景,有一个列表,我们每次只处理其中一条数据,处理后,下次显示的列表就存在这条数据,每次显示的是不一样的列表,有的同学就想到是不是可以 使用关联。个人感觉,关联需要大量的编码工作,对于缺乏C编程经验的同学来说可以考虑的替代方式就是使用参数列表,可以参考另外一篇文档 http://www.zhenghongzhi.cn/post/33.html。
之前还碰到过一个使用统一登录门户的网站的问题,登录过程比较复杂,点击登录后,需要访问认证服务器,认证服务器返回302跳转,同时将会话参数通过报文头的Location传输给客户端,这个过程在录制的时候未必会在代码上全部反应出来,而通过httpwatch之类的工具会很清晰发现,最后人工增加代码,增加关联才最终调试过去。
收藏
举报
TAG: