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. 《Java编程思想》笔记 第二章 一切都是对象

    1.对象存储位置 对象的引用存在栈中,对象存在堆中.new 出来的对象都在堆中存储.栈的存取速度较快. 所有局部变量都放在栈内存里,不管是基本类型变量还是引用类型变量,都存储在各自的方法栈中: 但是引 ...

  2. selenium 多窗口切换(windows)

    在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,这时就需要主机切换到新窗口进行操作..WebDriver 提供了switchTo() ...

  3. 关于 log4j.additivity的说明

    log4j.additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位.具体说,默认情况下 子Logger 会继承 父Logger 的appender, ...

  4. python2和python3中的编码问题

    开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分. 首先说个概念: unicode:在本文中表示用4byte表示的 ...

  5. CF 115 A 【求树最大深度/DFS/并查集】

    CF A. Party time limit per test3 seconds memory limit per test256 megabytes inputstandard input outp ...

  6. Spring Cloud 常用依赖

    <!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud< ...

  7. 显示(explicit )与隐式(implicit)转换操作符

    class Program { static void Main(string[] args) { /* * 不管是显示还是隐式转换,一种类型都只能出现一次 */ Console.WriteLine( ...

  8. Servlet规范简介

    引言 Web 框架一般是通过一个 Servlet 提供统一的请求入口,将指定的资源映射到这个 servlet, 在这个 servlet 中进行框架的初始化配置,访问 Web 页面中的数据,进行逻辑处理 ...

  9. 【CCpp程序设计2017】迷宫游戏

    大一寒假作业!写了第一个小游戏! //maze_test By lizitong #include<stdio.h> #include<time.h> #include< ...

  10. 【莫队算法】【权值分块】bzoj3236 [Ahoi2013]作业

    莫队显然.然后维护转移的时候如果用树状数组,则很容易TLE.所以用权值分块维护转移. 总复杂度O(m*sqrt(n)). #include<cstdio> #include<algo ...