51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: 默默巫
打印 上一主题 下一主题

[你问我来答第13期]:C/S产品的性能测试设计与执行(已结束)

[复制链接]

该用户从未签到

21#
发表于 2011-7-17 21:30:50 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:14 编辑

回复 4# zhuruize


   这个有要求得有条件才能满足呀。呵呵,先看我对其它人的问题的回答再说吧。
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2011-7-17 21:31:40 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:14 编辑

回复 6# wal501


    这个问题有点大,呵呵。我就简单说下我在网络游戏服务器性能测试中的一些经验吧。
首先,一次完整的性能测试的时间安排,需要用40%-50%的时间来分析被测试系统和设计用例,分析哪些地方可能存在问题,比如涉及网络IO的,涉及DB存储的,涉及大量磁盘IO的,涉及大量运算的,涉及内存分配的等等都是需要重点关注的。然后根据这些点去对应被测试系统的场景,比如大规模用户登录/退出,新建用户等,通过这些点找到测试目标,然后确定虚拟用户数量级别(一般是根据系统设计的容量来上下浮动),选择测试工具,包括压力模拟,数据收集及其它辅助工具,确定是自己研发呢还是使用商用的,商用的是否满足需求等,直到选择好合适的工具。

其次,进行测试和数据收集,大概消耗20%的时间。这部分内容我相信大家都没有问题。

最后的数据分析及报告输出,大概30%-40%的时间,需要从收集到的数据去分析,查看,并可能需要二次压力测试,以确保数据可靠等,关注CPU使用率与利用率,内存分配与回收,网络上下行,磁盘IO等数据,找到问题,或者提出优化建议。

这三个步骤,难点在于第一和第三,不但需要技术水平,更需要对系统架构的理解与把握,还要求有一定的经验。
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2011-7-17 21:32:19 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:14 编辑

回复 7# zthua


    首先说交易,交易会影响什么?游戏中的交易有面对面的交易,邮寄,寄售,摆摊等多种交易方式,这些要分类讨论的。举例寄售吧。寄售一般是A将物品放在系统里,然后B来浏览,购买(玩WOW的应该知道拍卖行这东西,就是寄售),系统通过邮件或者其它方式将金钱打入A账户。这涉及到的主要系统有道具,邮件,背包,寄售这几个,重点在于寄售物品在服务器内存或者DB中的保存,以及用户背包道具的变化。那么我们就可以用机器人程序模拟大批量的寄售请求和购买请求,同时关注服务器端负责寄售模块的进程的工作情况,包括是定时操作DB还是即时操作DB,内存占用如何,是否有高的CPU占用,写DB的时候是否进行了表锁或者行锁等(防止一件东西在同一时间同时被两个人买,虽然机率很小但不是不可能),交易响应时间等,然后玩家背包系统以及邮件系统就需要重点关注。比如背包数据的读写效率与频率,服务器端邮件的保存与转发策略等。
其它几个交易模式就不一一分析了,基本上差别不是太大。

PK系统其实涉及最大的就是数据的广播与同步。在PK的时候,技能及技能效果(负效果与正效果,数值等)需要同步给周围的玩家,需要同步的范围越大,服务器的压力越大。以魔兽世界5V5竞技场为例,每一个人的技能效果都需要同步广播给所有人,假如玩家A释放一次技能,需要三次数据交互(目标判断,吟唱,最终效果),那么伤害效果假如只有一个包下发,那么一共需要下发12-13个数据包,如果10个玩家同时放一次技能,那么要广播120到130个左右的包,这还不包括玩家移动包,可以看到这个数量是相当大的;副本中其实也一样,只是需要广播的数据更多,除了技能,移动,还有NPC的各种包下发。因此在服务端,我们需要关注数据同步广播包的范围和频率,对这种情况下服务器资源消耗进行监控。

而PK对客户端的性能我们需要关注包的处理策略和图形渲染效率。在很多包同时下发到客户端时,客户端图形渲染很可能就跟不上,比如引擎效率不够,比如渲染线程和网络数据收发线程放在一个线程里等等。这也是为什么正常情况下游戏没有问题,但大量的人在一起释放技能或者移动时会很卡的原因。

