51Testing软件测试论坛

标题: 如何用Loadrunner测试查询所用时间?(急啊,在线等) [打印本页]

作者: xfunction    时间: 2008-11-6 15:39
标题: 如何用Loadrunner测试查询所用时间?(急啊,在线等)
这个是很常见的问题
就是用LR来测试一个查询模块的性能—— 完成某种条件的查询需要多少时间。
LR提供对事务响应时间的度量,但如何定义查询事务?
疑问就是:录制脚本的时候可以用眼睛来观察什么时候返回了查询结果,但回放脚本的时候眼睛看不到,那就需要有一个判断法则,判断什么时候系统返回了查询结果,然后计算点击按扭到结果返回这段时间,这才是真正的查询用时。

比如在录制的时候,把查询事务定义为点击查询按扭开始,到返回结果为止,
但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是一个用户,速度肯定快,但回放的时候是大量并发用户,查询花费的时间就长,如果再碰上网络堵塞,返回结果的时间就更长了,花费的时间肯定比录制的时候所定义的查询事务所用时间要长,这样的话你衡量原先那个事务的响应时间是没有意义的

不知如何做查询用时的测试,烦请高手、前辈指点一二,谢谢

[ 本帖最后由 xfunction 于 2008-11-6 16:20 编辑 ]
作者: Lemon_s    时间: 2008-11-6 15:44
添加事务不就可以了
作者: lingxdbc    时间: 2008-11-6 15:49
原帖由 Lemon_s 于 2008-11-6 15:44 发表
添加事务不就可以了

顶~!
作者: xfunction    时间: 2008-11-6 16:14
楼上的没明白我的意思

比如你在录制的时候,你把查询事务定义为点击查询按扭开始,到返回结果为止,
但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是一个用户,速度肯定快,但回放的时候是大量并发用户,查询花费的时间就长,如果再碰上网络堵塞,返回结果的时间就更长了,花费的时间肯定比录制的时候所定义的查询事务所用时间要长,这样的话你衡量原先那个事务的响应时间是没有意义的

呵呵
作者: Lemon_s    时间: 2008-11-6 16:22
不太明白LZ是什么意思
你需要单用户的查询时间?那就用一个Vuser就好了啊,怕不准确再多迭代几次
作者: 026300    时间: 2008-11-6 16:27
原帖由 xfunction 于 2008-11-6 16:14 发表
楼上的没明白我的意思

比如你在录制的时候,你把查询事务定义为点击查询按扭开始,到返回结果为止,
但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是一个用户,速度 ...



性能测试的目的就是多用户状态下的系统性能,如果按照lz所说,那还做什么测试呢?
作者: xfunction    时间: 2008-11-6 16:31
我自己想了个办法

就是在录制的代码里,添加一个直到型循环语句:直到一个检查点的结果正确了,查询事务才结束。而这个检查点是一个文本检查点,针对查询结果定制的一个文本检查点

这样由LR监控到的查询事务响应时间才准确
作者: xfunction    时间: 2008-11-6 16:33
原帖由 026300 于 2008-11-6 16:27 发表



性能测试的目的就是多用户状态下的系统性能,如果按照lz所说,那还做什么测试呢?


呵呵,这位朋友,你的语文理解能力还不是一般的差。我有说过只做单用户测试吗?

录制的时候是用一个用户登陆上去查询,但回放的时候就是大量的用户
作者: xfunction    时间: 2008-11-6 16:34
原帖由 Lemon_s 于 2008-11-6 16:22 发表
不太明白LZ是什么意思
你需要单用户的查询时间?那就用一个Vuser就好了啊,怕不准确再多迭代几次



请注意我的原话:回放的时候是大量用户。。。

发现你的语文水平很差,对别人的文字领悟力很低。而且看得出你也不是高手,因为你的思维切入起点很低,把事情想得很简单

[ 本帖最后由 xfunction 于 2008-11-6 16:35 编辑 ]
作者: Lemon_s    时间: 2008-11-6 16:37
我晕,
同意6#
没什么意义啊
作者: xfunction    时间: 2008-11-6 16:38
再次重申

