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]

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

LoadRunner测试Google Suggest相关推荐

  1. 运用Loadrunner测试Mysql数据库性能

    为什么80%的码农都做不了架构师?>>>    前言 针对数据库的性能测试,loadrunner本身支持sql server和oracle数据库,这两种数据库可以用loadrunne ...

  2. loadrunner mysql性能测试_运用Loadrunner测试Mysql数据库性能 TRON•极客

    1.前言 针对数据库的性能测试,loadrunner本身支持sql server和oracle数据库,这两种数据库可以用loadrunner直接录制进行测试.而我们项目中使用的是mysql数据库,针对 ...

  3. LoadRunner测试结果分析

    原文:http://blog.sina.com.cn/s/blog_8216ada70100tyx3.html LoadRunner生成测试结果并不代表着这次测试结果的结束,相反,这次测试结果的重头戏 ...

  4. LoadRunner 测试Tuxedo的问题

    LoadRunner 测试Tuxedo的问题 http://automationqa.com/forum.php?mod=viewthread&tid=1777 转载于:https://www ...

  5. LoadRunner 测试Oracle数据库及Siebel性能

    本次测试使用的loadrunner 版本为8.1,oracle数据库版本为10.2.0.1,各版本的测试方法基本是一样的.这里提供loadrunner 8.1,10000个web用户的license: ...

  6. LoadRunner测试工具大全下载,破解,licence

    LoadRunner测试工具大全下载,破解,licence. 目前的版本有7.8,8.0,8.1下面是他们的下载地址,大家看自己的情况下载 安装程序资源 (eMule资源) <工业标准级负载测试 ...

  7. Ajax-实现Google Suggest风格搜索

    1.上图简单模拟了下Google Suggest风格的搜索框,主要就是采用Ajax,Html,Css,js技术,后端采用原始的Servlet.实现起来比较容易,这里就不详细介绍了,只就需要注意的一点做 ...

  8. google suggest的实现

    自己想实现一个google suggest,以下是参考以为牛人的文章,加了一些自己的东西终于调通啦,以为是源码,希望对大家有所帮助,后台传回的为json的字符串,大体思路为:文本框监听键盘事件.触发事 ...

  9. Loadrunner 测试https请求配置

    问题: 在测试https请求的时候发现无法通过,并且报错 Action.c(31): Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host ...

  10. LoadRunner测试问题及解决方法总结

    一.Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤: 1.修改run time setting中的请求超时时间,增加到600s, ...

最新文章

  1. Android获取顶部状态栏statusBar高度、底部导航栏navigationBar高度
  2. 高可用可伸缩架构实用经验谈
  3. 如何达到自己想要的成功 2011.8.4
  4. python用tsne降维_哈工大硕士实现了 11 种经典数据降维算法,源代码库已开放
  5. 10个你必须知道的Python内置函数
  6. 快速判断数组中每个对象同一属性值是否相同
  7. get请求,参数值为json字符串如何传值
  8. MATLAB GUI不同控件函数间变量传递方法
  9. C语言之结构体嵌套调用(十八)
  10. 中南大学 科学计算和MATLAB 初级语言学习01_02
  11. 基于京东家电商品知识图谱的自动问答系统(一) -- Neo4j构建知识图谱
  12. Redis详细下载安装教程
  13. 【校招VIP】测试脚本语言之系统状态(内存、网络)
  14. 快速部署使用tensorRT加速推理(trt,onnx)
  15. kali系统自带的aircrack-ng破解WIFI
  16. 配置ip地址常用命令及解释
  17. 关于CDN加速 CDN加速是什么
  18. 单片机c语言延时程序计算,单片机 计算延时子程序执行时间
  19. 盘点2018年化工行业大事故!回顾那些令人心痛的瞬间......
  20. Smart-doc的脚本生成在线文档(精简官方文档描述)

热门文章

  1. MySQL数据库远程连接开启方法
  2. android中LayoutInflater详解与使用
  3. HDU 3200 Arborescence Counting
  4. hge引擎写的一个扫雷小游戏
  5. 现有 Delphi 项目迁移到 Tiburon 中的注意事项
  6. Div 在页面中居中
  7. R|数据处理|list的转化与转置
  8. (二)建筑物多边形化简系列——多边形点数化简
  9. CC2640 LaunchPad入门试用-第一篇
  10. maven夹包引入的速度问题