转自【http://novasblog.blog.163.com/blog/static/4371351420081019113042869/】
在测试搜索引擎时我们一般采用大量的搜索关键字,有时有必要了解在并发访问的情况下每个关键字的响应时间,一般如果不对脚本进行处理的话,你可以获得每个关键字的响应时间。但是,这些时间没有跟相应的关键字对应,所以对程序的调优没有什么大的帮助。这里介绍一种方法,可以让你知道在并发访问下每个关键字的响应时间。
解决办法是可以把搜索的操作定义为一个事务,事务名也用参数值代替,
这样就可以从测试结果中知道该关键字的响应时间了。举例如下:
#include "web_api.h"
Action()
{
lr_start_transaction(lr_eval_string("{SearchParam}"));
web_url("s",
"URL=http://www.baidu.com/s?wd={SearchParam}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
lr_end_transaction(lr_eval_string("{SearchParam}"), LR_AUTO);
return 0;
}
这样就可以在场景运行时通过事务监视图中就可以看到每个关键字的
所用的时间了。
这种方法的缺点是当关键字比较多时,监视器中行数会增多,可能
导致Controller显示不下。
还有一种方法,示例如下:
#include "web_api.h"
Action(){
float trans_time;
lr_start_transaction("sousuo");
web_url("s",
"URL=http://www.baidu.com/s?wd={SearchParam}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
trans_time = lr_get_transaction_duration("sousuo") * 1000;
lr_output_message("SearchParam:%s,duration:%fms",lr_eval_string("{SearchParam}"),trans_time);
lr_end_transaction("sousuo", LR_AUTO);
return 0;
}
一般使用这种方法比较好,可以把lr_output_message函数换为自定义
的函数,把结果写到一个结果文件中去,注意写入的文件最好以vuser id
来命名,这样可以保证同时只有一个进程在读写这个文件(这样一来不同
的用户读写不同的文件,否则如果所有用户写入同一文件在用户数多的情况下
并发可能造成对同一文件的访问共享违例,获得vuser id的函数为lr_whoami)。
另外需要说明的是这里获得的事务时间可能比通过lr_start_transaction
和 lr_end_transaction获得的事务的时间要小一些,这是由于测试工具自身的
原因造成的,可以不必理会。
同时,如果想知道查询过程中哪个关键字搜索结果错误,也可以加上验证点,
同时可以再加一些代码,把搜索超过一定时间的关键字过滤出来。
自己补充的完整程序,如下:
#include "web_api.h"
Action(){
float trans_time;
long file_stream;
char file_name[32];
char *filename;
int user_id;
int scid;
char *vuser_group;
char *suffix="txt";
lr_start_transaction("sousuo");
web_url("s",
"URL=http://www.baidu.com/s?wd={NewParam}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
trans_time = lr_get_transaction_duration("sousuo") * 1000;
lr_output_message("SearchParam:%s,duration:%fms",lr_eval_string("{NewParam}"),trans_time);
lr_whoami(&user_id, NULL, &scid);
sprintf(file_name,"c://sousuo//usrID_%d.%s",user_id,suffix);
filename=file_name;
lr_output_message("filename is :%s",filename);
if ((file_stream = fopen(filename, "aw")) == NULL ) //create a file
{
lr_error_message("Cannot open %s", "null file");
return -1;
}
fprintf(file_stream, "Keyword:%s->%fms/r/n",lr_eval_string("{NewParam}"),trans_time);//response time is written into file.
fclose(file_stream);
lr_end_transaction("sousuo", LR_AUTO);
return 0;
}
分享到:
相关推荐
LR参数化,从数据库中取数据出错.data retriever failed to execute query. 什么原因呢?数据库是IBM DB2.应用程序是.net开发的.
LR 参数化.docx LR 参数化.docx LR 参数化.docx
LR的对于登录和添加人员参数化,以及员工考勤。
LR参数化用户名密码 简单的实例教程,供新手参考学习
参数表中select next row和update value on的设置
如何用LR去测试页面的响应时间
有时碰到这样一种情况,使用性能工具LR测试出来的响应时间比实际使用IE感受到的时间要长,例如,实际使用IE打开一个系统时只需要1~2秒,而使用LR跑一个用户所得出的结果可能是8秒、10秒、或者更大的响应时间。...
实例分析lr的关联与参数化的区别以及LR使用过程中的各个函数如何写!
loadrunner数据库参数化常见FQA
这是关于lr中的一些参数化的文档,参数化要做一些准备,主要是参数化数据的准备,例如TXT文本、EXCEL表格以及数据库中的表都可以作为参数的数据集载体,而且LR都是支持的。具体的参数化流程如下: 1、 录制脚本 2、 ...
LR系统讲座之参数化LR系统讲座之参数化
LR-参数设置
西门子微波雷达LR460中文参数设置手册rar,西门子微波雷达LR460中文参数设置手册
对于每个新的请求,服务器都会产生新的SessionID给浏览器。...要对付这种服务器,必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代脚本中有用到Session ID的部分
大致解释了一下为什么有时候LR的相应时间会大于IE的实际使用体验的问题,比较浅显
LoadRunner参数化取值与连接数据库
本资料包括:LR资料 LR学习指南 LR函数解析 等几个版本的资料,对学习测试工具LR有不错的帮助
jmeter第三方插件,支持像lr一样实时监控TPS和响应时间
比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。但是如果如下:Action(){chara[10];strcpy(a,"{NewParam}");lr_message 在LR中,C的变量和LR的参数是不一样的。 任何C的变量都不能被LR的函数直接...
GA-LR参数优化与城市用地动态模拟,刘明皓,尚尉,为更好的理解城市扩张过程,如何提高基于地理元胞自动机的城市模型的精度一直是学者们不懈努力的方向。针对常规logistic回归模型的