比如你在录制的时候,你把查询事务定义为点击查询按扭开始,到返回结果为止,
但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是用一个用户登陆上去查询,速度肯定快,但回放的时候是大量并发用户,查询花费的时间会更长长,如果再碰上网络堵塞,那从服务器那边返回查询结果的时间就更长了,花费的时间肯定比录制的时候查询事务的用时要长,这样的话你衡量这个查询事务的响应时间是没有意义的
作者: xfunction    时间: 2008-11-6 16:40
原帖由 Lemon_s 于 2008-11-6 16:37 发表
我晕,
同意6#
没什么意义啊



你别来我这贴了,小学生的语文水平,根本没有领悟别人的意思,就在这里乱说一气
作者: Lemon_s    时间: 2008-11-6 16:41
LZ应该理解理解何为回放,自己表达的不好就不要在这里抱怨别人了。
作者: xfunction    时间: 2008-11-6 16:44
原帖由 Lemon_s 于 2008-11-6 16:41 发表
LZ应该理解理解何为回放,自己表达的不好就不要在这里抱怨别人了。



我的原话摆在这里,回放的时候是一定数量的用户

你却问我是要做单用户查询性能测试吗?

谁的问题啊!
作者: 026300    时间: 2008-11-6 16:44
对于这样的帖子,只能无语。
我们的语文水平低,只有你聪明。
我们不应改帮你出主意,这样可以了吧

[ 本帖最后由 026300 于 2008-11-6 16:47 编辑 ]
作者: xfunction    时间: 2008-11-6 16:48
录制的时候肯定是用一个用户登陆系统进行操作,然后把这个操作录制下来

回放的时候就设置并发用户数,执行这个录制的脚本

你自己连录制都没理解!还在这里乱喊一通
作者: xfunction    时间: 2008-11-6 16:49
原帖由 026300 于 2008-11-6 16:44 发表
对于这样的帖子,只能无语。
我们的语文水平低,只有你聪明。
我们不应改帮你出主意,这样可以了吧



又是一个马甲,无聊!
你出主意也要出到点子上啊。谁告诉你做的是测试单用户查询性能了?
作者: lingxdbc    时间: 2008-11-6 17:01
原帖由 xfunction 于 2008-11-6 16:38 发表
再次重申

比如你在录制的时候,你把查询事务定义为点击查询按扭开始,到返回结果为止,
但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是用一个用户登陆上去查询,速 ...

你在哪里回放??在VUGen里回放录制的脚本跟并发用户数量可没关系,Vuser都是在controller里加载的啊.
作者: mr.bee    时间: 2008-11-6 23:51
菜鸟飘过
完全不明白楼主说什么
作者: x1j2l3    时间: 2008-11-7 00:01
你回放的时候并发?并发是在场景里面设置的吧   在录制脚本的时候顶多可以设置集合点啊  如果是并发那就不叫回放了。。。
在create/edit script 那里面运行你录制的脚本叫回放,这个里面可以设置集合点,但不能做并发,顶多就是做几个循环
在Run load Tests里面就不叫回放了吧,这个里面才可以做并发,前提是你在脚本里面设置了集合点以及在controller里面设置了虚拟用户

[ 本帖最后由 x1j2l3 于 2008-11-7 00:30 编辑 ]
作者: x1j2l3    时间: 2008-11-7 00:17
你用LR来测试查询模块的性能  不就是为了测试服务器的响应时间是多少么?然后设置各种不同的场景来找出系统的瓶颈  再解决问题  

疑问就是:录制脚本的时候可以用眼睛来观察什么时候返回了查询结果,但回放脚本的时候眼睛看不到,那就需要有一个判断法则,判断什么时候系统返回了查询结果,然后计算点击按扭到结果返回这段时间,这才是真正的查询用时。
我就写51testing论坛的查询功能吧  
家里的版本是8.0的  IE是7.0录制不了  说下思路
//打开网站,点击搜索
//设置集合点
//设置事务开始
//输入查询条件,点击确定
//查询结果页面。在这里就可以设置检查点,看你的是否查询成功
//设置事务结束
从事务开始到事务结束的这段时间就是服务器的响应时间

