51Testing软件测试论坛
标题:
很多人问到的C/S架构的性能测试
[打印本页]
作者:
tttrrryyy
时间:
2010-2-24 15:20
标题:
很多人问到的C/S架构的性能测试
很多人关心LR在C/S架构上如何实施性能测试,我想根本原因在于两个方面,一是很多时候脚本无法录制,即LR无法成功调用被测的应用程序,二是测试脚本即使录制下来,可读性不强,往往不能运行通过,调试时无从下手,像音视频、电子地图类的测试差不多也是这个问题。
根据我以往的项目经验,LR是可以做到的,因为它提供了Windows Sockets协议,解决方案实施起来简单但需要足够的细心以及一定的判断力、想象力,可参考如下步骤进行:
1、通过抓包工具捕捉客户端与服务器之间的所有通讯。
关键点:IP过滤,端口过滤,报文类型过滤
目的:弄清楚业务操作过程中,客户端向服务器提交的请求原型,以及服务器对我们请求所做的正确响应
2、将过滤后的报文整理成测试脚本。
关键点:Socket的建立与关闭,send buf的整理,receive buf的整理
目的:将抓包获得的报文转成LR测试脚本(提示:选取合适的抓包工具,使得报文能被保存成文档格式;开发小工具,通过报文中的各个关键字抽取报文中Data Area中的部分作为buf 区的内容,根据IP字段,端口号等特征完成lrs_send,lrs_receive语句的填写。这部分看上去挺难,但只要对报文做好分析,把握规律,编程的事随便拉个开发都可以轻松搞定)
3、调试脚本
关键点:定位错误,添加校验点
目的:使脚本真正可以拿来进行压力测试
这是最难的一个环节,耐心、细心、判断力都体现在此处。每个人处理问题的方式的不同,我只能提供自己的一点经验。
将脚本RUN-TIME SETTINGS中的扩展日志全部打上钩,并且将脚本拿到controller中单用户执行,注意设置好日志路径。
脚本出错后,用EDIT PLUS或其他的文本工具打开log,找到出错行,然后向上逐一对比服务器返回的数据与录制过程中抓包获得的报文。
在这里,我用了一个小技巧,生成buf内容时,使buf的编号与该buf在抓包获得的报文中编号保持一致,比较起来很方便。
如果服务器返回的buf与抓包时的原始数据一致,自然表示该步骤回放成功,如果不一样,则需要具体情况具体对待。就我的经验来说,往往是因为数据唯一性问题或者是关联的问题造成某一步骤返回的BUF为0或-1,从而导致最终脚本失败。
找到第一个出错的地方后,参数化,关联等手段都可以用上了,这里可能需要重复两次抓包过程,先行比较自己发送的报文是否有区别。
总体思路便是如此,写了一堆,也不知道对大家是否有帮助,对于此类问题,网络上的协助很难派上用场,事情还是要在现场才有可能得到解决啊。本来有意将这东西工具化,甚至产品化,但几个项目实施下来发现变数较多,特别是最后一个环节,完全依赖于测试工程师的自身能力,只好就此作罢。
作者:
dennyqiang
时间:
2010-2-24 17:20
不错,思路很清楚,不过Socket这个玩意儿,测试起来是比较麻烦的,首先来说用录制的方式,那么就等着看一堆乱码吧,如果直接编码的方式,那么要解决的问题也很多,发送什么数据,报文格式,业务逻辑,关联等(其实就等于将Client与Server的交互相关的逻辑在LR中再实现一遍。
难是难点,但是是可以做到的,只要多点耐心和细心,大家普遍可能想到的是录制,但是录制其实不能解决所有问题,很多时候自己定义脚本会更容易后期的操作。个人意见是可以尝试录制,而录制出来的脚本呢供参考。
另外使用Socket方式时,一定不要使用localhost本地环路来访问Server端,即使你的C-S都在一台机器上,也不能这样访问,一定要使用机器名或IP地址,LR才能侦测到C-S之间的交互数据,才能录制到脚本。
[
本帖最后由 dennyqiang 于 2010-2-24 17:23 编辑
]
作者:
云层
时间:
2010-2-24 18:25
强哥把我说不清楚的给说了,我只能座板凳了
作者:
jsyzcz_37
时间:
2010-3-11 16:08
请问录制加密的报文怎么办呀?
作者:
丰肚翩翩
时间:
2010-3-11 21:27
楼上问的好!
如果客户端有加密处理,这个方法就行不通了,我就做过类似的项目
加密后录制下来的是一堆二进制数,前一步返回的数据和后一步发送的数据是有关系的,但是这关系是经过加密的,基本是猜不出来的(如果能让你猜出来,那他的加密就失败了,呵呵)
例如:
前一步返回的数据是100,client端程序对这100进行处理:100+9-7-2×15×77.......(呵呵,很复杂的加密算法),把处理完的结果作为后一步发送的数据,这样脚本就没法做了
为什么b/s结构的可以做呢?因为b/s结构可以进行“关联”,关联的前提是一模一样的数据,前面是100,后面还是100。这是因为b/s结构采取的是瘦客户端,浏览器不会做那么多处理(因为它太瘦了 呵呵!!)
作者:
云层
时间:
2010-3-11 23:26
加密的话你自己本地写个dll去处理就行了,b/s也可以做到本地计算加密的,你说的这个特例并不成立。别忘了JS
作者:
丰肚翩翩
时间:
2010-3-12 11:32
在不知道加密规则的情况下,自己怎么写? 根本做不到,就连开发人员也不知道加密规则,他们做的只是一个产品上的二次开发,底层加密规则和报文规范他们都不清楚的。
b/s结构的系统通常不加密至少我还没遇到b/s系统加密的(除非登陆时的密码,有时候加密一下),因为没必要嘛。
作者:
yu8023yan
时间:
2010-3-12 13:05
太深奥了。。。学习学习。。
作者:
hyd_bpmf
时间:
2010-5-31 11:12
标题:
对于C/S的性能问题
请问各位,我是个性能方面的菜鸟。用LR录制C/S的软件需要首先了解系统什么?我们是视频方面的软件。
比如,根本录制不了,我们准备采用写的方式,用一个简单的登录界面来说,录制时什么也没抓到。我需要向研发了解些什么?
登录用什么协议?登录界面、主界面控件用什么写的?数据流用什么协议封装?
这些是我想的,但是术语对不对,想的差都少都没有完全的思路,希望各位能给一个方向,小弟先在这谢谢了。
作者:
linyucc
时间:
2010-8-20 16:39
楼主,我终于找到你了。我现在碰到这样的问题了,看了你的文章,抓了一些包,都看不懂怎么转化成脚本,我没有开发经验。很愁啊!
作者:
linyucc
时间:
2010-8-24 11:10
将抓包获得的报文转成LR测试脚本(提示:选取合适的抓包工具,使得报文能被保存成文档格式;开发小工具,通过报文中的各个关键字抽取报文中Data Area中的部分作为buf 区的内容,根据IP字段,端口号等特征完成lrs_send,lrs_receive语句的填写.
这部分该怎么做啊,怎么将报文里的16进制转化成脚本里的buf部分
作者:
shanglijuan1209
时间:
2010-8-24 11:53
我现在要单单测试客户端的性能··我们的也是基于C/S的
而且所有数据都没有跟服务器交互 ,数据都是在本地的。
举个例子吧:
我们是PDA系统,业务是GIS的!我现在要知道我查询某个点,所花的时间 以及CPU,内存等使用情况
用什么工具好呢?LR可以吗?
作者:
linyucc
时间:
2010-8-24 13:44
可以用 ,数据都在本地,这测的没有什么意义吧
作者:
shanglijuan1209
时间:
2010-8-24 19:58
我们经理现在就要我这么做!我开始也给他说没什么意义,他说要把客户端的测试了
··才能跟服务端交互!
我给你详细说说我们的 ,你看看 给我出出主意吧 谢谢
我们现在那个PDA系统是架在手机上的,而我们的手机系统是windows mobile6.0的
我们的文件都放在资源管理器里面的 数据库文件 和GIS地图都在里面 就连我的测试程序都是同目录的
所有的数据都是从这里面拿到的 我现在需要测试从数据库文件读取数据到手机界面上的时间 以及手机的内存,CPU使用率
可以加我Q 527083993
作者:
kuangquanshui
时间:
2010-8-25 08:33
太深奥了
作者:
fs2002
时间:
2011-9-7 23:09
如果大虾能写一个例子出来就好了,比如一条简单的数据插入,从头到尾的分析下.
作者:
如果弯弯
时间:
2012-6-12 22:23
好帖,最近正在愁这个呢,楼主为我理正了思路,看清了方向,继续研究WINSOCK之中
作者:
wolf_struggle
时间:
2012-8-9 14:59
第二遍拜读
作者:
zhengaiqi
时间:
2013-5-28 11:20
文字太多,没有脚本。。哎
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2