副本这个问题其实还是要通过开发机器人程序来测试的,loadrunner是很强大,但loadrunner不是一切。通过模拟大量组队玩家发送请求进入副本,来查看服务器的一些性能指标,比如响应时间等。

最后纠正个错误,socket不是协议,呵呵。http也是TCP/IP的一个应用层的小集合。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2011-7-17 21:33:32 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:15 编辑

回复 11# 黎雨梦荷


    多学习,多研究。技多不压身。什么东西都需要一定的深度的。
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2011-7-17 21:34:16 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:15 编辑

回复 10# char_foo


    协议这块儿主要是关注服务器的逻辑,我相信你的经验也不少。界面除非已经完全定下来了,否则你通过界面做自动化测试是很痛苦的,我是比较有体会的。如果要做自动化测试工具,可以考虑sikuli和按键精灵,这两个东西脚本写好了一样很牛X的。目前项目的日常构建冒烟测试就是用按键精灵。还有一个项目的属性加成测试就是用sikuli.不过这两个东西调试起来都相当的坑爹。。。。

不知道你说的解析服务器协议是个什么概念,如果是自己公司研发的游戏,那么协议对你应该是透明的吧?头文件包进来直接用就可以。如果是代理类要搞协议**和逆向,虽然费劲点,但关键的模块一定要解析好,比如技能,道具,公会以及一切和收入相关的模块,至于完美不完美,我觉得,协议当然是都搞到最完美啦。
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2011-7-17 21:35:24 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:15 编辑

回复 14# 云梦泽1986


   会话请求?不太明白这个是什么意思呢。是指web方面的session?还是通过TCP/IP连接来获取一些逻辑上的授权?如果是TCP/IP的连接请求及逻辑登录请求,那么开发机器人或者使用LR录socket脚本都可以,模块大批量用户并发,来查看服务器的处理效率即可。
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2011-7-17 21:36:01 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:17 编辑

回复 16# carol2000


    1.性能测试的测试用例如何组织,如何和自动化工具相结合?
用例的组织还是以目标系统可能出现瓶颈的关键测试点为准,展开用例的设计。这些很多时候需要经验。自动化个人认为更多的用处应该是体现在回归测试,而非性能测试,两者应该分开。当然想把性能测试自动化也可以,windows计划任务,linux下的crontab,甚至自己写脚本,写个简单的C/S程序来控制都可以,至于数据的收集么,脚本和程序都可以做到的。

2. 最大用户并发数/集合点(Rendezvous Point)的测算是否有合理的公式 (网上那些老的公式不是太合理,就不要重复列举了)
不同的系统,不一样。举游戏中的不同游戏类型为例,休闲类游戏数据交互少,单个进程甚至可以支持2W人在线;而大型游戏只有5,6千。因此这个用户数我认为还是以目标系统设定的容量上下浮动来测算,没有固定的公式。

3. 自动化用例如何维护和运行?比如回归测试用例以及产品新功能的用例如何添加和管理?
写尽可能简单的用例脚本或者描述,而通过程序生成不同的用例。举例,假如一个自动化的用例是通过配excel表来实现的,你需要通过脚本发送file1.sheet1.A列中所有的数据,每次发一个,到服务器验证,那么尽量只通过 send file1.sheet1.A这样的一句脚本来完成用例的编写,而是让你的测试工具自动去send file1.sheet1.A1~An的数据,这样可以有效降低维护成本。
我一直觉得自动化就是用来做回归测试,它的价值在回归测试中体现得最充分。因此,每一个新系统的用例,都应该是新编写的,而这些编写好的用例,就是下次回归用,在本次新功能测试中,用处有限。

4. 自动化用例的运行方式和日志如何管理? 是每日晚上跑一遍还是每周末跑一遍?生成的报告如何归档和阅读?
运行方式与自动化工具有关吧,如果linux平台的,可以写crontab,脚本定时;win平台的,计划任务都可以。日志管理方式多了吧,简单点可以直接在脚本里调用svn up什么的,提交到svn服务器,或者架设个webserver,写点简单的逻辑,直接将log拷到固定目录,按日期分类。然后web写一些简单的逻辑,在web页面显示这样log目录和文件列表,甚至可以做一些解析,绘制图表等。对于报告的处理,我个人认为也可以采用这样的方式。至于执行频率,个人觉得没必要天天执行吧,一周执行一次或者一个里程碑版本执行一次就可以了。


