loadrunner 关于并发的问题 web_concurrent_start 和 lr_rendezvous

loadrunner 关于并发的问题 web_concurrent_start 和 lr_rendezvous,第1张

从概念上说
前者(web_concurrent_start)是语句的并发 后者(lr_rendezvous)是user的并发
这是两件完全完全不同的事情 没有什么可以比较的 仅仅只是都有“同时执行”的意思而已
详细来说
URL-based 方式 默认是将每个请求录制成一条语句 而一条语句只建立一个到服务器的连接
比方说 一个page上面 有 有文本 有音视频 有编辑框 有按钮 有链接 有复选框 等等等等……
那么请求 请求文本 请求音视频…… 就上面所有那些 都各自分别是一条语句
如果不写web_concurrent_start和web_concurrent_end函数 就默认按语句的顺序执行请求
而写了web_concurrent_start和web_concurrent_end函数之后 就会将这些请求同时发送
容易想象的是 并发请求时的压力 会比顺序请求的时候 要大
集合点 或者也有叫同步点的 它的概念比较容易理解 就不解释了
下面针对你的问题:
“1用户下,使用web_concurrent_start(end)一次性提交20请求;
和20用户下,通过rendezvous来集合后,每用户提交1个请求;
这两种场景应该是一样的,因为都是一次向服务器同时提交了10个请求。”
这是不准确的 原因至少有两点:
第一 单用户多请求的并发性 要强于多用户的集合点
这是因为 集合点是多线程的并发 它的并发性是有限的 宏观上是并发 微观上不可能并发
因为如果你的电脑是单CPU的 那么你就不可能获得严格意义上的并发执行
按照 *** 作系统中 进程和线程的关系 在某一个时间点 严格上讲 就只有一个人得到执行
除非你给每个用户配备一个CPU 才能达到真正的并发 但显然这是不可能的
第二 你的每个请求的开销并不一定是相同的 这也导致测试结果的不可控
最简单的 请求一段文字 与请求一段音视频 产生的系统开销肯定是不一样的
你使用的web_custom_request函数 并不是发送完了就完了 而是返回完毕才算完成
返回一段几KB的文字 与返回一段几MB的音视频 对网络的压力肯定是不一样的
当然还可以有其他的理解 你可以自己继续分析
而且可以预见的是 你这种测试 每一次都有可能获得不同的结果
我指的是你请求的东西不一样的情况下 比如你换一个站点进行测试 结果就有可能是相反的
原因就是我上面说的第二点

关于并发用户数的问题,一直很困惑着我对性能测试方面的理解。
1、在LR中,“并发用户数量”是怎么设置?
我个人的理解是在LR的controller中设置,如附件,这样理解对吗?
2、LR中也一直提及到“虚拟用户”,那到底“虚拟用户”和“并发用户”在LR的场景中是怎么设置的?
两者是同一概念吗?
3、一般怎么计算并发用户数?根据什么计算?
首先LR上设置的虚拟用户指的是在系统中运行的用户数,如果你在脚本中设置了集合点,那么脚本运行到那个点上时,就开始做你提的那个并发 *** 作了
比如说:我们有一个这样的场景,我系统在线用户是150个,但是同时 *** 作某一个事物(比如说登陆 *** 作)的人是20个
那么场景怎么设计了?在Controller中设置150个虚拟用户执行这个脚本,然后登陆 *** 作之前放一个集合点,然后设置集合点的策略(20个用户到达时即执行集合点)
并发用户实际从应用角度来分析可以分为如下几种
注册用户
在线用户
并发用户
并发用户:是同时执行一个 *** 作的用户,或者是同时执行脚本的用户,这个并发在设置不同场景的时候并发的情况是不一样的,在实际的测试中需要根据具体的需求进行设计;
集合点:如果脚本中设置集合点,可以达到绝对的并发,但是集合点并不是并发用户的代名词,设置集合点和不设置集合点,需要看你站在什么角度上来看待并发,使整个服务器,还是提供服务的一个事务;
虚拟用户,就是LR通过某种仿真机制虚拟出来的用来仿真用户行为的用户,一般以线程或者进程来实现用户的仿真!

一、

1、在性能测试工具:loadrunner和jmeter都有集合点的设置,locust当然也有集合点的设置
2、什么是集合点:

比如想完全并发1000个用户提交订单的 *** 作,如果不设置集合点的情况下,前面500个用户可能先登录成功后就去提交订单了,而后面的500个用户还在登录中,这样就没法完全达到1000个用户同时去提交订单

设置集合点后,前面500个登录完成后不进行提交订单 *** 作,直接等待到1000个用户都登录成功后,1000个人同时去提交订单 *** 作

运行设置20个用户并发

查看输出日志:

可看出20个用户全部都登录完成后才开始执行任务

另:在一般性能测试中需不需要设置集合点呢:

如果是对一些业务场景进行压力测试、稳定性测试时,可以不必设置集合点。如果想验证单独某一个接口对大并发的处理能力时,设置集合点就很有必要了。

1、性能测试时候的并发是指:一批用户同时执行一个 *** 作,并发是来对服务器产生压力的。你可以通过设置集合点来进行并发用户数的控制。
2、参数的问题你可以自己设置的。
3、用户有没有变化是按照你参数怎么设置来跑的。

集合点是什么意思、
集合点用以同步虚拟用户,以便恰好在同一时刻执行任务。在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据 *** 作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。

你所说的参数化后,仍只有一个用户在处理,可能有几种情况
1、如果登陆脚本放在Int中,你在vugen中运行,不论是循环多少次,都只会一个用户在处理
解决方法:将登陆脚本话在Action中,在vugen中运行,循环多次,就可以实现多用户登陆
2、如果登陆脚本放在Int中,脚本在controller中运行(虚拟用户多个),仍只有一个用户登陆,那就是你参数更新方式不对,
解决方法:改变你参数化的更新方式;改成随机或唯一


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

原文地址: http://outofmemory.cn/zz/13339180.html

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

发表评论

登录后才能评论

评论列表(0条)

保存