LoadRunner中%d和%s是什么意思

%d 格式化输出短整形数据,TC环境中占用两个字节,输出整数范围为:32768~32767.Visual C++环境中占用四个字节,输出数据范围为:-2147483648~2147483647

%u 格式化输出无符号短整形

%ld 格式化输出长整形,一般占四个字节

%c 输出字符型数据(单个字符),也可输出整型数据,范围为1~127

%s 输出字符串

Attributes:  
> HTTP_INFO_RETURN_CODE: 返回HTTP头文件的code值,如;200、404等; 200是服务器成功返回网页;404请求网页不存在;503服务器超时;500(服务器内部错误)服务器遇到错误,无法完成请求。

> HTTP_INFO_DOWNLOAD_SIZE: 返回最近一次下载的大小,单位是bytes;   1MB=1024KB,1KB=1024字节;所以1MB=1048576字节。

> HTTP_INFO_DOWNLOAD_SIZE: 返回最近一次下载的时间,单位是millisecond(毫秒).  1毫秒(ms)=0.001秒(s)

lr_output_message("页面下载时间");//输出提示信息

lr_output_message("%d", web_get_int_property(HTTP_INFO_DOWNLOAD_TIME));//输出页面下载时间

lr_output_message("%d", web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE));//输出下载的大小

EXTRARES分隔符后面的代码在没有100%的把握情况下,最好不要去掉。

关于这一点,结论是EXTRARES部分不能删,删除了LR就不会去下载相关资源了,也就意味着一个请求的Response会变小,毫无疑问,响应时间就会变得快一些,吞吐量变得少一些,数据变得非常的不真实。

关于LoadRunner的迭代并发

比如,一个用户迭代十次,还是一个用户的压力。

10个用户执行一次,就是10个用户的压力。10个用户迭代10次,还是10个用户的压力。但他们都和参数化的数据有关系(也要看参数化是如何设置的,以及系统如何判断提交值的)。

说一个比较容易理解的层面:迭代就是不停的反复调用同一脚本,反复执行,注意,对1个用户执行10次来说,只会分配一块内存。10个用户执行一次,是调用同一脚本10次,会分配10块内存。LR调用脚本,编译后,运行,按脚本发送数据。

用比喻的方式来回一下:

四车道的马路,如果只有四辆车并排走过就是并发;
                 如果四辆车排成一纵队走过就是迭代;
                 如果有100辆车排成25行依次走过就是并发加迭代。
在以上说法中,只有并排的车是我们设置的用户数。

关于LoadRunner的迭代持续时间

Controller运行中,迭代和持续时间是互斥的。

持续时间的优先级高

也就是说:即使你指定了迭代次数,但是运行时间没有结束之前,还是会一直迭代的。所以实际迭代次数可能大于你设置的迭代次数;

还有一种情况,迭代次数还没完,但是运行时间已经到了,此时会将当前执行的Action执行完,停止迭代,此种情况下实际迭代次数小于你设置的迭代次数。

迭代的意义

以下内容是转载的,只做记录一下:

 
问题1:通过用lr做负载压力测试过程发现,如果设定不同的action迭代次数,每次得出的结果是不同的,曲线的表现形式也是不同的。这点就使我们会感觉困惑,为什么要设置action的迭代次数?以及对于不同的应用系统应该怎样设置迭代次数呢?
 
:首先你要理解性能测试是在干什么?
 
性能测试是模拟系统一段时间内真实的压力情况,以考察系统的性能。
 
再看怎么模拟系统真实的压力情况?比如在半个小时内,用户都在进行登录操作,且平均分布在这半个小时内。我们要做的是什么?模拟这半个小时用户的行为。怎么模拟?估算出同时操作的人数,并用LoadRunner不断的发送登录请求,这就是我们为什么要迭代。
 
至于迭代次数,只要能够模拟出真实情况,多少次都无所谓,不过10次8次估计是模拟不出来。迭代次数至少要保证压力达到一个稳定值后再运行一段时间,这样我们得到的数据才是有效的。所以我们除非是特别要求,一般不用迭代次数,而是用运行时间。
 
1,迭代和并发,是完全不同的概念。没有什么关系。
 
比如,一个用户迭代十次,还是一个用户的压力。
 
10个用户执行一次,就是10个用户的压力。10个用户迭代10次,还是10个用户的压力。但他们都和参数化的数据有关系(也要看参数化是如何设置的,以及系统如何判断提交值的)。
 
2,你要是想知道,LR是如何实现迭代和并发:
 
说一个比较容易理解的层面:迭代就是不停的反复调用同一脚本,反复执行,注意,对1个用户执行10次来说,只会分配一块内存。10个用户执行一次,是调用同一脚本10次,会分配10块内存。LR调用脚本,编译后,运行,按脚本发送数据。
 
比如:web_url这样的函数,执行就会发HTTP request。
 
如果你还想知道更细节的进程和函数的实现,只能侧面验证(具体方法看各人的能力和擅长),因为我们都不是LR的开发者。
 
3,太显然的问题了,参数化时选择每次出现唯一,只要参数够用就OK,不够用,就设置相应的规则。
 
action在场景运行中iteration只对其起作用,对vuser_init和vuser_end都不起作用,action是一个可以被重复使用的最小单位其实你可以将所有脚本录制到一个action里,只是不方便管理罢了。
 
举个最简单的例子,像lr自带的例子——订票系统,你如果把所有脚本都录制到一个action里,那回放的时候,每个用户登录就只能买一张票,而如果想一个用户买多张票的话,这样就行不通了。那你就要设多个action,并把登录和结束各录制在一个action里,把买票录到一个action中,这样,将买票的action迭代多次,而用户登录和结束只运行一次,这不就模拟了现实中的情况了吗?
 