但回放的时候不能以这个事务的响应时间作为查询响应时间,这样是不准确的,因为录制的时候,是一个用户,速度肯定快,但回放的时候是大量并发用户,查询花费的时间就长,如果再碰上网络堵塞,返回结果的时间就更长了,花费的时间肯定比录制的时候所定义的查询事务所用时间要长,这样的话你衡量原先那个事务的响应时间是没有意义的
你用LR测试大量并发用户不就是要考虑服务器、中间件以及网络等方面的瓶颈吗?至于你的响应时间并不是由你第一次录制回放的时间来决定的,而是应该由你用户能够接受的时间来决定的。或者是说用户并没有给你这样一个值,而是由你进行性能测试以后,给用户一个报告说可以5秒内给1000个用户并发进行查询(这个值是由你在场景中运行脚本,有平均响应时间得出的),然后问用户能否接受这个值,如果不能(比如说用户之能接受在3秒之内),那你就根据LR的图来分析出系统的瓶颈是在哪里,是WEB服务器还是数据库服务器还是网络或者是其他原因造成的,然后再想办法改进测试直到测试通过。
我不知道我是不是理解了你说的意思  按我的意思是这样理解的  
PS:不知道按楼主的意思  我可以上中学没有

[ 本帖最后由 x1j2l3 于 2008-11-7 00:23 编辑 ]
作者: chenjinlin    时间: 2008-11-7 13:01
标题: x1j2l3 解释得很好顶
看了争论,觉得还是要和气为好.不过讨论中,有人心急,我觉得没什么. x1j2l3也很大度,解释得很清晰.
LZ应该感谢x1j2l3
我也收益不少. 因为也正准备自己动手做这样一个查询的测试.感谢大家的讨论.
作者: qicyt1812    时间: 2008-11-7 20:18
我觉得可以设置一个时间戳,然后将该时间戳写在文件里,这样每次查询花费的时间就都可以得到了
作者: hooghoog    时间: 2008-11-8 16:39
看了你们两人的帖子,真晕!不知道你们两个在干什么?…………………………
作者: clxymn    时间: 2008-11-8 17:15
原帖由 xfunction 于 2008-11-6 15:39 发表
这个是很常见的问题
就是用LR来测试一个查询模块的性能—— 完成某种条件的查询需要多少时间
LR提供对事务响应时间的度量,但如何定义查询事务?
疑问就是:录制脚本的时候可以用眼睛来观察什么时候返回了查询结 ...

我想先问一下,楼主是要完成什么测试目标,是要测试大量用户一起并发查询,所需要的时间;还是一个用户进行一系列的查询需要的时间。如果是要测试第一点,那么并发拖慢查询时间是必然的。如果只是要知道一个查询操作需要多少时间,那么设置场景的时候单用户运行就可以了啊,我不知道有什么好吵的!
作者: pingjing0417    时间: 2008-11-11 11:23
同意20#
作者: whyleave    时间: 2008-11-11 13:33
这要看查询这个操作客户端和服务器是怎么交互的。
如果客户端发送一个查询请求给服务器,服务器查询出结果后直接返回给客户端(即整个过程客户端和服务器只进行了一次交互),则不需要进行循环操作。
还有一种可能就是在查询过程中客户端和服务器进行了多次的交互,且交互的次数是不固定的,用户越多,服务器查询出结果的时间越长,交互的次数就越多,这个时候就可能要用到循环。
用我以前做的一个项目做个例子。当时测试的是个报表系统,客户端发送一个查看报表请求,服务器接受到请求后会先申请一个报表缓存,最终的报表结果将会存放在该缓存中,此时服务器会将该报表缓存的ID返回给客户端,客户端接受到报表缓存ID后,会每间隔一秒向服务器发送一次请求,读取报表缓存中的内容(每次发送的请求都是一样的),直到报表结果生成。因为录制的时候是单用户的,所以服务器查询速度较快,报表结果生成的也快,交互的次数就少,但大量用户并发执行查询时,报表结果生成就慢,交互的次数也就越多。所以没有办法在脚本中固定请求的次数。当时为了解决这个问题我就是在脚本中采用了循环的方式,但是判断结果是否生成不能采用检查点的方式,因为用检查点一旦找不到结果就会报错,退出循环了。
我当时是用关联函数从结果中取值,然后用字符串比较函数比较来判断报表是否生成的。
希望我的回复对LZ有帮助!另论坛是大家交流的地方,可以争论,可以不同意对方的观点,但最好不要互相攻击。
作者: 断寒    时间: 2008-11-11 15:44
实在看不下去了.潜水好久的我都要冒泡了.