5. 对于服务器端->客户端的"响应时间"可以测算,但是如何测算客户端的实际运行/执行某个任务时间?比方webgame 实际loading某个场景的时间或者说是"实际加载时间"?

可以和程序沟通,加log,比如在接到这个包的时候写个时间点,微秒级的,在处理完以后再写个时间点,两者减一下就可以了。
如果得不到程序的支持,那就自己想办法,一般可以使用hook技术来挂钩子,把上面说的功能自己加上。

6.一般C/S性能测试的瓶颈除了硬件问题还有哪些?通过自动化测试如何进行排查,请给出实际真实案例?
其实硬件真算不上什么问题。如果真的程序没问题,也没有优化空间,硬件不行就换好的呗,4G内存不够换8G,四核心CPU不够换八核呗。
性能上的问题,最怕的其实是程序上的。除了硬件,一般有如下几个地方需要关注:
涉及网络IO的,涉及DB存储的,涉及大量磁盘IO的,涉及大量运算的,涉及内存分配的,
分别举例,网络IO体现在大量用户并发连接及高频率上报/请求数据;涉及DB存储的一般是数据的更新,比如游戏中的登录,游戏中玩家数据更新,玩家退出游戏等;涉及大量磁盘IO的典型就是需要写大量的log来做为一些数据记录永久保存,比如关键交易数据等;涉及大量运算包括程序里面需要在大量的数据中查找特定记录、排序等等;涉及内存分配一般
有大量对象创建与销毁,还有分配策略,是预分配还是即时向OS请求等。
自动化测试排查性能测试的缺陷目前我这边没有经典的有必然联系的案例,原因是我认为性能测试不需要自动化,自动化应该是针对逻辑进行的测试,性能方面还是边测试边调整更可靠。
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2011-7-17 21:37:23 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:17 编辑

回复 21# zongxiaojing123


    不好意思啊,这次只讨论C/S架构产品的性能测试,而且我对B/S的测试也了解不多。
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2011-7-17 21:38:28 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:17 编辑

回复 20# zongxiaojing123


    jmeter我不会用,不好意思。不敢妄言。
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2011-7-18 09:44:56 | 只看该作者
回复 32# 寂静如风
哈,很详细,多谢了。
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2011-7-18 14:25:07 | 只看该作者
您好,请问:
1.window客户端指定进程的资源占用是怎么监控的?有没有好用的工具
2.资源泄漏或者溢出如何测试?
3.测试程序稳定性如何测试?使用什么工具?
4.网络通信性能如何测试?
请专家指导~
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2011-7-19 10:15:59 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:17 编辑

回复 31# itmomo

1.window客户端指定进程的资源占用是怎么监控的?有没有好用的工具
   windows性能计数器,系统自带,很不错了。还有就是spotlight,开源但强大的工具。

2.资源泄漏或者溢出如何测试?

资源泄露和溢出不知道你说的是不是就是指内存泄露?从系统测试角度讲还是从白盒测试角度进。如果是系统测试内存泄露的话,那么我们可以分类讨论下windows和linux平台的一些不同的做法。
windows下一般监控的参数是系统可用物理内存,可用虚拟内存,进程占用物理内存和进程占用虚拟内存,并且监控进程句柄数(Handle Count)和工作集(working set).
一般如果只出现虚拟内存涨或者物理内存单方面涨,不代表一定有内存泄露,也有可能是系统进行了资源位置转存,将物理内存中的数据移动到了虚拟内存中,或者反过来;如果出现在某一操作中,内存占用升高,这个操作结束后,内存恢复到原来的水平,也不会是内存泄露。
工作集是一个非常 重要的指标,如果发现进程working set 和进程占用的物理内存都有提高,并且一直没有降下来,那么说明可能存在内存泄露,这个时间可以写脚本重复执行这个动作,重点观察,并取得数据,验证结论。


