51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3023|回复: 14
打印 上一主题 下一主题

[原创] 怎么让每个Vuser把自己从Webservice得到的返回数据分别保存在不同的文件中。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-9-4 16:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-9-4 17:34:00 | 只看该作者
文件名参数化可以么。
我瞎说的,帮你顶~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-9-4 17:58:34 | 只看该作者
用vuser类型的参数加到文件后面,也就是d:\LOG{vuser}.txt,就可以实现了
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-9-4 18:02:33 | 只看该作者
全局循环变量,当Vuser数大于1时,每个VUSER间的“i”会互相影响 ???

不会影响
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-9-4 18:05:23 | 只看该作者
你这样输出到文本里面,,最后不就是判断是否正确吗?
何不在脚本里面实现这个功能。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-9-4 21:43:18 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-9-5 00:24:45 | 只看该作者

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

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

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2009-9-8 15:46:48 | 只看该作者

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

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

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

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-9-8 15:48:10 | 只看该作者

回复 5# 的帖子

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 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。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2009-9-9 11:32:50 | 只看该作者

回复 10# 的帖子

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

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-9-9 12:12:28 | 只看该作者

哈哈,终于摸索出来了

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

这样就行了。

多谢大家的指教了。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 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;
}
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-8-25 11:11
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2009-9-9 13:12:56 | 只看该作者
    好贴学习
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-16 06:57 , Processed in 0.072553 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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