zoukankan      html  css  js  c++  java
  • Loadrunner脚本读取 XMl 文件

    Loadrunner脚本读取 XMl 文件

    性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X 。 好多人认为 loadrunner 只支持 C 语言(包括我之前也一直这么认为),因为 loadrunner 默认的脚本是 C 语言的,其实它支持目前所有主流的语言,如: Java User 、 VB User 、 VB script User  、 Javascript User 、 Mmicrosoft .NET 等,总有一款适合你的吧,最起码 C 语言是必修课吧。

    为了测试方便,下面用 C 语言来实现读取 XML 文件,然后通过读取的值进行比较判断。

    1. 运行 Virtual User Generator

    2. 新建 C User (此代码可用于 webservices )保存为 b-3

     3. 在 D 盘新建 test.xml 文件,内容如下

    <employee>

        <id>[0]</id>

        <name>{2}</name>

        <add>beijing</add>

        <age>20</age>

    </employee>

    4. 在 action 中编写读取 xml 代码

    5. 将下面代码复制到 Action 中的文件中,即可测试 .

    //*********************** 代码开始 *********************

    #define   filePath "D:\test.xml" // 定义文件的路径

    int lr_loadXml_strcmp(); // 申明读取 xml 的函数

    int * call_webservices(char * opt1,char *opt2);

    char *tmpVar="[0]";       // 申明一个全局的临时变量指针

    char *param1="a=3";       // 申明调用 webservices 的第一个参数指针

    char *param2="b=3";       // 申明调用 webservices 的第二个参数指针

    int *p_call_webservices;

                                                            //

    Action()   // 执行的入口

    {

           p_call_webservices=call_webservices( param1, param2); // 将函数交给指针

           if(lr_loadXml_strcmp()==0) // 返回不相等的比较

           {

                    lr_log_message(" 比较正确,请进行业务处理 ");

                    //p_call_webservices; // 需要一个 webservices 提供两个参数进入加运算

                   

           }

           else

           {

                    lr_log_message(" 没有找到相关的处理请求 ");

           }

           return 0;

    }

    // 下面这个函数,只是为了演示参数可以指针传递

    int * call_webservices(char * opt1,char *opt2)

    {

      int j=0;

      for (j=0;j<10;j++) {

                                                web_service_call( "StepName=add_103",

                                       "SOAPMethod=MyServiceImplService|MyServiceImplPort|add",

                                       "ResponseParam=response",

                                       "Service=MyServiceImplService",

                                       "ExpectedResponse=SoapResult",

                                       "Snapshot=t1392023302.inf",

                                       BEGIN_ARGUMENTS,

                                         opt1, //webservice 第一个参数, a=3

                                         opt2,//webservice 第一个参数, b=3

                                       END_ARGUMENTS,

                                       BEGIN_RESULT,

                                       "addResult=Param_addResult", // 返回值 a+b 的值

                                       END_RESULT,

                                       LAST);       

                                                lr_log_message("dn");

                      }

      return 0 ;// 暂时返回 0

    }

    int lr_loadXml_strcmp()

    {

           long fp;  

           int total = 0;

           int readbufsize = 0;

           int count = 0;

           int i = 0;

           int NumOfReadbuf_1   = 0;

           int NumOfReadbuf_2   = 0;

           int NumOfReadbuf_3   = 0;

           int NumOfReadbuf_4   = 0;

           int result=0;

           char *readbuf;

           char *file = filePath;

           // 读取 XML 文件

           if ( (fp = fopen(file, "r")) == NULL)

           {

           lr_message("open logfile failed! ");

           return -1;

           }  

           // 申请 readbuf

                    readbuf = (char*) calloc(50, sizeof(char));

           if (readbuf == NULL)

           {

           lr_message("Insufficient memory available");

           return -1;

           }

           // 循环读取文件

           while(!feof(fp))

           {

                    // 扩展缓冲区

                    if( readbufsize - total <= 10 )

                    {

                    readbufsize += 50;

                    readbuf = (char*) realloc(readbuf, readbufsize);

                    }

                    count = fread(readbuf + total, sizeof(char), 10, fp);

                    total += count;          

           }

           // 关闭文件句柄

           fclose(fp);

           // 修改 readbuf 内存值

           readbuf = (char*) realloc(readbuf, readbufsize+1);

                    *(readbuf+total) = '';

                    // 保存参数   

                    lr_save_string(readbuf,"readbuf_param");

                    // 读取记录

                    NumOfReadbuf_1 = lr_xml_get_values("XML={readbuf_param}",

             "ValueParam=id",

             "Query=/employee/id",

                                                  "SelectAll=yes",

              LAST);

                    NumOfReadbuf_2 = lr_xml_get_values("XML={readbuf_param}",

             "ValueParam=name",

             "Query=/employee/name",

                                                  "SelectAll=yes",

              LAST);

                    NumOfReadbuf_3 = lr_xml_get_values("XML={readbuf_param}",

             "ValueParam=add",

             "Query=/employee/add",

                                                  "SelectAll=yes",

              LAST);

                    NumOfReadbuf_4 = lr_xml_get_values("XML={readbuf_param}",

             "ValueParam=age",

             "Query=/employee/age",

                                                  "SelectAll=yes",

              LAST);

    lr_log_message("%s",lr_eval_string("{id_1}")); // 将 xml 中的第一个 id 节点值转为字符串并打印

    /*lr_log_message("%s",lr_eval_string("{name_1}"));

    lr_log_message("%s",lr_eval_string("{add_1}"));

    lr_log_message("%s",lr_eval_string("{age_1}"));

    */

           lr_save_string(lr_eval_string("{id_1}"),"getXmlValue");// 将 xml 中第一个 id 节点 {id_1} 的值给 getXmlValue

          

           // 将变量保存为参数 ,tmp 为变量

           lr_output_message(lr_eval_string("{getXmlValue}"));

             result=strcmp(tmpVar,lr_eval_string("{id_1}"));

           if(result==0)

           {

                    lr_output_message(" 成功取得了数据 ");

          

           }else

           {

                    lr_output_message(" 没有成功取得了数据 ");

           }

        return result; // 返回比较后的值 0 成功  

    }

    //************************* 代码结束

    6.run 运行后,控制台显示读取的 xml 数据

  • 相关阅读:
    php实现二维码
    java课设 五子棋代码编写(团队)
    java第十四次作业
    java第十三次作业
    java第十二次作业
    java第十一次作业
    java第十周学习总结
    java第九次学习总结
    java第八周学习总结
    201521123056 《Java程序设计》第11周学习总结
  • 原文地址:https://www.cnblogs.com/qmfsun/p/4512001.html
Copyright © 2011-2022 走看看