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.

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

  1. char *strtok(char *, char *); // tokenizer prototype
  1. char *strstr(char *, char *); // substring prototype
  1. char *strdup(char *); // String duplication prototype
  1. float atof(); // alpha to return float datatype
  1. #include "as_web.h"
  1. char *strtok(char *, char *); // prototype function call.
  1.  
  1. ActionX()
  1. {
  1.   char aBuffer[256]; // input string to be parsed.
  1.   char *cToken; // individual token from strtok.
  1.   char cSeparator[] = " "; // blank separator.
  1.   int i; // incrementer
  1.   char val[3][20]; // output array of strings.
  1.   char modified_val[20];
  1.     
  1.   // Create a parameter named pDate:
  1.   lr_save_string("January 2, 2001", "pDate");
  1.  
  1.   // Put parameter into a string buffer:
  1.   strcpy( aBuffer,lr_eval_string("{pDate}"));
  1.  
  1.   // Show the buffer for debugging:
  1.   lr_output_message("%s\n",aBuffer);
  1.  
  1.   // get first word (to the first blank):
  1.   cToken = strtok( aBuffer,cSeparator);
  1.   i = 1;
  1.  
  1.   if(!token) { // first token was not found:
  1.           lr_output_message("No tokens found in string!");
  1.           return( -1 );
  1.   } else {
  1.           while( cToken != NULL) { // tokens are not NULL:
  1.                  lr_output_message("Token=%s", cToken);
  1.  
  1.                   // Stuff in another array:
  1.                   strcpy( val[i], cToken );
  1.  
  1.                   // Get next token:
  1.                   cToken =strtok( NULL, cSeparator);
  1.                   i++; // increment
  1.           }
  1.           lr_output_message("Val #1 is: %s", val[1]);
  1.           lr_output_message("Val #2 is: %s", val[2]);
  1.           lr_output_message("Val #2 is: %s", val[3]);
  1.  
  1.           strncpy( modified_val, val[2], 1 );
  1.           modified_val[2] = '\0';
  1.           while (modified_val[2] != NULL) {
  1.                   lr_output_message("===>%s", modified_val);
  1.                   modified_val[2] = strtok(NULL, " ");
  1.           }
  1.   }
  1.   return 0;
  1. }

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脚本编写(6)— 数据类型转换和字符串操作的更多相关文章

  1. LoadRunner脚本编写(5)-- 检查点,关联等函数

    LoadRunner脚本编写(5)-- 检查点,关联等函数 http://www.51testing.com/?34866/action_viewspace_itemid_70224.html来继续翻 ...

  2. LoadRunner脚本编写(转)

    性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...

  3. LoadRunner脚本编写

    性能測试project师要懂代码么?答案是必须的.好多測试员觉得在loadrunner中编写脚本非常难非常牛X ,主要是大多測试人员并未做过开发工作,大学的那点程序基础也忘记的几乎相同了. 还有非计算 ...

  4. LoadRunner脚本编写之二

    LoadRunner脚本编写之二 编程基本语法必须要记牢.程序的思想也很重要. 下面来回顾一下嵌套循环例子. Action() {     int  i,j;   //生命两个变量     for ( ...

  5. LoadRunner脚本编写之三(事务函数)

    LoadRunner脚本编写之三(事务函数) 关于脚本的这块,前两篇都在讲C语言,其实,要整理点实用的东西挺难,在应用中多对录制的脚本分析,但对于新手学脚本确实无从下手. 先贴一个脚本: 完整代码: ...

  6. LoadRunner脚本编写之一

    LoadRunner脚本编写之一 性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不 ...

  7. 初识 Javascript.02 -- Date日期、Math对象、数据类型转换、字符串、布尔Boolean、逻辑运算符、if else 、三元表达式、代码调试方法、

    Date()对象: Date对象用于处理日期和时间. 1.1 Math对象  ◆Math.ceil()   天花板函数    向上取整  只取整数,不足则进1 ◆Math.floor()  地板函数 ...

  8. loadrunner脚本编写经验

    最近写了不少loadrunner脚本,记录一下心得:1 loadrunner脚本基本可以认为就是c语言代码(loadrunner支持不同语言的脚本,默认生成的是用c语言写的脚本)2 loadrunne ...

  9. LoadRunner脚本关联动态数据的最简单方法

    为什么要关联动态数据呢?举个例子,在对我们平台的工作流性能测试时, 在待办任务里面选择一条记录执行发送操作,LoadRunner VuGen会详细记录下来流程发送操作的细节,但在回放脚本的时候会有问题 ...

随机推荐

  1. fasttext的基本使用 java 、python为例子

    fasttext的基本使用 java .python为例子 今天早上在地铁上看到知乎上看到有人使用fasttext进行文本分类,到公司试了下情况在GitHub上找了下,最开始是c++版本的实现,不过有 ...

  2. CocoaPods更新2018年11月06日16:06:48

    https://gems.ruby-china.org点进去就知道了…… CocoaPods命令 更新 sudo gem install -n /usr/local/bin cocoapods --p ...

  3. 修改linux默认语言

    linux修改默认语言   编辑/etc/sysconfig/i18n这个文件(不存在就新建一个),原内容如下: LANG="en_US.UTF-8" SYSFONT=" ...

  4. PAT_A1094#The Largest Generation

    Source: PAT A1094 The Largest Generation (25 分) Description: A family hierarchy is usually presented ...

  5. 20140415 HOG 不同继承方式的访问特性 虚函数工作原理

    1.HOG block重叠的好处 由于行人通常其形状可以视为柔体,人 的边缘位置不固定,而有一些移动,block 重叠后,一个边缘的梯度信息在两个相邻重叠的 block 中都能有所表达,这样即使边缘的 ...

  6. Codeforces Round #525 E - Ehab and a component choosing problem

    题目大意: 在一棵树中 选出k个联通块 使得 这k个联通块的点权总和 / k 最大 并且这k个联通块不相互覆盖(即一个点只能属于一个联通块) 如果有多种方案,找到k最大的那种 给定n 有n个点 给定n ...

  7. BBS论坛 自定义form组件

    二.自定义form组件 from django import forms from django.forms import widgets from app01 import models # 定制f ...

  8. java四种引用与回调函数

    JAVA四种引用 java对象的引用包括: 强引用 软引用 弱引用 虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进 ...

  9. 【笔记篇】(理论向)快速傅里叶变换(FFT)学习笔记w

    现在真是一碰电脑就很颓废啊... 于是早晨把电脑锁上然后在旁边啃了一节课多的算导, 把FFT的基本原理整明白了.. 但是我并不觉得自己能讲明白... Fast Fourier Transformati ...

  10. linux 服务器安装mysql5.6

    1.移除CentOS默认的mysql-libs: whereis mysql 2.为了避免冲突,先移除CenttOS上默认的mysql-libs: yum remove mysql-libs 3.然后 ...