http://www.360doc.com/content/10/0806/13/1698198_44078277.shtml

一,数据类型转换

没有使用过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);

sprintf

Writes formatted output to a string.

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

int intNum;

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

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

sscanf

Reads formatted input from a string.

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

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

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

Converts a string to an integer value.

atoi reads the initial portion of the string only, by stopping at the first non-numerical character.

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

i = atoi( lr_eval_string("{pX}") );

sprintf( intX, "%d", lr_eval_string("{pX}") );

lr_eval_string

Returns the string argument after evaluating embedded parameters.

The lr_eval_string function returns the input string after evaluating any embedded parameters. If string argument contains only a parameter, the function returns the current value of the parameter.

Embedded parameters must be in brackets.

6.  参数的算术运算

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

1)  转换成C的整数

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

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

view plaincopy to clipboardprint?
char cBuf[10];   
 
int i;   
 
// 1. 转换成C的整数:  
 
i = atoi( lr_eval_string("{pNum_in}") );  
 
// 2. 使用C的函数来运算最后返回一个C的字符串:  
 
sprintf( cBuf, "%d", i+1);   
 
// 3.把返回的字符串保存成参数:  
 
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}"));  
char cBuf[10];

int i;

// 1. 转换成C的整数:

i = atoi( lr_eval_string("{pNum_in}") );

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

sprintf( cBuf, "%d", i+1);

// 3.把返回的字符串保存成参数:

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 prototypechar *strstr(char
*, char *); // substring prototypechar *strdup(char *); // String
duplication prototypefloat 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];       
// 创建一个参数pDate:   lr_save_string("January 2, 2001", "pDate"); //
把参数放到字符串缓冲Put parameter into a string buffer:   //strcpy:Copies one
string to another. //lr_eval_string:Returns the string argument after
evaluating embedded parameters.    strcpy(
aBuffer,lr_eval_string("{pDate}"));    //在调试中显示这个buffer Show the buffer
for debugging:  //lr_output_message:Sends a message to the log file and
Output window   lr_output_message("%s\n",aBuffer);    // get first word
(to the first blank):  //strtok:Returns a token from a string delimited
by specified characters.     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 );           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 执行一个大小写敏感的比较

其他还有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中常用的字符串操作函数有:

strcpy(destination_string, source_string);

strcat(string_that_gets_appended, string_that_is_appended);

atoi(string_to_convert_to_int); //returns the integer value

itoa(integer_to_conver_to_string, destination_string, base); // base is 10

strcmp(string1, string2); // returns 0 if both strings are equal

对各函数的定义:

strcpy( ):拷贝一个字符串到另一个字符串中.

strcat( ):添加一个字符串到另一个字符串的末尾。

strcmp( ):比较两个字符串,如果相等返回0。

atoi():转换一个ASCII字符串为一个整型。

itoa():根据给定的进制,转换一个整型数据为ASCII字符串

下面的例子使用了上面这些函数:

view plaincopy to clipboardprint?
               
 
Actions()  
 
{  
 
        char MyString1[20] = "";  
 
        char MyString2[20] = "";  
 
        char MyString3[20] = "Mercury2";  
 
        char Cstring[10] = "12345";  
 
        int Cint;  
 
   
 
   
 
        // MyString1 is empty   
 
        //  
 
        lr_output_message(">>>>>>>>>> MyString1 = %s",MyString1);  
 
   
 
        // copy "Mercury1" into MyString1  
 
        //  
 
        strcpy(MyString1,"Mercury1");  
 
   
 
        // Now MyString1 contains "Mercury1"  
 
        //  
 
        lr_output_message(">>>>>>>>>> MyString1 = %s",MyString1);  
 
   
 
   
 
        // Copy MyString3 into MyString2  
 
        //  
 
        lr_output_message(">>>>>>>>>> MyString2 = %s",MyString2);  
 
        strcpy(MyString2,MyString3);  
 
        lr_output_message(">>>>>>>>>> MyString2 = %s",MyString2);  
 
   
 
   
 
        // Catenate MyString2 to MyString1  
 
        //  
 
        strcat(MyString1,MyString2);  
 
        lr_output_message(">>>>>>>>>> MyString1 = %s",MyString1);  
 
   
 
        // Cstring is converted to integer Cint  
 
        //  
 
        lr_output_message(">>>>>>>>>> Cstring = %s",Cstring);  
 
        Cint = atoi(Cstring);  
 
        lr_output_message(">>>>>>>>>> Cint = %d",Cint);  
 
   
 
        // Cint is converted to string  
 
        Cint = 100;  
 
        itoa(Cint,Cstring,10);  
 
        lr_output_message(">>>>>>>>>> Cstring = %s",Cstring);  
 
   
 
        return 0;  
 
}

Actions()

{

char MyString1[20] = "";

char MyString2[20] = "";

char MyString3[20] = "Mercury2";

char Cstring[10] = "12345";

int Cint;

// MyString1 is empty

//

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

// copy "Mercury1" into MyString1

//

strcpy(MyString1,"Mercury1");

// Now MyString1 contains "Mercury1"

//

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

// Copy MyString3 into MyString2

//

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

strcpy(MyString2,MyString3);

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

// Catenate MyString2 to MyString1

//

strcat(MyString1,MyString2);

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

// Cstring is converted to integer Cint

//

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

Cint = atoi(Cstring);

lr_output_message(">>>>>>>>>> Cint = %d",Cint);

// Cint is converted to string

Cint = 100;

itoa(Cint,Cstring,10);

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

return 0;

}

