微笑着面对每天,善待自己……

LOADRUNNER 函数

上一篇 / 下一篇  2009-06-17 17:55:39 / 个人分类:技术

一,数据类型转换

没有使用过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 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];      
    // 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 );         
               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等字符串操作的函数。

 

 

 

 

 

 

 

对各函数的定义:


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

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


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

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


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

 

 

 

 

 

 

 

 


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;

}

 

 

 

 


char *str1,*str2;
str1="desired text";
// Register the left and right beacons sought:
web_reg_save_param("param","LB/ic=xxx","RB=xxx");
// Do the monitored deed:
web_url("some url","URL=www.xxx.com",LAST);
// Compare:
str2=lr_eval_string("{param}");
if(strcmp(str1,str2)==0) {
lr_output_message("param found");

}else{

lr_output_message("Value found is %s",str2);

}

 


 


TAG:

 

评分:0

我来说两句

evergreen_wang

evergreen_wang

测试因仔

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 29176
  • 日志数: 52
  • 文件数: 6
  • 建立时间: 2009-06-17
  • 更新时间: 2011-05-31

RSS订阅

Open Toolbar