前边已经发了不少关于Loadrunner中脚本编写的文章,现在发一个帖子,作为Loadrunner中C脚本编写一些该注意问题的帖子,作为对脚本编写知识的进一步巩固。
1.全局变量和局部变量
vuser_init() {
//Allocates a block of memory. char * p = (char * )malloc(1000 * sizeof(char)); return 0; }
------------------------------------------
Action() { return 0; }
------------------------------------------
vuser_end() {
//Frees a block of memory.
free(p); return 0; } |
如上脚本所示:
最初的思路是在 vuser_init中定义指针p,并为其malloc函数申请1000个字节的内存空间,为了避免内存泄露,用户试图在vuser_end中释放p指向的内存空间,但free(p),由于变量p是在vuser_init中定义的,其作用域仅局限于vuser_init,离开了vuser_init,在vuser_end编译是会报错“p变量未被定义”。
这样我们的问题就产生了,那如何在vuser_init()、Action()、vuser_end()中使用全局变量呢?
这里我们就要用到全局变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。
在Loadrunner的HTTP协议录制的web系统时,会生成一个globals.h文件,在这里定义的变量相当于;Loadrunner脚本的全局变量,可以在vuser_init()、Action()、vuser_end()中被使用。
在globals.h文件中,添加全局变量的方法如下:
#ifndef _GLOBALS_H #define _GLOBALS_H
//-------------------------------------------------------------------- // Include Files #include "lrun.h" #include "web_api.h" #include "lrw_custom_body.h"
//-------------------------------------------------------------------- // Global Variables 包含全局变量
char * p;
#endif // _GLOBALS_H |
注意:红色部分为添加的全局变量的位置;
然后,执行脚本,脚本就可以通过了,呵呵!
2.lr_whoami() 使用的一点说明;
说明:lr_whoami()在VU中运行返回的值是:-1
举例:
Action() { int id, scid; char *vuser_group;
lr_whoami(&id, &vuser_group, &scid); lr_message( "Group: %s, vuser id: %d, scenario id %d",
vuser_group, id, scid);
return 0; } |
执行脚本结果如下:
Virtual User Script started Starting action vuser_init. Web Turbo Replay of LoadRunner 9.0.0 for WINXP; WebReplay82 build 5727 [MsgId: MMSG-27143] Run-Time Settings file: "C:Documents and SettingsAdministratorLocal SettingsTempnoname3\default.cfg" [MsgId: MMSG-27141] Ending action vuser_init. Running Vuser... Starting iteration 1. Starting action Action. Group: None, vuser id: -1, scenario id 0 Ending action Action. Ending iteration 1. Ending Vuser... Starting action vuser_end. Ending action vuser_end. Vuser Terminated.
这里需要说明的是:lr_whoami()在VU中运行返回的值是:-1(见结果绿色部分显示),只有在conctroller中多用户并发的时候才会输出正确的值。
3.多个action()逻辑排序。
比如说,我们的一个脚本中有多个action,我们想改变执行顺序,我们可以这样来操作。
在VU菜单栏,Vuser - Run-Time Settings...- Run Logic中,通过 move up 、move down 改变action()执行的顺序。
4.Loadrunner中检查点判断执行那些操作;
web_reg_find("Text=ABC", "SaveCount=abc_count", LAST);
web_url("Step", "URL=...", LAST);
if (strcmp(lr_eval_string("{abc_count}"), "0") == 0)
Action A
else
Action B |
5.利用数组做冒泡排序法例子
Action() { int a[]={1,2,3,4,5}; int i; int j; int temp;
for (i=0;i<5;i++) for (j=i+1;j<5;j++) if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } for (i=0;i<5;i++) { lr_message("%d",a[i]); } return 0; } |
|