还有凡事无绝对,例如单用户首次执行A查询的响应时间为5秒,
那么在连续第二次执行A查询的时候响应时间有可能是<5秒(建立在系统就单用户使用的前提条件下)在CONTROLLER中加载脚本执行多用户并发A查询的响应时间,部分用户>5秒,也有部分用户<5秒.

我们一般说"录制""回放"是在VUG中的说法.
大并发的"回放"是在CONTROLLER中.

另外,查询的性能需要分部去解决,一个查询所包含几部分响应时间:
从输入完查询条件点击按钮开始,到页面返回查询结果,中间包含C-APP,APP-DB,DB处理,DB-APP,APP-C,C的处理.这些东西每个时间都需要具体分析(如果环境复杂,且有必要的话).如果单纯考察查询的SQL语句的执行效率,那么直接编写脚本跳过APP,直接对DB加载.DB存在缓存机制,考察的SQL语句是否为常用,是否是长驻缓存,这些都需要考虑的.不能单方面的思考.

PS,我只是小学水平,我对查询只能理解到这种程度,不过我还是不理解LZ你的话的意思
作者: lengyue_112    时间: 2008-11-13 10:40
LZ描述问题真的是很不清楚,不怪别人,反倒说别人语文水平低,我是不会帮这么心胸狭窄的人的。不过#21说的还是很有道理。
作者: luozhi4102    时间: 2008-11-17 16:50
路过
作者: longjuan    时间: 2008-11-18 11:08
不管别人表达或者理解如何?楼主也不应该这样说吧,毕竟别人也是好意想帮你,不然谁还敢帮你啊
作者: karenkun    时间: 2008-11-18 14:26
录制脚本的时候可以用眼睛来观察什么时候返回了查询结果,但回放脚本的时候眼睛看不到,那就需要有一个判断法则,判断什么时候系统返回了查询结果。

从脚本录制的角度,就是在查询请求提交后加验证,验证查询结果是否返回,用文本验证点或者关联都可以。把这个验证点也放到查询事务里。
作者: tiger_86    时间: 2008-11-18 14:52
原帖由 026300 于 2008-11-6 16:27 发表



性能测试的目的就是多用户状态下的系统性能,如果按照lz所说,那还做什么测试呢?

性能测试的目的是什么呢?
这样说俺就糊涂了!
作者: lolqyve    时间: 2008-11-20 11:46
路过,不喜欢 LZ  ....
作者: pekingliu    时间: 2008-11-20 14:14
楼主的意思,是不是要确定一个零界点啊,也就是所谓的如何确定查询完成的点,你说的加文本校验就是这个意思吧
作者: pekingliu    时间: 2008-11-20 14:17
补充,楼主就是要确定,从点击按钮开始到这个零界点的时间,但又不相信事务的时间是否准确
作者: taijizongshi    时间: 2008-11-21 08:11
我觉得这个LZ头脑有问题,别人好心帮他主意,还在这里乱叫!!人渣!!我吧整个帖子都看完了,都不知道你要干什么!!你到底要达到一个什么目的。其实你还没有明白什么是做性能测试!!!一句话:无语!!!
作者: my2008sz    时间: 2008-11-21 10:35
路过同时也关注此内帖 。 但是觉得 LZ 。。。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2