Google的搜索框是典型的AJAX应用,用户在输入关键字的同时,前端页面通过xmlhttp与后台服务器动态交互,根据用户输入的关键字查找匹配的内容,向用户提示建议的搜索项,也就是所谓的“google suggest”。

如果使用LoadRunner进行测试,采用AJAX(Click and Script)协议录制的话会得到以下脚本:

Action()

{

web_add_cookie_ex("Cookie=PREF=ID=372e76ef6c7e842e:U=1961d03ffd7ab924:NW=1:TM=1264934277:LM=1264934316:S=OYfvCjRzGq1u4u4z; domain=google.cn; path=/", ENDITEM,

"Cookie=NID=31=hwv9eoM6IVUuD1ssILGftThmu8fjLzTdRUZXJTwcEggxBjCoy4Fh3dEsZVLVZ66_WndMz03It6xuCCWAqW28ZCj2r2wJxmfKM4_UHMZGk_mnybPjA6tDdB9HFqVkX1EU; domain=google.cn; path=/", ENDITEM,

"Cookie=SNID=31=BZul31Bwi_B97OMZlOIjZOeSm05tZw_9bw9T4zsT=kqUHVr3rOWtmkOvF; domain=google.cn; path=/verify", ENDITEM,

LAST);

web_browser("www.google.cn",

DESCRIPTION,

ACTION,

"Navigate=http://www.google.cn/",

LAST);

web_edit_field("q",

"Snapshot=t1.inf",

DESCRIPTION,

"Type=text",

"Name=q",

ACTION,

"SetValue=AJAX",

LAST);

web_button("INPUT",

"Snapshot=t2.inf",

DESCRIPTION,

"Type=submit",

"Tag=INPUT",

"ID=",

"Value=Google 搜索",

ACTION,

"UserAction=Click",

LAST);

return 0;

}

可以看到google suggest的AJAX行为并没有被录制下来,从回放日志的服务器返回记录中也找不到google suggest返回结果的踪影。

采用WEB(HTTP/HTML)协议来录制,则得到下面的脚本:

Action()

{

web_add_cookie("PREF=ID=372e76ef6c7e842e:U=1961d03ffd7ab924:NW=1:TM=1264934277:LM=1264934316:S=OYfvCjRzGq1u4u4z; DOMAIN=www.google.cn");

web_add_cookie("NID=31=hwv9eoM6IVUuD1ssILGftThmu8fjLzTdRUZXJTwcEggxBjCoy4Fh3dEsZVLVZ66_WndMz03It6xuCCWAqW28ZCj2r2wJxmfKM4_UHMZGk_mnybPjA6tDdB9HFqVkX1EU; DOMAIN=www.google.cn");

web_url("www.google.cn",

"URL=http://www.google.cn/",

"Resource=0",

"RecContentType=text/html",

"Referer=",

"Snapshot=t1.inf",

"Mode=HTML",

EXTRARES,

"Url=/extern_js/f/CgV6aC1DThICY24rMAo4V0ACLCswDjgLLCswETgVLCswFjgXLCswFzgFLCswGDgFLCswGTgTLCswJTjKiAEsKzAmOAksKzAnOAQsKzA8OAIsKzBEOAEsKzBFOAEs/qft1hKbTw2Q.js", ENDITEM,

"Url=/favicon.ico", "Referer=", ENDITEM,

"Url=/intl/zh-CN/images/toolbar_animation_20090618.png", ENDITEM,

"Url=/complete/search?hl=zh-CN&xhr=t&q=A&cp=1", ENDITEM,

"Url=/complete/search?hl=zh-CN&xhr=t&q=AJ&cp=2", ENDITEM,

"Url=/complete/search?hl=zh-CN&xhr=t&q=AJA&cp=3", ENDITEM,

"Url=/complete/search?hl=zh-CN&xhr=t&q=AJAX&cp=4", ENDITEM,

LAST);

web_url("csi",

"URL=http://www.google.cn/csi?v=3&s=webhp&action=&e=17259,23361,23603&ei=kMFrS-GQB8qNkAWljIX6AQ&expi=17259,23361,23603&imc=2&imn=2&imp=2&rt=prt.110,xjsls.125,ol.437,iml.250,xjses.437,xjsee.468,xjs.500",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/",

"Mode=HTML",

LAST);

web_url("search",

"URL=http://www.google.cn/search?hl=zh-CN&source=hp&q=AJAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/",

"Snapshot=t2.inf",

"Mode=HTML",

LAST);

web_url("gen_204",

"URL=http://www.google.cn/gen_204?mgmhp=shp1&ct=v&cd=false",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/search?hl=zh-CN&source=hp&q=AJAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Mode=HTML",

LAST);

web_url("csi_2",

"URL=http://www.google.cn/csi?v=3&s=web&action=&e=17259,23361,23603&ei=msFrS5anH8qGkAX5rJDwAw&expi=17259,23361,23603&imc=1&imn=1&imp=1&rt=prt.125,ol.343,iml.156,xjses.375,xjsee.390,xjsls.390,xjs.437",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/search?hl=zh-CN&source=hp&q=AJAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Mode=HTML",

LAST);

return 0;

}

