51Testing软件测试论坛

标题: 在Web脚本中利用生成日志快速关联 [打印本页]

作者: 婴儿    时间: 2011-1-5 16:43
标题: 在Web脚本中利用生成日志快速关联
本帖最后由 婴儿 于 2011-1-6 15:09 编辑

LoadRunner中提供了自动关联和扫描关联的功能,但它们都有局限性。自动关联通常需要自定义新规则,指定左右边界,而这些边界恰好是测试员想要知道的未知信息;扫描关联往往扫不出所有关联,有时还会扫出无需关联的数据。因此对于某些关联,手动关联是必然的选择。
我们通常使用树视图(View Tree)中的服务器响应(Server Response),或者直接查看页面的源文件来做手动关联,但这两种办法有时会失效。查看页面源文件的这个文件不一定是需要的文件,而可能是上层的某个文件;服务器响应有时也不能显示所有的返回信息,甚至什么也不显示。
有的关联位置比较好找,因为知道它是做什么用的,通过业务分析就能知道去哪儿取它。而有的疑似关联的数据,由于不清楚它的用途,要找它的关联位置也无从下手。对于这种情况有个办法是使用扩展日志-服务器返回的数据(Data returned by server)进行回放来查找关联位置,但因为生成的日志量大,运行速度又太慢了。

本文讨论的是Web脚本中的手动关联,提供一种利用生成日志(Generation Log)快速查找关联位置的办法。
如果是确定的关联数据,用这种办法直接关联就是了;如果是疑似的关联数据,也可以用这种办法关联后比较前后值的异同,确定它是不是真的关联。
生成日志是在录制后生成的,包括了客户端请求和服务器响应的全部信息,在日志开头还列出了录制选项的内容。除了在VuGen中使用外,也可以直接使用文件,位置:脚本路径\data\CodeGenerationLog.txt。
需要关联的数据大多是一串数字,有时会是一串字母,或可见字符的组合,假设录制的脚本中有一段是这样的:
  1. web_submit_data("finish.do",
  2.   "Action=http://172.16.1.30/workflow/finish.do",
  3.   "Method=POST",
  4.   "RecContentType=text/html",
  5.   "Referer=http://172.16.1.30/workflow/execute.do?orderId=716&nodeId=1844&from=ALL",
  6.   "Snapshot=t447.inf",
  7.   "Mode=HTTP",
  8.   ITEMDATA,
  9.   "Name=from", "Value=ALL", ENDITEM,
  10.   "Name=orderId", "Value=716", ENDITEM,
  11.   "Name=nodeId", "Value=1844", ENDITEM,
  12.   "Name=description", "Value=同意", ENDITEM,
  13.   LAST);
复制代码

可以看到,716、1844很可能是需要关联的数据,下面以716为例来说明如何快速找到关联位置。
1.在生成日志中从头搜索716,例如找到的结果如下:
  1. <input type="hidden" name="orderId" id="orderId" value="716">
复制代码

2.再搜索ended,如果该词是在形如下面的句中,则表示刚才找到的716是在服务器响应中,对应的脚本语句就是关联位置。
  1. $$$$$$ Response Body For Transaction With Id 770 Ended $$$$$$
复制代码

如果该词是在形如下面的句中,则表示刚才找到的716是在客户端请求中,不是要找的关联。
  1. $$$$$$ Request Body For Transaction With Id 785 Ended $$$$$$
复制代码

3.假设找到的716是在服务器响应中,再往下找Id为770的句子,如下,这就是此服务器响应对应的脚本语句(相应的客户端请求就是由它发出的)
  1. ****** Add Event For Transaction With Id 770 ****** (Location Flag : tFlagInsertEnd, Location ID : 770)
  2. web_submit_data("save.do",
  3.   "Action=http://172.16.1.30/business/save.do",
  4.   "Method=POST",
  5.   "RecContentType=text/html",
  6.   "Referer=http://172.16.1.30/business/edit.do",
  7.   "Snapshot=t365.inf",
  8.   "Mode=HTTP",
  9.   ITEMDATA,
  10.   "Name=name", "Value=张三", ENDITEM,
  11.   "Name=type", "Value=1", ENDITEM,
  12.   "Name=money", "Value=2", ENDITEM,
  13.   "Name=creatorId", "Value=4", ENDITEM,
  14.   "Name=date", "Value=2011-01-05", ENDITEM,
  15.   "Name=memo", "Value=", ENDITEM,
  16.   LAST);


  17. $$$$$$ 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.在脚本中替换关联参数。

有时在生成日志中找到的第一个值不一定是需要的值,例如先全部查询再精确查询,这时找到的第一个值可能在全部查询的结果中,而你需要的可能是精确查询的结果,这种情况就要在生成日志中继续查找。
如果能确定关联位置在脚本中的大致范围,那么可以在脚本中取范围前的快照文件名,在生成日志中定位后,再向下查找关联数据。
作者: chengning    时间: 2011-1-6 11:14

作者: msnshow    时间: 2011-1-8 11:22
直接查看网页源代码就搞定了
作者: Kadar    时间: 2011-2-14 16:27
学习学习
作者: kartmanSline    时间: 2019-8-2 16:17
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/





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2