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!\n");

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) = '\0';

// 保存参数

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 数据

Loadrunner脚本读取 XMl 文件的更多相关文章

  1. IE下JS读取xml文件示例代码

    JS读取xml文件具体步骤为:创建DOM对象.加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助使用javascript脚本读取xml文件,这里暂只考虑IE浏览器st ...

  2. Matlab中使用脚本和xml文件自动生成bus模块

    帮一个老师写的小工具 在一个大工程中需要很多bus来组织信号,而为了规范接口,需要定义很多BusObject,用Matlab语言手写这些BusObject比较费工夫 所以用xml配置文件来写,也便于更 ...

  3. C#中常用的几种读取XML文件的方法

    1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/

  4. 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。

    程序读取xml文件后,系统报“Invalid byte 2 of 2-byte UTF-8 sequence”错误,如何解决呢? 1.程序解析xml的时候,出现Invalid byte 2 of 2- ...

  5. C#读取XML文件的基类实现

    刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...

  6. C#读取XML文件的方法

    先写一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <bookste> <!-- ...

  7. Spring相关:jdom学习:读取xml文件

    云课堂马士兵的spring2.5课程中提到的 用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类 ...

  8. 在C#中创建和读取XML文件

    1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...

  9. Java获取路径方法&相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

随机推荐

  1. UVA10462:Is There A Second Way Left? (判断次小生成树)

    Is There A Second Way Left? Description: Nasa, being the most talented programmer of his time, can’t ...

  2. Leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

    1.题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 va ...

  3. Codeforces Round #407 (Div. 2) D,E

    图论 D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. SoC时钟系统简介

    1.SoC的时钟获得一般有: * 外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少. * 外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的. * 外部晶振+内部时钟发 ...

  5. C#中static void Main(string[] args)的含义

    static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. ...

  6. HDU 5868 Different Circle Permutation Burnside引理+矩阵快速幂+逆元

    题意:有N个座位,人可以选座位,但选的座位不能相邻,且旋转不同构的坐法有几种.如4个座位有3种做法.\( 1≤N≤1000000000 (10^9) \). 题解:首先考虑座位不相邻的选法问题,如果不 ...

  7. [LA3523/uva10195]圆桌骑士 tarjan点双连通分量+奇环定理+二分图判定

    1.一个环上的各点必定在同一个点双连通分量内: 2.如果一个点双连通分量是二分图,就不可能有奇环: 最基本的二分图中的一个环: #include<cstdio> #include<c ...

  8. bzoj 2121 DP

    首先如果我们能处理出来i,j段能不能消掉,这样就可以直接dp转移了,设w[i]为前i为最少剩下多少,那么w[i]=w[j-1] (flag[j][i]). 现在我们来求flag[i][j],首先我们可 ...

  9. bzoj 1034 贪心

    首先如果我们想取得分最高的话,肯定尽量赢,实在赢不了的话就耗掉对方最高的,那么就有了贪心策略,先排序,我方最弱的马和敌方最弱的相比,高的话赢掉,否则耗掉敌方最高的马. 对于一场比赛,总分是一定的,所以 ...

  10. sass_安装问题(ERROR: Could not find a valid gem 'sass' (>= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: cert)

    安装sass前需安装ruby 安装好ruby好打开命令行,输入 gem install sass 出现错误: ERROR: Could not find a valid gem 'sass' (> ...