google suggest的行为被录制到第一个web_url的请求中,被作为资源进行HTTP请求。Web_url函数中的EXTRARES表示表示后面的url所指的内容都是作为资源来请求的,LR的帮助文档中是这样说的:

A list of resources generated by non–HTML mechanisms in the Web page. These include the resources requested by Javascript, ActiveX, Java applets and Flash. VuGen's Recording Options allow these elements either to be recorded within the current script step (the default mode) or recorded as separate steps (see "Recording in HTML–Based Mode" in the VuGen Online Book).

如果想把google suggest的行为分别录制成一个个的web_url请求,则需要修改录制模式,改为用“URL-Based”模式录制:

Action()

{

web_add_cookie("PREF=ID=372e76ef6c7e842e:U=1961d03ffd7ab924:NW=1:TM=1264934277:LM=1264934316:S=OYfvCjRzGq1u4u4z; DOMAIN=www.google.cn");

web_add_cookie("NID=31=hwv9eoM6IVUuD1ssILGftThmu8fjLzTdRUZXJTwcEggxBjCoy4Fh3dEsZVLVZ66_WndMz03It6xuCCWAqW28ZCj2r2wJxmfKM4_UHMZGk_mnybPjA6tDdB9HFqVkX1EU; DOMAIN=www.google.cn");

web_url("www.google.cn",

"URL=http://www.google.cn/",

"Resource=0",

"RecContentType=text/html",

"Referer=",

"Snapshot=t1.inf",

"Mode=HTTP",

LAST);

web_concurrent_start(NULL);

web_url("logo_cn.gif",

"URL=http://www.google.cn/intl/zh-CN/images/logo_cn.gif",

"Resource=1",

"RecContentType=image/gif",

"Referer=http://www.google.cn/",

"Snapshot=t2.inf",

LAST);

web_url("cn_icp.gif",

"URL=http://www.google.cn/intl/zh-CN_cn/images/cn_icp.gif",

"Resource=1",

"RecContentType=image/gif",

"Referer=http://www.google.cn/",

"Snapshot=t3.inf",

LAST);

web_concurrent_end(NULL);

web_concurrent_start(NULL);

web_url("qft1hKbTw2Q.js",

"URL=http://www.google.cn/extern_js/f/CgV6aC1DThICY24rMAo4V0ACLCswDjgLLCswETgVLCswFjgXLCswFzgFLCswGDgFLCswGTgTLCswJTjKiAEsKzAmOAksKzAnOAQsKzA8OAIsKzBEOAEsKzBFOAEs/qft1hKbTw2Q.js",

"Resource=1",

"RecContentType=text/javascript",

"Referer=http://www.google.cn/",

"Snapshot=t4.inf",

LAST);

web_url("nav_logo7.png",

"URL=http://www.google.cn/images/nav_logo7.png",

"Resource=1",

"RecContentType=image/png",

"Referer=http://www.google.cn/",

"Snapshot=t5.inf",

LAST);

web_url("favicon.ico",

"URL=http://www.google.cn/favicon.ico",

"Resource=1",

"RecContentType=image/x-icon",

"Referer=",

"Snapshot=t6.inf",

LAST);

web_concurrent_end(NULL);

web_url("csi",

"URL=http://www.google.cn/csi?v=3&s=webhp&action=&e=17259,23361,23603&ei=9MRrS62DC8yTkAX285SPAw&expi=17259,23361,23603&imc=2&imn=2&imp=2&rt=prt.94,xjsls.109,ol.437,iml.328,xjses.452,xjsee.484,xjs.515",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/",

"Mode=HTTP",

LAST);

web_concurrent_start(NULL);

web_url("toolbar_animation_20090618.png",

"URL=http://www.google.cn/intl/zh-CN/images/toolbar_animation_20090618.png",

"Resource=1",

"RecContentType=image/png",

"Referer=http://www.google.cn/",

"Snapshot=t7.inf",

LAST);

web_url("search",

"URL=http://www.google.cn/complete/search?hl=zh-CN&xhr=t&q=A&cp=1",

"Resource=1",

"RecContentType=application/json",

"Referer=http://www.google.cn/",

"Snapshot=t8.inf",

LAST);

web_url("search_2",

"URL=http://www.google.cn/complete/search?hl=zh-CN&xhr=t&q=Aj&cp=2",

"Resource=1",

"RecContentType=application/json",

"Referer=http://www.google.cn/",

"Snapshot=t9.inf",

LAST);

web_url("search_3",

"URL=http://www.google.cn/complete/search?hl=zh-CN&xhr=t&q=AjA&cp=3",

"Resource=1",

"RecContentType=application/json",

"Referer=http://www.google.cn/",

"Snapshot=t10.inf",

LAST);

web_url("search_4",

"URL=http://www.google.cn/complete/search?hl=zh-CN&xhr=t&q=AjAX&cp=4",

"Resource=1",

"RecContentType=application/json",

"Referer=http://www.google.cn/",

"Snapshot=t11.inf",

LAST);

web_concurrent_end(NULL);

lr_think_time(14);

web_url("search_5",

"URL=http://www.google.cn/search?hl=zh-CN&source=hp&q=AjAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/",

"Snapshot=t12.inf",

"Mode=HTTP",

LAST);

web_url("nav_logo7.png_2",

"URL=http://www.google.cn/images/nav_logo7.png",

"Resource=1",

"RecContentType=image/png",

"Referer=http://www.google.cn/search?hl=zh-CN&source=hp&q=AjAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Snapshot=t13.inf",

LAST);

web_url("gen_204",

"URL=http://www.google.cn/gen_204?mgmhp=shp1&ct=v&cd=false",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/search?hl=zh-CN&source=hp&q=AjAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Mode=HTTP",

LAST);

web_url("csi_2",

"URL=http://www.google.cn/csi?v=3&s=web&action=&e=17259,23361,23603&ei=BMVrS-fpFMqGkAWXrpzwAw&expi=17259,23361,23603&imc=1&imn=1&imp=0&rt=prt.468,ol.499,iml.468,xjses.546,xjsee.561,xjsls.561,xjs.608",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.google.cn/search?hl=zh-CN&source=hp&q=AjAX&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=",

"Mode=HTTP",

LAST);

return 0;

}

