您的位置:首页 > 其它

LoadRunner脚本编写<二>-- 数据类…

2013-09-15 10:14 453 查看
一,数据类型转换

没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难。下面介绍这方面的知识。

1. 相似函数的输出在不同的位置

象很多C函数一样,使用atoi函数的结果即为返回值

如intResult = atoi( charY );

而:itoa的返回结果为第二个参数。

itoa( intX, charY, 10);

第一个参数是需要转换的数字,第二个参数是转换后存储的字符数组,需要注意的是数组必须定义为固定的长度,如:char
chary[20];

数组的最大长度为32064(32K),否则会出现“too many variables”编译错误。

如果定义为变长的字符串如char *charY,则程序会出错。

第三个参数不是数组的长度,而是数字的基数,10进制是最常用的,其他还有二进制,八进制,十六进制。

2. 有一些函数实现了同样的功能

itoa不是一个标准的ANSI
C函数但是是C的stdlib.h中的一个函数。所以它不被包括在unix机器上的LibC中。我们可以使用标准的sprintf函数来代替:

sprintf(charY,“%d”,intX);

3. 是用%X来转换一个十六进制数

int intNum;

sscanf(“ffff”,“%X”,&Num);

lr_output_message(“%d”,intNum); // 打印65535
,ffff的整数值

4. 从文本中提取数字的规则

如果第一个字符不是数字或者为空,atoi返回0,即“e24”会返回0

atoi 转换一个非数字的字符会返回组成这个字符的数字,如“-3.2”返回-3.0。“123XXX345”返回123。

5.
LoadRunner脚本中的参数必须转换成C字符串。有两种方式来转化LR的参数为C语言的数字。

i = atoi( lr_eval_string("{pX}")
);
sprintf( intX, "%d", lr_eval_string("{pX}") );
6. 参数的算术运算

LoadRunner没有提供对参数的算术运算的函数。所以LR的参数必须:

1) 转换成C的整数

2) 使用C的函数来运算最后返回一个C的字符串

3) 把返回的字符串保存成参数

char cBuf[10];
int i;
// 1. Evaluate parameter into a C integer:
i = atoi( lr_eval_string("{pNum_in}") );
// 2. Do the math and output the result to a C
string:
sprintf( cBuf, "%d", i+1);
// 3. Save the string as a parameter to be passed
on:
lr_save_string( cBuf, "pNum_out");
//Print out the parameter value after incrementing
it.
lr_message("**** Parameter from %s to %s",

lr_eval_string("{pNum_in}"));

lr_eval_string("{pNum_out}"));
zibeike注:除了对于数字类型的参数的运算之外,对于文本形式的参数的操作,可以参考我的另一篇文章的内容:http://www.51testing.com/?34866/action_viewspace_itemid_75592.html

二.字符串操作

在C语言中,字符串是固定长度的,因为他们本身由独立的字符组成的字符数组。数组是只读的。任何修改字符串长度的函数调用都会报错:

Error: "C interpreter runtime error - memory violation error
during replay.

在LoadRunner的as_web.h库中的字符串函数可以使用“prototyping”声明的方式读写内存:

char *strtok(char *, char *); // tokenizer prototype

char *strstr(char *, char *); // substring prototype

char *strdup(char *); // String duplication prototype

float atof(); // alpha to return float datatype

#include "as_web.h"

char *strtok(char *, char *); // prototype function call.

ActionX()

{

char aBuffer[256]; // input string to be parsed.

char *cToken; // individual token from strtok.

char cSeparator[] = " "; // blank separator.

int i; // incrementer

char val[3][20]; // output array of strings.

char modified_val[20];

// Create a parameter named pDate:

lr_save_string("January 2, 2001", "pDate");

// Put parameter into a string buffer:

strcpy( aBuffer,lr_eval_string("{pDate}"));

// Show the buffer for debugging:

lr_output_message("%s\n",aBuffer);

// get first word (to the first blank):

cToken = strtok( aBuffer,cSeparator);

i = 1;
if(!token) { // first token was not found:

lr_output_message("No tokens found in string!");

return( -1 );

} else {

while( cToken != NULL) { // tokens are not NULL:

lr_output_message("Token=%s", cToken);

// Stuff in another array:

strcpy( val[i], cToken );

// Get next token:

cToken = strtok( NULL, cSeparator);

i++; // increment

}

lr_output_message("Val #1 is: %s", val[1]);

lr_output_message("Val #2 is: %s", val[2]);

lr_output_message("Val #2 is: %s", val[3]);

strncpy( modified_val, val[2], 1 );

//拷贝源字符串val[2]的第一个字符到目的字符串modified_val

modified_val[2] = '\0';

while (modified_val[2] != NULL) {

lr_output_message("===>%s", modified_val);

modified_val[2] = strtok(NULL, " ");

}

}

return 0;

}

strcat 连接两个字符串

strchr 返回指向第一个要查找的字符出现的位置的指针

strcmp 比较两个字符

strcpy 复制字符串到另一个

stricmp 执行一个大小写敏感的比较

strncpy 拷贝源字符串第n个字符到目的字符串

其他还有strdup,strncat,strncpy,strnicmp,strrchr,strset,strspn,strstr等字符串操作的函数。

zibeike注:关于更多字符串操作的脚本编写,可以参考我的另一篇文章:
http://www.51testing.com/?34866/action_viewspace_itemid_75428.html
zibeike翻译自:http://www.wilsonmar.com/1lrscrīpt.htm

Loadrunner
关于lr_save_datetime();lr_save_string();lr_output_message()的用法;

Action()
{
char pdata[12];

lr_save_string("2007,july 9","pdata");

lr_output_message("%s",lr_eval_string("{pdata}"));

lr_save_datetime("%Y-%m-%d",DATE_NOW ,"next");

lr_output_message("Today is
%s",lr_eval_string("{next}"));

return 0;}返回值:

Action.c(6): 2007,july 9

Action.c(8): Today is 2008-07-09
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: