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

 

by:授客 QQ:1033553122

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 运行场景-场景中的全局变量与关联结果参数的更多相关文章

  1. loadrunner运行时设置中清空缓存方法

    用函数web_cache_clearup()或run-time settings---browser emulation 把clear  cache on each iteration打勾 W v\] ...

  2. LoadRunner运行中的mmdrv和mdrv

    在LoadRunner运行脚本过程中,在任务管理器中我们可以看到有一个或多个名为“mmdrv”的进程在运行,与此同时当我们查看LoadRunner\bin目录下的文件时还会看到一个“mdrv.exe” ...

  3. Loadrunner脚本回放 场景运行过程中常见错误分析

    问题一:Loadrunner超时错误问题描述 Loadrunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 问题现象Error -27728: ...

  4. loadrunner 运行场景-命令行运行场景

    运行场景-命令行运行场景 by:授客 QQ:1033553122 1 相对路径与绝对路径 在场景中为脚本指定一个相对位置,可以是相对于当前场景目录或lr安装目录. 当你运行一个场景,场景自动从这个相对 ...

  5. loadrunner 运行场景-场景运行原理

    运行场景-场景运行原理 by:授客 QQ:1033553122 运行原理 1 Remote Agent Dispatcher(Process) 运行Controller在负载机上开启应用程序. 2  ...

  6. LoadRunner在Controller场景中配置获取Windows Resources

    一.首先需要在被监控Windows服务器端(只支持Windows)进行如下设置: 启动服务: Remote Procedure Call (RPC) RemoteRegistry 操作方法: 按Win ...

  7. LoadRunner 压测场景制定以及报告分析

    这里,我们利用 LoadRunner 来制定场景,且以测试 tps 值为导向,主要介绍手工场景 单服务器的业务请求处理能力 tps 值在 10~200 是合理的:如果是访问单接口不走关系型数据库的,访 ...

  8. SpriteKit:在场景过渡中暂停动画

    Pausing Scenes During a Transition 你应该意识到两个重要的SKTrnsition属性在场景之间的过渡中. 它们是pausesIncomingScene和pausesO ...

  9. OpenCV_contrib里的Text(自然场景图像中的文本检测与识别)

    平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake 待解决!!!Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景 ...

随机推荐

  1. Eclipse 工作空间的相关说明

    工作空间文件说明 当eclipse选定一个文件夹作为workspace工作空间时,就会在该目录中生成一些文件. 共三个文件夹:.metadata ..recommenders .RemoteSyste ...

  2. Spring Boot 配置随机数技巧

    Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位MD5字符串 user.random.secret=${r ...

  3. Python Web Service

    搞移动端有段时间了,一直使用别人的API,自己也只写过ASP.NET网站作为网络服务,相对来讲是很大的短板.虽然ASP.NET可以提供想要的web服务,但是其体量臃肿,响应速度非常慢,这点我非常不喜欢 ...

  4. Docker学习之4——构建NGINX镜像

    Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建ng ...

  5. 在线画UML图的工具

    工作需要在线画各种UML图,类图.协作图.用例图等等,调查了一些在线画UML图的工具,有的做的很好但要收费,例如:http://www.gliffy.com/,发现现在免费好用的是ProcessOn: ...

  6. 一款jq的计时器

    举例子: http://files.cnblogs.com/Alandre/201201031633347950.rar

  7. Eureka单机高可用伪集群配置

    Eureka Server高可用集群理论上来讲,因为服务消费者本地缓存了服务提供者的地址,即使Eureka Server宕机,也不会影响服务之间的调用,但是一旦新服务上线,已经缓存在本地的服务提供者不 ...

  8. zmq setsockopt()

    zmq.RCVTIMEO:在一个recv操作返回EAGAIN错误前的最大时间 设置socket的接收操作超时时间.如果属性值是0,zmq_recv(3)函数将会立刻返回,如果没有接收到任何消息,将会返 ...

  9. vue-05-webpack安装-vue单文件启动

    1, webpack是什么 1), 是一个打包工具, 比gulp, grunt更先进 2), 额外功能 项目部署上线, 清空目录等 hot module reload, 页面刷新后, 数据不变化 3) ...

  10. An Exploration of ARM TrustZone Technology

    墙外通道:https://genode.org/documentation/articles/trustzone ARM TrustZone technology has been around fo ...