这样录制下来的脚本会长很多。Google suggest的AJAX行为被分别录制成一个个的web_url请求,并且放在web_concurrent_startweb_concurrent_end之间。关于web_concurrent_start函数的描述,可以参考LR帮助文档:

The web_concurrent_start function marks the beginning of a concurrent group. All functions within the group are executed concurrently. The end of the group is marked by the web_concurrent_end function. Within the concurrent group, you may include Action functions and several Service functions.

Note that the functions included within the concurrent group are not executed immediately. Instead they are registered for concurrent execution. When the concurrent group is closed, all of the functions registered as concurrent are executed together.

Concurrent中的函数都会先注册,而不是马上执行,直到web_concurrent_end才一起执行,这个从回放的日志也可以看出来:

Action.c(73): web_concurrent_start was successful         [MsgId: MMSG-26392]

Action.c(75): Registering web_url("toolbar_animation_20090618.png") was successful         [MsgId: MMSG-26390]

Action.c(83): Registering web_url("search") was successful     [MsgId: MMSG-26390]

Action.c(91): Registering web_url("search_2") was successful        [MsgId: MMSG-26390]

Action.c(99): Registering web_url("search_3") was successful        [MsgId: MMSG-26390]

Action.c(107): Registering web_url("search_4") was successful      [MsgId: MMSG-26390]

Action.c(115): web_concurrent_end was successful, 8506 body bytes, 1355 header bytes, 84 chunking overhead bytes     [MsgId: MMSG-26385]