再谈linux下面,一般是通过valgrind,nmon(IBM的工具,非常牛逼非常好用,强力推荐),或者自己用shell脚本配合free指令,来统计内存情况,然后进行分析。linux下面一般都是采用内存预分配的策略,所以你会发现一个进程在启动时申请了一大块内存,然后在这块内存里做操作,有时候监控下来,发现曲线几乎是水平的。因此一般情况下,linux下的程序,最好使,valgrind进行内存方面的测试,对代码和调试方面的能力要求高一些。





3.测试程序稳定性如何测试?使用什么工具?
稳定性这个影响的情况比较多,上面提到的资源泄露会引起不稳定,软件兼容性会引起不稳定,硬件兼容性也容易引起不稳定,网络模块不够健壮,也会引起不稳定。。。所以这个问题我感觉很难全面回答,说下几个注意事项吧:
  1).内存泄露一定要查。
  2).软件兼容性,一定要兼顾所有常用软件,比如各大下载站排行前20的软件,重点关注各大安全厂商的软件,尤其是垃圾360(虽然很多不明真相的群众还是用得很多)。
  3).尽可能多的在不同的硬件配置机器上进行程序运行。
  4).  换个网络模块程序写得好的程序来写通信模块程序,把原先的写得不好的,拉出去打。

4.网络通信性能如何测试?

网络通信性能一般还是考察server端负责管理TCP连接、接收/发送模块的性能(客户端就只负责自己的数据如果还出问题那真的可以打程序员了),一般来说考察以下几个方面:
1).小包,但高频率的通讯包的处理情况,比如一次发只有5个字节的包,但一秒总共有10W请求,统计每个包的处理时间,以及被测试目标的CPU占用情况。
2).大包,但稍低频率的处理情况。比如一次发20字节的包。
3).如果时间充裕,再测试大包高频率的处理情况。

以上三个用例,一般情况下,用例2的效率会是最好。
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2011-7-19 13:30:54 | 只看该作者
回复 1# 默默巫


    期待啊
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2011-7-19 23:37:20 | 只看该作者
本帖最后由 寂静如风 于 2011-8-3 17:18 编辑

回复 20# homedw


    SNS的游戏我关注比较少,貌似很多是基于web的吧?可能这方面的测试还是更多向web性能测试靠拢,不过很抱歉不太了解web性能测试要注意的地方。AMF了解也不多,不过貌似AMF是基于HTTP的,协议格式是固定的吧,貌似有个叫charles的工具很不错,如果感觉不好用,或许可以考虑自研一个工具哦。对于这种已经固定的协议的解析,应该不是什么难题。
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2011-7-20 23:44:34 | 只看该作者
这个,真不好问……太多了
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2011-7-20 23:58:16 | 只看该作者
性能测试的可以多了学学了 呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2011-7-21 11:29:01 | 只看该作者
学习。。。
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2011-7-21 16:45:38 | 只看该作者
学习了,不错,顶
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2011-7-22 11:19:27 | 只看该作者
socket 协议在加密后,用LR录制出来是乱码,如何解决这个问题??谢谢啦
回复 支持 反对

使用道具 举报

该用户从未签到

40#
发表于 2011-7-22 11:43:16 | 只看该作者
目前正在做一个交易工具的性能测试,C/S架构,开发人员写的工具,模拟客户端的操作,目标是支持5000个客户同时在线操作,LR最多只能支持100个,工具的需求还在不断的改进中,我是用LR来监控LINUX服务端的资源,但是还有其他的网络带宽等获取不到!
                                       
服务器的平均响应时间,CPU 使用情况,内存占用率,磁盘 I/O,网络流量占用率        ,用户连接成功数,成功数,失败数,查看服务端连接状态,
问题
1、上面是我每个用例中需要获得的性能指标,可是有些不能及时获得,比如每次操作的服务器的平均响应时间,内存占用率,磁盘 I/O,网络流量占用率。
2、另外请问下LR能否测试的用户数改的大些,用socket协议的时候,比如改到5000个乍弄?
3、socket中,没有pass,fail结果
一般要乍弄?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-27 01:58 , Processed in 0.083897 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表