zoukankan      html  css  js  c++  java
  • LoadRunner脚本编写(6)— 数据类型转换和字符串操作

    LoadRunner脚本编写(6)— 数据类型转换和字符串操作

     

    一,数据类型转换

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

    LoadRunneras_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
    ",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] = '';
              while (modified_val[2] != NULL) {
                      lr_output_message("===>%s", modified_val);
                      modified_val[2] = strtok(NULL, " ");
              }
      }
      return 0;
    }

    strcat连接两个字符串

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

    strcmp比较两个字符

    strcpy复制字符串到另一个

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

    其他还有strdupstrncatstrncpystrnicmpstrrchrstrsetstrspnstrstr等字符串操作的函数。

    zibeike注:关于更多字符串操作的脚本编写,可以参考我的另一篇文章:

    http://www.51testing.com/?34866/action_viewspace_itemid_75428.html

    zibeike翻译自:http://www.wilsonmar.com/1lrscrīpt.htm

  • 相关阅读:
    ORACLE B-TREE(B树)索引
    安装CentOS 6.4 64 位操作系统
    环境搭建(一)——linux 安装tomcat
    Linux基础
    sql必知必会
    Mysql基础
    shell编程基础
    Allpairs 正交分析工具的使用(测试用例设计)
    Sublime Text3配置SublimeREPL快捷键的方法(Python)
    XSS攻击及预防
  • 原文地址:https://www.cnblogs.com/abcd19880817/p/7201450.html
Copyright © 2011-2022 走看看