51Testing软件测试论坛
标题:
怎么让每个Vuser把自己从Webservice得到的返回数据分别保存在不同的文件中。
[打印本页]
作者:
yu12377
时间:
2009-9-4 16:35
标题:
怎么让每个Vuser把自己从Webservice得到的返回数据分别保存在不同的文件中。
loadrunner中怎么让每个Vuser把自己从Webservice得到的返回数据分别保存在不同的文件里。
我写了个脚本,现在只能实现:一个Vuser时可以正确的将从 Webservice 得到的返回数据保存到文件中。
望大侠指教!谢谢
代码如下:
Init段:
char * filename = "d:\\LOG.txt"; //将得到的结果保存到这个文件里,怎么让每个VUSER保存到不同的文件中???
long file_stream; //句柄
char Str_result; //将Webservice返回的结果赋给它
long i=1; //全局循环变量,当Vuser数大于1时,每个VUSER间的“i”会互相影响 ???
const j=10000; //设置每隔多久记录一次返回结果
const logsta=1; //是否记录服务器返回的结果,为0时不记录
char * ipaddr; //虚拟IP地址
vuser_init()
{
file_stream = fopen(filename, "at"); // 打开文件
return 0;
}
active段
Action()
{
web_add_auto_header("Accept-Encoding", "gzip, deflate");
web_add_auto_header("Accept-Language", "zh-cn");
web_add_auto_header("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler 4.0; .NET CLR 1.1.4322; CIBA)");
lr_start_transaction("open");
web_url("Service.asmx",
"URL=http://192.168.2.7/AddrQuickMatchService/Service.asmx",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_end_transaction("open", LR_AUTO);
lr_start_transaction("click");
web_link("MatchAddr",
"Text=MatchAddr",
"Snapshot=t2.inf",
LAST);
lr_end_transaction("click", LR_AUTO);
if ( i%j==0 && logsta) {
//获取服务器返回的值
web_reg_save_param("Str_result",
"LB=<string>",
"RB=</string>",
LAST);
}
lr_start_transaction("result");
web_submit_form("MatchAddr_2",
"Snapshot=t3.inf",
ITEMDATA,
"Name=sourceAddr", "Value={Addr1}", ENDITEM,
LAST);
lr_end_transaction("result", LR_AUTO);
//检查是否使用IP欺骗
ipaddr = lr_get_vuser_ip();
if ( i%j==0 && logsta) {
if(ipaddr)
{
fprintf(file_stream, "%s\r\n",lr_eval_string(ipaddr)); //将虚拟IP记录入文件
}
fprintf(file_stream, "%s\r\n",lr_eval_string("{Str_result}"));//将服务器返回的结果记录入文件
fprintf(file_stream, "%u\r\n\n",i);
}
i++;
return 0;
}
end段时只是将打开的文件关闭
vuser_end()
{
fclose(file_stream);
return 0;
}
作者:
xxicy
时间:
2009-9-4 17:34
文件名参数化可以么。
我瞎说的,帮你顶~
作者:
lijian422202
时间:
2009-9-4 17:58
用vuser类型的参数加到文件后面,也就是d:\LOG{vuser}.txt,就可以实现了
作者:
lijian422202
时间:
2009-9-4 18:02
全局循环变量,当Vuser数大于1时,每个VUSER间的“i”会互相影响 ???
不会影响
作者:
lijian422202
时间:
2009-9-4 18:05
你这样输出到文本里面,,最后不就是判断是否正确吗?
何不在脚本里面实现这个功能。
作者:
xiaoy035
时间:
2009-9-4 21:43
作者:
C组十三
时间:
2009-9-5 00:24
标题:
最好是写到一个或几个文件中.
大型项目中,往往需要运行多天,数据量大.
只有定义好格式后才能迅速的检查日志.
作者:
yu12377
时间:
2009-9-8 15:46
标题:
呵呵,几天没来了,谢谢大家指教,纠正几个问题
1.上面的代码可以将每个VUSER从WEBSERVICE获得的返回结果正确保存的文件中,但都保存在一个文件中,查看起来不方便。
2.上面代码中的全局变量“i”不会互相影响,谢谢 lijian422202指正。
作者:
yu12377
时间:
2009-9-8 15:48
标题:
回复 5# 的帖子
在脚本里面实现是什么意思?刚接触LR不是太了解,不过幸好还有点C语言基础。
作者:
lijian422202
时间:
2009-9-9 11:08
如果你要输出到不同的文件,
你可以把char * filename = "d:\\LOG{ID}.txt"; 其中ID是以vuserid的参数类型,你可以在参数话下拉框中找到。这样就可以做到1个用户一个log文件。方便查看。(但还是要查看。。。)
如果你知道WEBSERVICE中的一个特定字段是说明成功与否,就直接在脚本中做判断。正确则事务通过,不正确则失败,这样就不需要日志来人工观察了
作者:
yu12377
时间:
2009-9-9 11:27
标题:
回复 10# 的帖子
我改成这样子了:filename = "d:\\LOG\\IFace_{ID}.txt";
参数{ID}也建好了,在参数列表中新建的,参数类型选择了Vuser ID,但最后生成的文件却是"d:\log\IFace{ID}.TXT"
没有按着最初设想生成:
d:\log\IFace_1.TXT
d:\log\IFace_2.TXT
1,2代表Vuser ID。
作者:
yu12377
时间:
2009-9-9 11:32
标题:
回复 10# 的帖子
害得我又用指针,又用字符串数组,又循环复制字符什么的,最后还是没搞出来,没想到一个参数就能搞定。
谢谢“lijian422202”,我对你的崇拜犹如涛涛江水,连棉不绝。如果你再告诉我怎么在脚本中判断的话那真“五体投地”了。哈哈
作者:
yu12377
时间:
2009-9-9 12:12
标题:
哈哈,终于摸索出来了
filename =lr_eval_string("d:\\LOG\\IFace_{ID}.txt"); ID为Vuser ID 类型参数。
这样就行了。
多谢大家的指教了。
作者:
yu12377
时间:
2009-9-9 12:36
标题:
完整代码:
实现功能:每个Vuser分别将自己从服务器得到的返回值保存到不同的文件中。
INIT段:
long file_stream; //句柄,用于操作文件,相当于C中的文件指针
char Str_result; //用于记录服务器返回的值,并纪录到文件中
long i=1; //全局循环变量
const j=1; //设置每隔多久记录一次返回结果
const logsta=1; //是否记录服务器返回的结果
char * nowtime,*filename,*ipaddr; //分别是纪录当前运行时间、保存返回结果的文件名、纪录虚拟IP
vuser_init()
{
filename =lr_eval_string("d:\\LOG\\IFace_{username}.txt");
//打开用来保存结果的文件
if ((file_stream = fopen(filename, "at")) == NULL ) //建立文件
{
lr_error_message("Cannot open %s", filename);
return -1;
}
web_add_auto_header("Accept-Encoding", "gzip, deflate");
web_add_auto_header("Accept-Language", "zh-cn");
web_add_auto_header("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler 4.0; .NET CLR 1.1.4322; CIBA)");
lr_start_transaction("open");
web_url("Service.asmx",
"URL=http://192.168.2.7/AddrQuickMatchService/Service.asmx",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_end_transaction("open", LR_AUTO);
lr_think_time(5);
lr_start_transaction("click");
web_link("MatchAddr",
"Text=MatchAddr",
"Snapshot=t2.inf",
LAST);
lr_end_transaction("click", LR_AUTO);
return 0;
}
ACTION 段:
Action()
{
//获取服务器返回的结果
if ( i%j==0 && logsta) {
web_reg_save_param("Str_result",
"LB=<string>",
"RB=</string>",
LAST);
}
lr_rendezvous("start");
web_add_header("Accept-Encoding",
"gzip, deflate");
web_add_header("Accept-Language",
"zh-cn");
web_add_header("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler 4.0; .NET CLR 1.1.4322; CIBA)");
lr_think_time(15);
lr_start_transaction("result");
web_submit_data("MatchAddr_2",
"Action=http://192.168.2.7/AddrQuickMatchService/Service.asmx/MatchAddr",
"Method=POST",
"RecContentType=text/xml",
"Referer=http://192.168.2.7/AddrQuickMatchService/Service.asmx?op=MatchAddr",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=sourceAddr", "Value={Addr1}", ENDITEM,
LAST);
lr_end_transaction("result", LR_AUTO);
//lr_rendezvous("wirte"); //设置集合点
//lr_output_message("123456789=%s",lr_eval_string("{Str_result}")); //调试用
if ( i%j==0 && logsta) {
ipaddr = lr_get_vuser_ip(); //获得当前Vuser使用的虚拟IP
if(ipaddr) //判断是否使用虚拟IP
fprintf(file_stream, "%s\r\n",lr_eval_string(ipaddr)); //将虚拟IP记录入文件
lr_save_datetime("%x__%X",DATE_NOW,"nowtime");
fprintf(file_stream, "%s\r\n",lr_eval_string("{nowtime}"));
fprintf(file_stream, "%s\r\n",lr_eval_string("{Str_result}"));//将服务器返回的结果记录入文件
fprintf(file_stream, "%u\r\n\n",i);
}
i++;
return 0;
}
END段:
vuser_end()
{
fclose(file_stream);
return 0;
}
作者:
liujinkui
时间:
2009-9-9 13:12
好贴学习
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2