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

     

  • 相关阅读:
    Qt QString判断是否是数字
    Qt 判断QString中的字符串是否为纯数字
    Qt delete和deletelater的区别
    Qt QTcpSocket waitForReadyRead()等函数用法——客户端开关读写应用笔记
    Notepad++对比两个文件不同的方法
    Qt error C1071 :在注释中遇到意外的文件结束
    Qt error C2601: “...”: 本地函数定义是非法的
    Qt 错误 C1071 在注释中遇到意外的文件结束 的解决办法
    Qt 串口和线程的简单结合(通过子线程操作串口、movetothread)
    Qt 实现多线程的串口通信
  • 原文地址:https://www.cnblogs.com/shouke/p/10157766.html
Copyright © 2011-2022 走看看