http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml

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

不过是一种“类C”

所以我从几个方面分析

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

2:LR函数的参数使用与C有点不一样, 在LR中,C的变量和LR的参数是不一样的。
任何C的变量都不能被LR的函数直接调用。
应该用lr_eval_string来取值。

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;
}

http://blog.csdn.net/zeeslo/archive/2007/05/30/1631350.aspx

http://blog.csdn.net/oobibigo/archive/2008/11/17/3321558.aspx

最初我想实现用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脚本编程(1)-大体思路的更多相关文章

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

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

  2. Loadrunner脚本编程(2)-VuGen脚本文件的开发过程

    http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml 1.定义测试项目的目标,环境,脚本,测试数据,硬件等.脚本应该符合编码规 ...

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

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

  4. javascript学习 真正理解DOM脚本编程技术背后的思路和原则

    本文学习来源于<javascriptDOM编程艺术>仅作笔记 学会怎样才能利用DOM脚本编程技术以一种既方便自己更体贴用户的方式去充实和完善你们的网页. 循序渐进:从最核心的内容开始,逐步 ...

  5. LoadRunner脚本编写(转)

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

  6. 关于shell脚本编程的10个最佳实践

    每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...

  7. Vbs 脚本编程简明教程之一

    —为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...

  8. shell脚本编程的10个最佳实践

    摘要:每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.对于那些处在shell脚本编程初级阶段的程序员来说,遵循一些恰当的做法可以帮助你更快.更好的学习这些编程技巧. 每一个在U ...

  9. LoadRunner脚本编写

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

随机推荐

  1. 26复杂类型比较,使用Compare .NET objects组件

    关于比较对象,在"06判等对象是否相等"中大致可以总结为:   关于比较方法: ● 实例方法Equals(object obj)既可以比较值类型,也可以比较引用类型 ● 静态方法E ...

  2. Java实现归并排序(转)

    Java实现归并排序  本文转自https://www.cnblogs.com/of-fanruice/p/7678801.html 归并排序 (merge sort) 是一类与插入排序.交换排序.选 ...

  3. Spring Boot中使用redis的发布/订阅模式

    原文:https://www.cnblogs.com/meetzy/p/7986956.html redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在sprin ...

  4. 利用c#+jquery+echarts生成统计报表(附源代码)

    背景: 因为最近项目要生成报表,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.百度echarts简介请参考 http://echarts.baidu.com/ 虽然echarts功能强 ...

  5. 附 5 springboot之配置文件

    本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss 代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境 ...

  6. go语言基础之复合类型

    1.分类 类型 名称 长度 默认值 说明 pointer 指针 nil array 数组 0 slice 切片 nil 引⽤类型 map 字典 nil 引⽤类型 struct 结构体 2.指针 指针是 ...

  7. LeetCode 84. Largest Rectangle in Histogram 单调栈应用

    LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...

  8. 转: 网卡名字eth0,eth1的修改方法

    转自:http://longwind.blog.51cto.com/419072/982738 我使用这个方法生效: 现象:只有eth2,    vi /etc/udev/rules.d/70-per ...

  9. Linux下面kettle的部署

    一直以来服务器是linux系统,但是感觉linux图形化不强,于是从接触kettle以来都是在windows系统操作ETL的设计和处理.现在需要在linux中查看一下kettle资源库是否连接正常,以 ...

  10. 体绘制(Volume Rendering)概述之3:光线投射算法(Ray Casting)原理和注意要点(强烈推荐呀,讲的很好)

    转自:http://blog.csdn.net/liu_lin_xm/article/details/4850609 摘抄“GPU Programming And Cg Language Primer ...