51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3028|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]测试小兵

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

    使用道具 举报

    该用户从未签到

    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;
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    哈哈,终于摸索出来了

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

    这样就行了。

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

    使用道具 举报

    该用户从未签到

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

    回复 10# 的帖子

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

    使用道具 举报

    该用户从未签到

    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。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    回复 5# 的帖子

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

    使用道具 举报

    该用户从未签到

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

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

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

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

    使用道具 举报

    该用户从未签到

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

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

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    不会影响
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-19 04:42 , Processed in 0.070727 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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