Loadrunner 运行场景-场景中的全局变量与关联结果参数

简介: Loadrunner 运行场景-场景中的全局变量与关联结果参数

运行场景-场景中的全局变量与关联结果参数

 


A.  全局变量

实验1

globals.h

 

#ifndef _GLOBALS_H

#define _GLOBALS_H

 

//--------------------------------------------------------------------

// Include Files

#include "lrun.h"

#include "web_api.h"

#include "lrw_custom_body.h"

 

//--------------------------------------------------------------------

// Global Variables

int int_var = 0;

 

#endif // _GLOBALS_H

 

 

Action

Action()

{

 

   lr_rendezvous("lre");

 

   lr_start_transaction("sum");

 

   int_var = int_var + 1;

   lr_save_int(int_var, "value_for_int_var");

   lr_output_message(lr_eval_string("value_for_int_var = {value_for_int_var}"));

 

   if (strcmp(lr_eval_string("{value_for_int_var}"), lr_eval_string("{IterationNumber}")) == 0) {

       lr_end_transaction("sum", LR_PASS);

   }

   else{

       lr_end_transaction("sum", LR_FAIL);

   }

 

   return 0;

}

 

场景中,加载上述脚本,设置6个用户,迭代运行2次,查看日志输出。

结果:每个用户的全局变量的取值日志都一样,先输出"value_for_int_var" =  "1",然后输出"value_for_int_var" =  "2"

 

结论:针对全局变量,针对场景中的每个用户,全局变量的取值互不干扰,相当于说,每个用户都有一个自己的全局变量,变量名称,变量的初始值都一样,每个用户负责更新自己的全局变量的值。

 

实验2

globals.h

 

#ifndef _GLOBALS_H

#define _GLOBALS_H

 

//--------------------------------------------------------------------

// Include Files

#include "lrun.h"

#include "web_api.h"

#include "lrw_custom_body.h"

 

//--------------------------------------------------------------------

// Global Variables

int vuser_id;

 

#endif // _GLOBALS_H

 

Action

 

Action()

{

   lr_rendezvous("lre");

   vuser_id = func();

   lr_output_message("action vuser_id: %d", vuser_id);

   return 0;

}

 

#模拟服务器返回数据

func()

{

   int i = 0;

   int vuserID = atoi(lr_eval_string("{vuserID}"));

   lr_output_message("action vuserID: %d", vuserID);

   //添加以下代码,模拟服务器处理请求

   for(i=0;i<100;i++){

   lr_output_message("测试测试");

   }

 

   return vuserID;

}

 

注:{vuserID},参数化值取的是Paramter List中的VuserID

 

 

Action2

模拟把服务器返回结果当作下一步的输入来使用

 

Action2()

{

 

   int vuserID;

   int result;

   lr_start_transaction("compare");

   vuserID = atoi(lr_eval_string("{vuserID}"));

   result = function(vuser_id, vuserID);

 

   if (result == 1) {

       lr_end_transaction("compare", LR_PASS);

   }

   else{

       lr_end_transaction("compare", LR_FAIL);

   }

   return 0;

}

 

function(vuser_id, vuserID)

{

   lr_output_message("action2 vuserID: %d, vuser_id: %d", vuserID, vuser_id);

   if(vuserID == vuser_id){

       return 1;

   }else{

       return 0;

   }

}

 

把上述脚本加载到场景中,设置10000个用户并发,迭代一次

结果:如下,没有失败的事务

 

结论:场景中,每个并发用户负责自己的数据结果。简单说,假如有一定量(假设10000)的并发用户,发起同一个请求,获取服务返回数据(比如Token),然后在下一个操作中使用该Token值,这种情况下,每个虚拟用户获取的Token值都是来自它发起请求后,服务器返回的Token,即不会把其它用户的Token当做自己的Token在下一个步骤中使用。

 

B.  关联参数

基于A中的实验结果,关联参数的取值也是一样的,所以,并发场景下,也可以通过关联函数web_reg_save_param获取服务器的返回结果,并在下一个步骤中使用

 

目录
相关文章
|
测试技术
loadrunner 场景设计-手工场景方案(Schedule)设计
loadrunner 场景设计-手工场景方案(Schedule)设计
161 0
|
测试技术
loadrunner 运行场景-Controller及Load Generators宿主主机优化
loadrunner 运行场景-Controller及Load Generators宿主主机优化
95 0
|
测试技术
loadrunner 脚本开发-定义全局变量
loadrunner 脚本开发-定义全局变量
236 0
|
网络协议 测试技术
loadrunner 场景设计-学习笔记之性能误区
loadrunner 场景设计-学习笔记之性能误区
85 0
|
测试技术
loadrunner 场景设计-设计与实践
loadrunner 场景设计-设计与实践
143 0
|
网络协议 Oracle 安全
loadrunner 运行场景-常见Graph简介
loadrunner 运行场景-常见Graph简介
126 0
|
测试技术
loadrunner 运行场景-命令行运行场景
loadrunner 运行场景-命令行运行场景
132 0
|
测试技术
loadrunner 运行场景-运行时设置
loadrunner 运行场景-运行时设置
288 0
|
测试技术
loadrunner 运行场景-场景运行原理
loadrunner 运行场景-场景运行原理
125 0
|
测试技术
loadrunner 场景设计-设置结果文件保存路径
loadrunner 场景设计-设置结果文件保存路径
146 0