在Web脚本中利用生成日志快速关联
本帖最后由 婴儿 于 2011-1-6 15:09 编辑LoadRunner中提供了自动关联和扫描关联的功能,但它们都有局限性。自动关联通常需要自定义新规则,指定左右边界,而这些边界恰好是测试员想要知道的未知信息;扫描关联往往扫不出所有关联,有时还会扫出无需关联的数据。因此对于某些关联,手动关联是必然的选择。
我们通常使用树视图(View Tree)中的服务器响应(Server Response),或者直接查看页面的源文件来做手动关联,但这两种办法有时会失效。查看页面源文件的这个文件不一定是需要的文件,而可能是上层的某个文件;服务器响应有时也不能显示所有的返回信息,甚至什么也不显示。
有的关联位置比较好找,因为知道它是做什么用的,通过业务分析就能知道去哪儿取它。而有的疑似关联的数据,由于不清楚它的用途,要找它的关联位置也无从下手。对于这种情况有个办法是使用扩展日志-服务器返回的数据(Data returned by server)进行回放来查找关联位置,但因为生成的日志量大,运行速度又太慢了。
本文讨论的是Web脚本中的手动关联,提供一种利用生成日志(Generation Log)快速查找关联位置的办法。
如果是确定的关联数据,用这种办法直接关联就是了;如果是疑似的关联数据,也可以用这种办法关联后比较前后值的异同,确定它是不是真的关联。
生成日志是在录制后生成的,包括了客户端请求和服务器响应的全部信息,在日志开头还列出了录制选项的内容。除了在VuGen中使用外,也可以直接使用文件,位置:脚本路径\data\CodeGenerationLog.txt。
需要关联的数据大多是一串数字,有时会是一串字母,或可见字符的组合,假设录制的脚本中有一段是这样的:
web_submit_data("finish.do",
"Action=http://172.16.1.30/workflow/finish.do",
"Method=POST",
"RecContentType=text/html",
"Referer=http://172.16.1.30/workflow/execute.do?orderId=716&nodeId=1844&from=ALL",
"Snapshot=t447.inf",
"Mode=HTTP",
ITEMDATA,
"Name=from", "Value=ALL", ENDITEM,
"Name=orderId", "Value=716", ENDITEM,
"Name=nodeId", "Value=1844", ENDITEM,
"Name=description", "Value=同意", ENDITEM,
LAST);
可以看到,716、1844很可能是需要关联的数据,下面以716为例来说明如何快速找到关联位置。
1.在生成日志中从头搜索716,例如找到的结果如下:
<input type="hidden" name="orderId" id="orderId" value="716">
2.再搜索ended,如果该词是在形如下面的句中,则表示刚才找到的716是在服务器响应中,对应的脚本语句就是关联位置。
$$$$$$ Response Body For Transaction With Id 770 Ended $$$$$$
如果该词是在形如下面的句中,则表示刚才找到的716是在客户端请求中,不是要找的关联。
$$$$$$ Request Body For Transaction With Id 785 Ended $$$$$$
3.假设找到的716是在服务器响应中,再往下找Id为770的句子,如下,这就是此服务器响应对应的脚本语句(相应的客户端请求就是由它发出的)
****** Add Event For Transaction With Id 770 ****** (Location Flag : tFlagInsertEnd, Location ID : 770)
web_submit_data("save.do",
"Action=http://172.16.1.30/business/save.do",
"Method=POST",
"RecContentType=text/html",
"Referer=http://172.16.1.30/business/edit.do",
"Snapshot=t365.inf",
"Mode=HTTP",
ITEMDATA,
"Name=name", "Value=张三", ENDITEM,
"Name=type", "Value=1", ENDITEM,
"Name=money", "Value=2", ENDITEM,
"Name=creatorId", "Value=4", ENDITEM,
"Name=date", "Value=2011-01-05", ENDITEM,
"Name=memo", "Value=", ENDITEM,
LAST);
$$$$$$ Add Event For Transaction With Id 770 Ended $$$$$$
4.在脚本中搜索t365.,快速找到此语句,这就是关联的位置。
注意上步的"Snapshot=t365.inf",几乎所有的语句都会对应生成一个快照文件,命名为t*.inf,其中*为整数,且不重复。
5.在该语句前插入关联函数web_reg_save_param()。
左右边界可在第1步中获得,假设定义左边界为"orderId" value=",右边界为",为保险起见,可在服务器响应中查找此边界的序数(Ord)。或直接在生成日志中确定:在生成日志中从头搜索t364.,再搜索左边界或右边界,确定序数。或在文件中搜索,位置:脚本路径\data\t365.htm。建议Ord为1,以此为原则确定唯一的左边界或右边界。
6.在脚本中替换关联参数。
有时在生成日志中找到的第一个值不一定是需要的值,例如先全部查询再精确查询,这时找到的第一个值可能在全部查询的结果中,而你需要的可能是精确查询的结果,这种情况就要在生成日志中继续查找。
如果能确定关联位置在脚本中的大致范围,那么可以在脚本中取范围前的快照文件名,在生成日志中定位后,再向下查找关联数据。 :lol 直接查看网页源代码就搞定了 学习学习 Good post, I enjoyed it a lot.I was pretty lucky to discover your site. It's got a lot of useful info!
https://writinganacademicpaperforpublication1.blogspot.com/
页:
[1]