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

 

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

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. Android Fragment用法知识点的讲解

    Android Fragment用法的讲解 碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示.Fragment的出现,如微信的额主界面包含多个Fragment,使得微信功能更加简洁明了 ...

  2. MySQL学习笔记2(多表操作)

    外键:使两张表之间存在关联 特点: 1.从表外键的值是对主表主键的引用 2.从表外键类型,必须与主表主键类型一致 示例: 创建两个表并准备数据: USE mybase; CREATE TABLE ca ...

  3. Liferay7 BPM门户开发之24: Liferay7应用程序安全

    整理中...... Resources, Roles, and PermissionsPortal Access Control List (PACL) Custom SSO Providers Au ...

  4. getResourceAsStream的3种路径配置

    getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’ ...

  5. 图形数据库Neo4j基本了解

    在深入学习图形数据库之前,首先理解属性图的基本概念.一个属性图是由顶点(Vertex),边(Edge),标签(Lable),关系类型和属性(Property)组成的有向图.顶点也称作节点(Node), ...

  6. Kafka项目实战-用户日志上报实时统计之编码实践

    1.概述 本课程的视频教程地址:<Kafka实战项目之编码实践>  该课程我以用户实时上报日志案例为基础,带着大家去完成各个KPI的编码工作,实现生产模块.消费模块,数据持久化,以及应用调 ...

  7. paperpass

    推荐大家一个靠谱的论文检测平台.重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了.怕麻烦的话,还能用它自带的降重功能.哦对了,他们现在正在做毕业季活动, 赠送很多免 ...

  8. lucene-solr源码编译导入eclipse--转

    https://www.jianshu.com/p/8a217ce05475 github地址:https://github.com/apache/lucene-solr 第一步:git clone ...

  9. PHP连接Memcache代码

    <?php $mem = new Memcache; $mem->connect('127.0.0.1', 11211) or die ("Could not connect&q ...

  10. WebService与RMI(远程调用方式实现系统间通信)

    前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...