//To send an error message to the LoadRunner output window or
Application Management agent log, use the lr_error_message function. It
is not recommended that you send a message to the output window or agent
log in the middle of a transaction, as it will lengthen the execution
time. To send a message to the Vuser execution log or Application
Management Web site, but not to the Output window, use lr_log_message.

Loadrunner脚本编程(4)-数据类型操作和字符串操作的更多相关文章

  1. loadrunner 脚本开发-int型变量和字符串的相互转换

    脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...

  2. java 字符+操作,字符串+操作

    字符额 “+” 操作 是拿字符在计算机底层对应的数值来进行计算的 ‘A’ = 65 A-Z是连续的 'a' = 97 a-z是连续的 '0' = 48 0-9是连续的 算数表达式中包含多个基本数据类型 ...

  3. loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试

    调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...

  4. Loadrunner脚本编程(2)-VuGen脚本文件的开发过程

    http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml 1.定义测试项目的目标,环境,脚本,测试数据,硬件等.脚本应该符合编码规 ...

  5. Loadrunner脚本编程(1)-大体思路

    http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml 就目前的了解.Loadrunner的脚本语言其实和C没什么区别.他内部的 ...

  6. Loadrunner脚本编程(3)- 检查点,关联等函数

    http://www.360doc.com/content/10/0806/13/1698198_44078093.shtml 1.  错误预防和恢复 参数默认是用{}括起来的,但也可以指定用< ...

  7. python基础操作_字符串操作_列表操作list

    #字符串可以通过下表取值,如下程序 names='java python' print(names[0],names[5]) #使用for循环轮询所有name值 ''' for name in nam ...

  8. POJ C++程序设计 编程题#4 字符串操作

    编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给 ...

  9. matlab字符串操作总结

    matlab字符串操作总结 字符串操作总结 char(S1,S2,…)利用给定的字符串或单元数组创建字符数组double(S)将字符串转化成ASC码形式cellstr(S)利用的给定的字符数组创建字符 ...

随机推荐

  1. 事物的隔离级别与并发完美体现了cap理论(确保数据完整、安全、一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

    事物的隔离级别与并发完美体现了cap理论(确保数据完整.安全.一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

  2. 微软Silverlight欲攻占iPhone和Android手机

    微软日前表示,该公司正在努力把Silverlight视频技术引入手机市场.微软Silverlight视频技术被誉为“Flash杀手”,该公司前不久刚发布了Silverlight 2.0版. 尽管说苹果 ...

  3. window与linux文件传输工具

    window与linux文件传输工具 [一般用于SecureCRT ssh中使用] 法一:直接用yum安装lrzsz(推荐) yum install lrzsz -y 注意:rhel安装完系统后 直接 ...

  4. 序列化人人网框架下的DAO?也就是在Spring下序列化DAO的问题(spring+quartz集群下)

    人人网框架地址:http://code.google.com/p/paoding-rose/ 问题发生: 用Quartz作集群时用JobDataMap传递DAO,提示DAO未序列化,可框架的DAO为接 ...

  5. 在windows上搭建C语言开发环境——借助eclipse和MinGW

    0. 前言     [本文目的]     近期在电脑上又一次安装了MinGW,发现MinGW的安装方法和之前的方法稍有差别,全部再写了一篇博文记录一下具体的安装方法.     [本文主要内容]     ...

  6. 使用HTML5画柱状图

    柱状图在很多应用中都比较常见,例如投票结果的统计分析,企业销售数据的统计分析等等.    需求分析:  一个柱状图一般包含以下几部分:  1.标题  2.横坐标(含标题)  3.竖坐标 (含标题.刻度 ...

  7. 【六】注入框架RoboGuice使用:(Singletons And ContextSingletons)

    上一篇我们简单的介绍了一下RoboGuice的使用([五]注入框架RoboGuice使用:(Your First POJO Injection)),今天我们来看下单例以及上下文单例(ContextSi ...

  8. 某浪PHP面试题及答案优化

    前几天一网友去国内某知名IT公司某浪面试PHP,在他谈心得的时候得一面试题,下面写问题答案及优化方案,希望大家多提提意见. “神马,杨辉三角?” 我估计太久不上学了,当年初中数学及大学C语言课上的杨辉 ...

  9. Raphael path 拖动实现

    让 Raphael 的 Path 动起来 Raphaël 是一个很实用的线上矢量图操作 Javascript 库.使用简单,一个值得一提的卖点是通过抽象出共同的接口屏蔽了 SVG 和 VML 之间的差 ...

  10. GoLang中如何使用多参数属性传参

    我们常常因为传入的参数不确定而头疼不已,golang 为我们提供了接入多值参数用于解决这个问题.但是一般我们直接写已知代码即所有的值都知道一个一个塞进去就好了,但是绝大部分我们是得到用户的大量输入想通 ...