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

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

 

by:授客 QQ1033553122

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

 

原文地址:https://www.cnblogs.com/shouke/p/10157766.html