从概念上说
前者(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、录制脚本过程中插入集合点,这样在录制完成后会自动在代码中插入集合点。
2、利用函数lr_rendezvous("xx"),手动在代码中插入集合点;
集合点插入成功后,Remove之前的用户组,重新添加你修改过的用户组脚本,这时候你就看到Controller里面Scenario菜单下的Rendezvous变为可选
以上就是关于如何在LoadRunner测试场景中添加负载生成器全部的内容,包括:如何在LoadRunner测试场景中添加负载生成器、用loadrunner录制脚本吗、[loadrunner]Action.c(53): Error -27987: Requested image not found [MsgId: MERR-27987]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)