自动化功能测试,性能测试,测试管理,测试过程改进,测试培训,致力于公司测试工具引用推广。联系MSN: lcyu888@hotmail.com,QQ:914353633

[转]Loadrunner中C脚本设计知识积累

上一篇 / 下一篇  2011-09-13 10:09:30 / 个人分类: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 Settings\Administrator\Local Settings\Temp\noname3\\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;
}
 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar