前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Loadrunner 运行场景-场景中的全局变量与关联结果参数

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

作者头像
授客
发布2019-09-11 14:37:20
7400
发布2019-09-11 14:37:20
举报
文章被收录于专栏:授客的专栏授客的专栏

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获取服务器的返回结果,并在下一个步骤中使用

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档