就目前的了解。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.
|