LoadRunner测试Google Suggest的更多相关文章

  1. AJAX实现仿Google Suggest效果

    修复了一些细节代码(支持持续按键事件) *项目名称:AJAX实现类Google Suggest效果*作者:草履虫(也就是蓝色的ecma)*联系:caolvchong@gmail.com*时间:2007 ...

  2. LoadRunner测试AJAX

    什么是AJAX? Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for cre ...

  3. LoadRunner测试结果分析03 转载至zhangzhe的新浪博客

    LoadRunner测试结果分析之我见 前面分析的Web Resource(网络资源)的测试情况,其主要关注的是服务器性能,而系统本身和环境都有可能存在问题,页面诊断(Web Page Diagnos ...

  4. LoadRunner测试结果分析02 转载至zhangzhe的新浪博客

    LoadRunner测试结果分析之我见 上述测试过程的重点在于事务,而LoadRunner生成的测试结果图并不局限于事务上,其中还有是关于Vusers.Errors.Web Resources.Web ...

  5. LoadRunner测试结果分析01 转载至zhangzhe的新浪博客

    LoadRunner测试结果分析之我见 LoadRunner生成测试结果并不代表着这次测试结果的结束,相反,这次测试结果的重头戏才刚刚开始.如何对测试结果进行分析,关系着这次测试的成功与否.网上关于L ...

  6. LoadRunner测试场景中添加负载生成器

    如何在LoadRunner测试场景中添加负载生成器 本文对如何在LoadRunner的测试场景中添加负载生成器,如何使用负载生成器的方法,总结形成操作指导手册,以指导测试人员指导开展相关工作. 1.什 ...

  7. LoadRunner测试50人同时登陆下单

    LoadRunner测试50人同时登陆下单 一.LoadRunner简介 LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找 ...

  8. LoadRunner测试问题

    1.关于Error -27791: Error -27790:Error -27740: 错误如下: Action.c(198): Error -27791: Server has shut down ...

  9. LoadRunner测试ajax框架,回放后系统中没有产生数据解决方法

    1.QTP11 下载地址:http://www.genilogix.com/downloads/unified-functional-testing/quicktest-professional-11 ...

随机推荐

  1. DELPHI数组,指针,字符串转换的例子

    关于数组,指针,字符串转换的例子 var   aa:   array [0..5] of Char;   bb:Pointer;   cc:string;   dd:PChar; procedure ...

  2. 文件的上传(TCP)

    问题描述:将本地文件上传(需将文件名一起上传)至指定服务器,服务器将上传的文件保存至指定路径下并文件名添加前缀 "Downlod_原文件名". 思路: 客户端需要一个输入流来读取本 ...

  3. opencv对鼠标的响应

    #include <cv.h> #include <highgui.h> #include <stdio.h>   #pragma comment(lib,&quo ...

  4. E - A strange lift 【数值型BFS+上下方向】

    There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 ...

  5. python3爬虫爬取煎蛋网妹纸图片(上篇)

    其实之前实现过这个功能,是使用selenium模拟浏览器页面点击来完成的,但是效率实际上相对来说较低.本次以解密参数来完成爬取的过程. 首先打开煎蛋网http://jandan.net/ooxx,查看 ...

  6. CodeForces 348C Subset Sums(分块)(nsqrtn)

    C. Subset Sums time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...

  7. [USACO Special 2007 Chinese Competition]The Bovine Accordion and Banjo Orchestra

    [原题描述以及提交地址]:http://acm.tongji.edu.cn/problem?pid=10011 [题目大意] 给定两个长度为N的序列,要给这两个序列的数连线.连线只能在两个序列之间进行 ...

  8. 【计算几何】 Codeforces Beta Round #67 (Div. 2) E. Ship's Shortest Path

    读懂题意其实是模板题.就是细节略多. #include<cstdio> #include<cmath> #include<algorithm> using name ...

  9. 【母函数】hdu2082 找单词

    普通型母函数详解见这里:http://www.wutianqi.com/?p=596 裸题,存个板子. #include<cstdio> #include<cstring> u ...

  10. scrapy初探

    一  创建scrapy项目 运行命令: scrapy startproject 项目名称 目录结构 二  定义Item容器 Item是保存爬取到数据的容器,其使用方法和python字典类似,并且提供了 ...