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

 

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. Tools - UML

    ProcessOn - 在线绘图工具 ProcessOn 支持流程图.思维导图.原型图.UML.网络拓扑图等: 主流的UML图列都支持,可以作为方便快捷的UML工具: PlantUML - 多系统多编 ...

  2. 机器学习基石笔记:06 Theory of Generalization

    若H的断点为k,即k个数据点不能被H给shatter,那么k+1个数据点也不能被H给shatter,即k+1也是H的断点. 如果给定的样本数N是大于等于k的,易得mH(N)<2N,且随着N的增大 ...

  3. [EXP]XAMPP 5.6.8 - SQL Injection / Persistent Cross-Site Scripting

    <!-- # Exploit Title: SQL injection (and previous) # Date: -- # Exploit Author: Rafael Pedrero # ...

  4. Python中通过threshold创建mask

    [code] import numpy as np threshold=2 a=np.array([[1,2,3],[3,4,5]]) b=a>threshold print("a=& ...

  5. 离不开的微服务架构,脱不开的RPC细节

    服务化有什么好处? 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示: 服务A:欧洲团队维护,技术背景是Java 服务B:美洲团队维护,用C++实现 ...

  6. Git学习系列之Windows上安装Git详细步骤(图文详解)

    前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...

  7. 从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  8. SQL 必知必会·笔记<5>创建计算字段

    字段(field) 基本上与列(column)的意思相同,经常互换使用,不过数据库列一 般称为列,而术语字段通常与计算字段一起使用. 拼接(concatenate) 将值联结到一起(将一个值附加到另一 ...

  9. Docker导入、导出、删除容器

    1.导出某个容器导出某个容器,非常简单,使用docker export命令,语法:docker export $container_id > 容器快照名导出后在本地可以看到有一个centos.t ...

  10. MVCC浅析

    在并发读写数据库时,读操作可能会不一致的数据(脏读).为了避免这种情况,需要实现数据库的并发访问控制,最简单的方式就是加锁访问.由于,加锁会将读写操作串行化,所以不会出现不一致的状态.但是,读操作会被 ...