zoukankan      html  css  js  c++  java
  • 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获取服务器的返回结果,并在下一个步骤中使用

     

  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/shouke/p/10157766.html
Copyright © 2011-2022 走看看