zoukankan      html  css  js  c++  java
  • Loadrunner脚本编程(4)-数据类型操作和字符串操作

    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 ",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] = '';           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.

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/zhengah/p/4272115.html
Copyright © 2011-2022 走看看