51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2782|回复: 5
打印 上一主题 下一主题

[原创] 百度ajax搜索的Loadrunner代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-9-10 16:38:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近有人看了我的Google的ajax案例后想做个baidu的,然后总是做不出来于是问我,这里丢一个Baidu Ajax的Loadrunner 9.52的代码,其实道理是一样的,虽然代码不一样,写不出来我觉得还是基础不够扎实而已。
ajax到底是什么,就是小片段发http请求返回数据包再更新本页而已,baidu的ajax只是在编码上采用了json的方式,LR解包要做2次分离而已。
代码如下:

splitchartoparamarr(char *x,char *y,char *paramarrname)//该函数的作用是输入*x,按照*y边界进行分割,最后生成参数数组paramarrname
{
extern char * strtok(char * string, const char * delimiters );
   char charstring[1000],separators[100],paramname[110];//定义输入的字符串,分割符和需要生成的数组名,字符串长度1000,分隔符100,数组名100
    char * token;
int i=0;//初始化计数器
char paramcount[10],paramarrcount[110];//定义生成参数数组的两个元素,参数数组长度及参数数组名_count参数
strcpy(charstring,x);
strcpy(separators,y);
    token = (char *)strtok(charstring, separators); // Get the first token
    if (!token) {
        lr_output_message ("No tokens found in string!");
        return( -1 );
    }
    while (token != NULL ) { // While valid tokens are returned
        //lr_output_message ("%s", token );//输出分割内容
  i++;
        sprintf(paramname,"%s_%d",paramarrname,i);
  //lr_output_message ("%s", paramname );//输出参数名
  lr_save_string(token,paramname);
        token = (char *)strtok(NULL, separators); // Get the next token
  
    }
sprintf(paramarrcount,"%s_count",paramarrname);
itoa(i,paramcount,10);
lr_save_string(paramcount,paramarrcount);
}
Action()
{
web_add_cookie("BAIDUID=E7D926225049FBFA2825D275471717A8:FG=1; DOMAIN=www.baidu.com");
web_url("www.baidu.com",
  "URL=http://www.baidu.com/",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t16.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=/js/bdsug.js?v=1.0.3.0", ENDITEM,
  "Url=/favicon.ico", "Referer=", ENDITEM,
  LAST);
web_add_cookie("BAIDUID=E7D926225049FBFA2825D275471717A8:FG=1; DOMAIN=suggestion.baidu.com");
lr_think_time(13);
web_url("su",
  "URL=http://suggestion.baidu.com/su?wd=l&p=3&cb=window.bdsug.sug&t=1284106978040",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t17.inf",
  "Mode=HTML",
  LAST);
web_url("su_2",
  "URL=http://suggestion.baidu.com/su?wd=load&p=3&cb=window.bdsug.sug&t=1284106978427",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t18.inf",
  "Mode=HTML",
  LAST);
web_url("su_3",
  "URL=http://suggestion.baidu.com/su?wd=loadu&p=3&cb=window.bdsug.sug&t=1284106978662",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t19.inf",
  "Mode=HTML",
  LAST);
web_url("su_4",
  "URL=http://suggestion.baidu.com/su?wd=loadr&p=3&cb=window.bdsug.sug&t=1284106979097",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t20.inf",
  "Mode=HTML",
  LAST);
web_url("su_5",
  "URL=http://suggestion.baidu.com/su?wd=loadru&p=3&cb=window.bdsug.sug&t=1284106979222",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t21.inf",
  "Mode=HTML",
  LAST);
web_url("su_6",
  "URL=http://suggestion.baidu.com/su?wd=loadrun&p=3&cb=window.bdsug.sug&t=1284106979396",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t22.inf",
  "Mode=HTML",
  LAST);
   
web_reg_save_param("search",
  "LB=[\"",
  "RB=\"]",
  "Ord=1",
  "Search=NoResource",
  LAST);

web_url("su_7",
  "URL=http://suggestion.baidu.com/su?wd=loadrunner&p=3&cb=window.bdsug.sug&t=1284106979773",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=baiduapp/json",
  "Referer=http://www.baidu.com/",
  "Snapshot=t23.inf",
  "Mode=HTML",
  LAST);
splitchartoparamarr(lr_eval_string("{search}"),"\",\"","ajaxsearch");
lr_save_string(lr_paramarr_random("ajaxsearch"),"temp");
web_add_cookie("BAIDUID=E7D926225049FBFA2825D275471717A8:FG=1; DOMAIN=s.baidu.com");
web_url("s",
  "URL=http://www.baidu.com/s?wd={temp}&oq=loadrunner&rsp=2&f=3&sugT=3295",
  "TargetFrame=",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=http://www.baidu.com/",
  "Snapshot=t24.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=http://s.baidu.com/w.gif?q=loadrunner+9%2E5+%C6%C6%BD%E2&fm=se&T=1284106991&y=8EDEAABA&cw=1379&path=http://www.baidu.com/s?wd=loadrunner+9.5+%C6%C6%BD%E2&oq=loadrunner&rsp=2&f=3&sugT=3295&cid=0&qid=df03299c01c602f8&t=1284106982379", "Referer=http://www.baidu.com/s?wd=loadrunner+9.5+%C6%C6%BD%E2&oq=loadrunner&rsp=2&f=3&sugT=3295", ENDITEM,
  LAST);
return 0;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2010-9-10 16:44:15 | 只看该作者
ps,这个还不是完整的代码,你可以自己做参数化,并且模拟参数化的内容产生的多个请求,具体写法参考我书后面的ajax章节的字符串遍历方式
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2010-9-10 17:13:27 | 只看该作者
云层老师的这种精神真赞~~~顶一下
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-9-10 17:33:55 | 只看该作者

请教

云层:对于你的脚本我提几个疑问

一直询问你的那个人就是我,首先非常感谢你一直的解答,但是我还是想有几个疑问请教你:
1、你这里说只是因为百度使用了json的编码格式,要做两次解包而已
疑惑:我通过httpwatch进行http数据包的拦截分析,google也用的是json的编码格式。那么,参考你之前做的google的ajax视频来说,就不需要什么split的解包的操作。这个地方不明白,希望得到你的解惑

2、跟你请教,你说你的脚本录制方式是html base script,但是我在lr9.1的基础上用该方式下的两种submit_date和submit_form均不是你博客所说的录制的内容。唯有用url的方式才与你博客的内容一致。这里我想请问你:是因为我的版本问题还是你的口误?

另外一点:建议

记得你的lr书出版的时候专门在51testing上面开了一个版本来回答消费者对该书的一些疑惑,当然每个人精力有限,所以是固定周期的。这个很好。作为我们看到了你对于用户的体验的重视,也看到了我们之间的互动。
所以,希望你针对一些问题,可不可以,适当的,平和的进行一些指导。

因为大家都是做这一块的,就是因为51testing能够为大家解答一些疑惑和给予一定的方向指导,大家才会来到这里,不是吗?我相信,在云大你们这么优秀的讲师的参与下,51testing将更加体现出测试精神家园的家园的感觉,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-9-11 10:16:18 | 只看该作者
这个脚本还可以进一步改进,将几个web_url合并在一个,做一个循环,根据给出的搜索字符串(例如:LoadRunner)来决定循环几次,发送web_url请求
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    6#
    发表于 2010-9-13 22:13:13 | 只看该作者
    怎么感觉简单的事情,却弄得很复杂一样
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 16:45 , Processed in 0.064860 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表