其实LoadRunner 是以客户端的角度来定义“响应时间”的,当客户端请求发出去后, LoadRunner 就开始计算响应时间,一直到它收到服务器端的响应。这个时候问题就产生了:如果此时的服务器端的排队队列已满,服务器资源正处于忙碌的状态,那么该请求会驻留在服务器的线程中,换句话说,这个新产生的请求并不会对服务器端产生真正的负载,但很遗憾的是,该请求的计时器已经启动了,因此我们很容易就可以预见到,这个请求的响应时间会变得很长,甚至可能长到使得该请求由于超时而失败。等到测试结束后,我们查看一下结果,就会发现这样一个很不幸的现象:事务平均响应时间很长,最小响应时间与最大响应时间的差距很大而这个时候的平均响应时间,其实也就失去了它应有的意义。也就是说,由于客户端发送的请求太快而导致影响了实际的测量结果,设置步长则可以缓解这一情况,这样,应该试试设置pacing,再运行看看情况。

4、并发用户数量,有两种常见的错误观点。

一种错误观点是把并发用户数量理解为使用系统的全部用户的数量,理由是这些用户可能同时使用系统;

还有一种比较接近正确的观点是把用户在线数量理解为并发用户数量。

实际上,在线用户不一定会和其他用户发生并发,例如正在浏览网页的用户,对服务器是没有任何影响的。但是,用户在线数量是统计并发用户数量的主要依据之一。并发主要是针对服务器而言,是否并发的关键是看用户操作是否对服务器产生了影响。 因此,并发用户数量的正确理解为:在同一时刻与服务器进行了交互的在线用户数量。这些用户的最大特征是和服务器产生了交互,这种交互既可以是单向的传输数据,也可以是双向的传送数据。 比如说:有一个这样的场景,系统在线用户是100个,但是同时操作某一个事物(比如说登陆操作)的人是20个那么场景怎么设计了?在Controller中设置100个虚拟用户执行这个脚本,然后登陆操作之前放一个集合点,然后设置集合点的策略(20个用户到达时即执行集合点) 对于多个业务场景, 只要录制多个脚本放在同一个场景内, 然后分配不同比例的虚拟用户就可以了, 如果不想跑哪个业务场景, 那就不选中这个脚本即可.

追问
  
并发用户数,我可不可以在采集的时候理解为最大的允许vuser值
 
回答
  
某个脚本设置的vuser值, 可以理解为这个业务场景的并发用户数,但如果要测试具体某个业务的并发操作,  那就需要设置集合点, 而且集合点数目不能大于vuser值.
 
 

LoadRunner11学习记录三 -- 迭代和并发的更多相关文章

  1. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  2. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  3. leveldb 学习记录(三) MemTable 与 Immutable Memtable

    前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍 ...

  4. 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习

    章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...

  5. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  6. LoadRunner11学习记录四 -- 集合点

    LoadRunner集合点的设置: 我们来想象一个场景,10名运动员参加长跑比赛,出发点同时起跑,他们是并排奔跑的:跑了N圈之后,因为有体能更强的,有体能稍弱的,他们的队形并排变成了前后.几乎一个跑道 ...

  7. 下页小希学MVC5+EF6.2 学习记录三

      目的:1 学习mvc+ef 2  写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...

  8. ES6深入学习记录(三)编程风格

    今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 v ...

  9. 定时任务调度工作(学习记录 三)timer其他重要函数

    TimerTask的两个重要函数: 1.cancel() 作用: 取消当前TimerTask里的任务 演示: 先在继承了TimerTask的类中添加一个计时器,然后在run方法中合适的位置添加canc ...

随机推荐

  1. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

  2. 试玩swoole扩展 第一天

    安装 pecl install swoole 部分过程: configure: creating ./config.statusconfig.status: creating config.hrunn ...

  3. Qt学习笔记(1) hello world

    Qt的简介: Qt是一个跨平台的C++ GUI库实现,原本只是以为它只提供一些图形接口,看来我还是低估了它,采用文档Qt学习之路2开始学习,不知道这个文档是不是有点老了,管他呢,先了解下. 搭建环境: ...

  4. C++代码规范之命名

    C++代码规范之命名 一.命名的两个基本原则 1.含义清晰,不易混淆: 2.不和其它模块.系统API的命名空间相冲突. 二.命名通则 1.在所有命名中,都应使用标准的英文单词或缩写:不得使用拼音或拼音 ...

  5. java代码------实现从控制台输入整型,

    总结:主要是方法的调用不能错,比如浮点型,整型,字节型,so.on int ====hasNextInt() float--------hasNextfloat() short ====hasNext ...

  6. 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)

    题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1      详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...

  7. OpenStack--Cinder(G版)中的volume type

    一.volume type的相关操作 Cinder中的卷类型,是卷的一种标识,各个OpenStack的发行者可根据自身对系统的约束来定义卷类型的使用.G版的Cinder中与卷类型相关的两种资源:typ ...

  8. [ Python ] Flask 基于 Web开发 大型程序的结构实例解析

    作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...

  9. 一些常用的centos命令,记忆下,属于常用的

    一些常用的centos命令,记忆下,属于常用的 查询内网IP hostname -I 查询外网IP curl ifconfig.me 查看硬盘使用情况 df -h 查看系统资源使用率 top 查看系统 ...

  10. angularjs之ng-option

    ng-options一般有以下用法: 对于数组: label for value in array select as label for value in array label group by  ...