loadrunner 如何 获取 迭代次数?

loadrunner 如何 获取 迭代次数?,第1张

给你提供一个思路吧,把你的xml返回的id,拼接成一个字符串,去和预期的字符串进行对比,

预期的字符串也可以定义为一个参数,然后参数设置里面,设置迭代方式为same as url的那个参数,这样你的输入和预期就是一一对应的。不用自己去取iteration的值,设置就可以让两份数据在行数上同步

例如在LR里,我要测100个用户同时并发登陆所用时间,那我是不是在录制好脚本后,需要参数化“用户名”,

“密码”以及在那个记事本里构造100个真实的用户名和密码? 然后运行Controller,

设置用户数为100?那么这里的迭代次数该怎么设啊,设成1和设成10有什么区别啊?

我老是搞不清测试并发用户,“迭代”和“并发用户数”(就是controller里设的虚拟用户数)的区别。

ZEE的回答:

用比喻的方式来回一下:

四车道的马路,如果只有四辆车并排走过就是并发;

              如果四辆车排成一纵队走过就是迭代;

              如果有100辆车排成25行依次走过就是并发加迭代。

在以上说法中,只有并排的车是我们设置的用户数。

通过用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,再运行看看情况。

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

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

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

实际上,在线用户不一定会和其他用户发生并发,例如正在浏览网页的用户,对服务器是没有任何影响的。

但是,用户在线数量是统计并发用户数量的主要依据之一。

并发主要是针对服务器而言,是否并发的关键是看用户 *** 作是否对服务器产生了影响。

因此,并发用户数量的正确理解为:在同一时刻与服务器进行了交互的在线用户数量。

这些用户的最大特征是和服务器产生了交互,这种交互既可以是单向的传输数据,也可以是双向的传送数据。

比如说:有一个这样的场景,系统在线用户是100个,但是同时 *** 作某一个事物(比如说登陆 *** 作)的人是20个那么场景怎么设计了?

在Controller中设置100个虚拟用户执行这个脚本,然后登陆 *** 作之前放一个集合点,然后设置集合点的策略(20个用户到达时即执行集合点)

对于多个业务场景, 只要录制多个脚本放在同一个场景内, 然后分配不同比例的虚拟用户就可以了,

如果不想跑哪个业务场景, 那就不选中这个脚本即可.

追问

并发用户数,我可不可以在采集的时候理解为最大的允许vuser值

回答

某个脚本设置的vuser值, 可以理解为这个业务场景的并发用户数,但如果要测试具体某个业务的并发 *** 作,  那就需要设置集合点,

而且集合点数目不能大于vuser值.

 LoadRunner是怎么重复迭代和怎么增加并发运行的呢?

另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢?就是说这些资源用了一次就不能在用了的。

--参数化时,在select  next row选择unique,update value on选择 each occurence,

1. 迭代跟虚拟用户数没什么必然联系

迭代是这样的:

迭代1次  迭代2次  迭代3次

用户1    X1          X2            X3

用户2    Y1          Y2            Y3

其中的X1-3 Y1-3是参数,参数规则就是二楼说的

这么两个用户是根据你的rump up 上来的,比如5秒上两个用户,那么用户1和2就在5秒之内加载进来的,不知道说清楚了没。

第二个问题就简单了,只能用一次的参数,首先确保你的参数足够,另外规则选择的时候,注意选择唯一

迭代次数只是对你设置了迭代次数的action进行迭代,而用户数可以理解为对整个录制过程的迭代(只是各个用户不同)

    而且增加并发量可以通过增加用户来达到 还可以设置集合点来增加某个 *** 作的并发量

假如一个脚本,设置最大并发量为10,每5秒中增加2个并发用户,而Action设置的迭代为10次:

当开始至2秒时,加载了2个用户,这2个用户分别开始运行,并都运行10次,不管这个2个用户运行10次是否结束,当下一个2两秒到来时,

    即开始至第4秒时又加载了2个用户,这2个又运行10次;就这样一直加载到10个并发用户,然后当每个用户都运行完10次时就结束。

这样中间最大并发是10个,但不一定能达到10个,因为在加载最后几个时,前面的有可能已经运行结束,

    所以如果要真正达到最大并发10就必须设置集合点来完成

不过也不一定非要设置集合点才能实现同时处在running的状态有10个用户。

设置duration也是可以的。不过那就不只每个用户运行10次了。

如果想实现用户迭代10次,并且想同时running为10个用户,就应该设置集合点。

迭代(Iterate)设计,或者我们称之为增量(Incremental)设计的思想和XP提倡的Evolutionary Design有异曲同工之妙。

 1.LoadRunner录制脚本时为什么不d出IE浏览器?

当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题

提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。

2.录制Web脚本时,生成的脚本中存在乱码该如何解决?

录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。

3.HTML-based script与URL-based script的脚本有什么区别?

使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML *** 作生成单独的步骤,这种脚本看上去比较直观使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户 *** 作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。

通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。

4.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?

由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。

进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。

检查执行结果时推荐使用web_reg_find方法。

5.运行时的Pacing设置主要影响什么?

Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。

根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。

6.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?

Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。

7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?

造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的 *** 作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。

解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。

 8.VuGen支持Netscape的客户证书吗?

不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。

9.VuGen会修改录制浏览器中的代理服务器设置吗?

会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。

10.在LoadRunner脚本如何输出当前系统时间?

LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。

调用语句与返回值如下示例:

typedef long time_t

Action()

{

time_t t

lr_message(“Time in seconds since 1/1/70: %ld ”,time(&t))

lr_message(“System time and date: %s”,ctime(&t))

}

输出结果为:

Time in seconds since 1/1/70: 1185329968

System time and date:Wed Jul 25 10:19:28 2007

11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?

这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。

由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,

则用户登录信息将一并清除,因此迭代时可能会发生错误。

12.虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?

如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。

另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。

13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?

这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。

进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。

14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?

在Windows计算机的标准设置下, *** 作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是 *** 作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。

(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:SystemCurrentControlSetControlSession ManagerSubSystems。

(2)找到Windows关键字,Windows关键字如下所示:

%SystemRoot%system32csrss.exe bjectDirectory=Windows

SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1

ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2

ProfileControl=Off MaxRequestThreads=16

SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。

(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。

通过对注册表的更改,系统将允许运行更多的线程,

因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows *** 作系统的限制,而只受硬件和内部可伸缩性限制的约束。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11138678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存