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