就目前的了解。Loadrunner的脚本语言其实和C没什么区别。他内部的好多机制都是C实现的。

不过是一种“类C”

所以我从几个方面分析

1:定义常量变量和C一样

2:在LR中,C的变量和LR的参数是不一样的。
    任何C的变量都不能被LR的函数直接调用。
    应该用lr_eval_string来取值。
    比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。

3:什么循环语句,选择语句都和C一样

4:一些函数的定义和C不一样。虽然名字一样,参数有不同

5: 输入输出也有些不同。

所以重点要突破的地方就是理清参数和变量直接的关系。和多熟悉一LR些函数,其他就是C语言的知识了。

lr它有自己管理的变量,也叫参数,这种参数只能通过reg或者lr_save_方式定义,或者通过文件定义.

1.参数的赋值和取值

lr_save_string("hello world","param");
lr_eval_string("{param}");

2.变量到参数
int x;
x=10;
lr_save_string(x,"param");
lr_eval_string("{param}");

3.变量读参数
char x[100];
x="{param}";
lr_save_string("hello world","param");
lr_eval_string(x);

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

1) 转换成C的整数

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

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

view plaincopy to clipboardprint?
// 1. 转换成C的整数:     
    
i = atoi( lr_eval_string("{pNum_in}") );     
    
// 2. 使用C的函数来运算最后返回一个C的字符串:     
    
sprintf( cBuf, "%d", i+1);      
    
// 3.把返回的字符串保存成参数:     
    
lr_save_string( cBuf, "pNum_out");  
// 1. 转换成C的整数:

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

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

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

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

lr_save_string( cBuf, "pNum_out");

lr_eval_string()

函数的主要作用:返回脚本中的一个参数当前的值,

返回值类型:char

一般多用在调试脚本时输出参数的值.具体用法如下:
lr_output_message("The parameter1's value is %s",lr_eval_string("{parameter1}")),其中参数parameter1在之前已经定义了的参数

lr_log_message(lr_eval_string("{parameter1}"))

在LR中,C的变量和LR的参数是不一样的。
任何C的变量都不能被LR的函数直接调用。
应该用lr_eval_string来取值。
比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。
但是如果如下:

Action()
{
    char a[10];
    strcpy(a,"{NewParam}");
    lr_message(a);
    return 0;
}

这就不对了。
lr_message(a);就会报错。
但是写成lr_message(lr_eval_string(a));就可以。
因为这里的值已经取出来了。

********** 参数和变量传递 ***********/
Variable( )

char* ip =lr_get_vuser_ip();//获取当前用户的IP地址,保存在IP变量里。
char* gname =lr_get_host_name();//获取当前用户的机器名,保存在GNAME变量里。

if(ip)
   //RunTime是已定义的参数,下文也可以直接调用
          lr_vuser_status_message("Ip地址: %s ,参数 : %s",ip,lr_eval_string("{RunTime}"));
else
           lr_vuser_status_message("未启动IP欺骗……");

lr_save_string(gname, "GN" );//把变量IP存在“GN”参数里,下文可以直接用 {GN} 调用。

web_submit_data("StatusReporter",
    "Name=title", "Value={RunTime}",ENDITEM,
   "Name=content", "Value={GN}",ENDITEM,
   LAST);

lr_output_message("当前IP地址: %s ",ip);

lr_think_time(2);//停顿两秒便于观察。

return0;
}

最初我想实现用web_reg_save_param()取到的数保存在数组中,并lr_eval_string()来显示数组中的各个元素。代码如下:
web_reg_save_param("test","LB=","RB=","ORD=All",LAST);
web_url();
count = lr_eval_string("{test_count}");
for (i=1;i<=count,i++)
sprintf(str,lr_eval_string("{test_%d}"),i);
但是每次得到的数据总是
str = test_1 test_2.....都不是数组中的元素。
其实这个问题就是没有搞懂lr中内部参数和外部参数的区别
web_reg_save_param()中取到的数组,是属于lr的内部函数,在其内部函数中再使用变量,即(test_%d,i),是不能直接取到元素的值。这个中间必须要通过变量(外部变量)来传递。
上述代码改为:
web_reg_save_param("test","LB=","RB=","ORD=All",LAST);
web_url();
count =atoi( lr_eval_string("{test_count}"));
for (i=1;i<=count,i++)
{
sprinf(tmp,"{test_%d}",i);
sprintf(str,lr_eval_string(tmp));
}
这样就能实现了。

lr_save_string

The lr_save_string function assigns the specified null-terminated string to a parameter. This function is useful in correlating queries. To determine the value of the parameter, use the lr_eval_string function.

Loadrunner C 编程_1的更多相关文章

  1. Loadrunner脚本编程(4)-数据类型操作和字符串操作

    http://www.360doc.com/content/10/0806/13/1698198_44078277.shtml 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现 ...

  2. linux网络编程_1

    本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...

  3. 三、java面向对象编程_1

    目录 一.对象和类的概念 二.对象和引用 1.对象 2.成员变量 3.引用 三.java类的定义 四.构造函数(构造方法) 五.内存分析 一.对象和类的概念 1.对象 对象用计算机语言对应问题域中事物 ...

  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. php面向对象编程_1

    1, php面向对象编程的三大特征: (1) 封装性,封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法)才能对数据进行操作. (2) 继承 ...

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

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

  8. Python入门基础(9)__面向对象编程_1

    定义一个只包含方法的类 class 类名: def 方法1(self,参数列表): pass def 方法2(self,参数列表): pass 当一个类定义之后,要使用这个类来创键对象.语法如下: 对 ...

  9. LoadRunner编程之跳出迭代

    LoadRunner编程之跳出迭代 51Testing软件测试网3p6pK.Yo LoadRunner中 提供了函数exit(-1)来结束迭代. 使用return 0 来结束本次迭代,进入下一次迭代. ...

随机推荐

  1. Flask教程 —— Web表单(上)

    第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依 ...

  2. 理解HTTP幂等性,分布式事物

    理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式.无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API.为什么 ...

  3. Rewrite MSIL Code on the Fly with the .NET Framework Profiling API

    http://clrprofiler.codeplex.com/ http://blogs.msdn.com/b/davbr/archive/2012/11/19/clrprofiler-4-5-re ...

  4. 每日英语:Is Bo Xilai the Past or Future?

    Bo Xilai may be in jail, but a struggle is now underway within the Communist Party over the policies ...

  5. 每日英语:Cyclists Live Six Years Longer

    Cycling does the body good. New data from Tour de France cyclists finds that those athletes live an ...

  6. java web 中 读取windows图标并显示

    java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils;  import java.awt.Graphics;  import j ...

  7. SharePoint自动化系列——Error features自动deactivate

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ SharePoint Content Deployment prerequisite——Error ...

  8. js 笔记 数组(对象)

    一.javascript push 的元素为指针 var data = {"test":{"201308":"23","20130 ...

  9. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  10. 【C#】图像的变形/变换/扭曲。用Emgu或YLScsFreeTransform(FreeImageTransformation)或MagickImage

    需求:将图像变形,如矩形图片变换成梯形的,图素拉伸. 解决方案:目前找到有两种. 使用EmguCV,它是.Net版的OpenCV.推荐直接在VS里的Nuget中搜索EmguCV进行下载. 使用第三方库 ...