yu12377 发表于 2009-9-4 16:35:08

怎么让每个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:00

文件名参数化可以么。
我瞎说的,帮你顶~

lijian422202 发表于 2009-9-4 17:58:34

用vuser类型的参数加到文件后面,也就是d:\LOG{vuser}.txt,就可以实现了

lijian422202 发表于 2009-9-4 18:02:33

全局循环变量,当Vuser数大于1时,每个VUSER间的“i”会互相影响 ???

不会影响

lijian422202 发表于 2009-9-4 18:05:23

你这样输出到文本里面,,最后不就是判断是否正确吗?
何不在脚本里面实现这个功能。

xiaoy035 发表于 2009-9-4 21:43:18

:Q

C组十三 发表于 2009-9-5 00:24:45

最好是写到一个或几个文件中.

大型项目中,往往需要运行多天,数据量大.
只有定义好格式后才能迅速的检查日志.

yu12377 发表于 2009-9-8 15:46:48

呵呵,几天没来了,谢谢大家指教,纠正几个问题

1.上面的代码可以将每个VUSER从WEBSERVICE获得的返回结果正确保存的文件中,但都保存在一个文件中,查看起来不方便。

2.上面代码中的全局变量“i”不会互相影响,谢谢 lijian422202指正。

yu12377 发表于 2009-9-8 15:48:10

回复 5# 的帖子

在脚本里面实现是什么意思?刚接触LR不是太了解,不过幸好还有点C语言基础。

lijian422202 发表于 2009-9-9 11:08:55

如果你要输出到不同的文件,
你可以把char * filename = "d:\\LOG{ID}.txt"; 其中ID是以vuserid的参数类型,你可以在参数话下拉框中找到。这样就可以做到1个用户一个log文件。方便查看。(但还是要查看。。。)
如果你知道WEBSERVICE中的一个特定字段是说明成功与否,就直接在脚本中做判断。正确则事务通过,不正确则失败,这样就不需要日志来人工观察了

yu12377 发表于 2009-9-9 11:27:34

回复 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:50

回复 10# 的帖子

害得我又用指针,又用字符串数组,又循环复制字符什么的,最后还是没搞出来,没想到一个参数就能搞定。
谢谢“lijian422202”,我对你的崇拜犹如涛涛江水,连棉不绝。如果你再告诉我怎么在脚本中判断的话那真“五体投地”了。哈哈:lol

yu12377 发表于 2009-9-9 12:12:28

哈哈,终于摸索出来了

filename =lr_eval_string("d:\\LOG\\IFace_{ID}.txt");ID为Vuser ID 类型参数。

这样就行了。

多谢大家的指教了。

yu12377 发表于 2009-9-9 12:36:48

完整代码:

实现功能:每个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:56

好贴学习
页: [1]
查看完整版本: 怎么让每个Vuser把自己从Webservice得到的返回数据分别保存在不同的文件中。