精选!腾讯WeTest游戏测试技术专家答疑专场

Q:Unity手游切换到手机后端以后,经常会出现莫名其妙的问题?如何更好的测试这些问题?

张得俊:Unity游戏切换到后台以后,主线程和协程都不会继续运行,但是通过脚本开启的线程会继续运行,建议重点关注线程是否有切到后台的处理逻辑。此外,有些手机会对后台程序进行一定限制,比如关闭网络功能等,也需要关注。

Q:棋牌游戏有极小概率出现闪退,有什么方法快速定位闪退原因?

张得俊:这种问题只能通过Crash监控上报的方式,没有其他特别好的方法。同时,也考虑可以加入在线性能监测,比如说WeTest的APM,有部分闪退,可能是因为手机性能较差,APK又占有较大内存,引起的am_low_memory,导致系统杀死应用。

Q:有时候有玩家在战斗中感觉到卡顿,有回拉现象。我们一般总结为该玩家网络不好,但是该玩家自己测试说,玩别的同类游戏时不会发生这种现象,测试自己家网络也很快。我们自己测试并没有遇到这种情况,请问有什么办法能测试到这种现象的发生?

孙大伟:不知道是不是像你说的“回拉现象”是不是像魔兽世界那种,比如人物在跑,但是可能只是本地客户端在跑,因为网络短暂不好,客户端不能与服务器同步位置,服务器上并没有跑,当网络恢复后,客户端与服务器同步后,人物回到了之前的某个点上,这种现象。

如果是这样,建议做一下弱网络测试,模拟一些比较差的网络情况,先确认一下是不是网络问题导致出现你说的回拉现象。

Q:我们公司的一款游戏(Unity RPG手游)研发已接近尾声,但客户端在某些战斗场景里内存占用飙升,退出场景后并内存没有完全释放,如此几个来回,客户端就容易卡顿或闪退,而且诡异的是同一个包 在iPhone6上最好复现,iPhone5上却很少出现闪退。使用WeTest有办法快速定位问题吗?

张得俊:WeTest平的的UPA工具可以解决绝大部分Unity游戏的内存问题。Unity内存优化一般从资源内存和脚本内存(Mono内存)两部分入手,资源内存较高主要是因为资源的尺寸不合理(比如纹理太大),或者资源的卸载不及时,UPA工具提供了资源分析功能,可以输出资源的尺寸、生命周期及卸载情况。Mono内存较高主要是因为脚本里面分配了一些较大的对象没有释放,UPA工具提供了Mono内存分析功能,可以进行Mono内存快照的对比,并精确到函数堆栈。

Q:测试中有时会遇到一些bug,但用了很多种方式都不能重现,如何对这类bug快速定位?

孙大伟:这确实是一个比较难的问题,但也是经常要面临的,我觉得首先要评估这个bug出现后的影响面和出现频率,这个决定了后面需要投入多大的精力来解决它,如果这个bug影响面很小又极少出现,那我想我们可能应该把精力放到其他更重要的点上,反之我们就需要想一些办法来解决它了。

在手工测试的过程中使用一些辅助工具,可以全程录制测试的步骤视频,当问题出现的时候可以自动的把软硬件环境信息抓取出来,比如系统配置,系统性能消耗,系统日志,Crash日志,业务自己的日志,被测游戏当时性能表现等现场信息尽可能的收集全,对于偶现问题在找到重现步骤之前开发基本上只能通过这些现场信息来分析可能问题产生的原因,然后再去验证重现并解决,在自动化测试的时候上面一些问题现场当然都是应该自动记录并保留的。

具体分析的时候,可能也没有一些捷径了,根据问题现场的视频日志堆栈,分析代码,模拟一些因素和场景进行验证,也可能需要一些针对性的自动化脚本,长时间去执行,以待问题复现等等。

如果是一些诸如性能之类的bug,比如内存泄露,还可以借助一些静态和动态分析工具可以帮助我们来加速分析进度。

先回答这么多,可能并不全,只是我自己的一些理解,其他大神可能还有更好的办法。

Q:棋牌游戏如何进行弱联网测试?

孙大伟:1、弱网环境的搭建,在内部已经有一个弱网的系统,通过在页面上配置一些网络的参数,比如带宽,丢包,延迟,乱序,抖动等,这些参数的获取主要是通过一些设备在实际环境下采集获取的。没有这套环境外面也有一些工具,比如微软的network emulator for windows toolkit,还有FaceBook有一个ATC的弱网络模拟的工具可以使用,还有其他的。

2、设定几个要测试的弱网络模型,比如3G高延时,请求无响应,2G高速移动等,每个模型对应着一组网络模拟参数。

3、弱网测试用例测试,主要是一些比较关键的点,比如登录,断线重连机制,结算,支付等方面。

4、测试用例与上面几个弱网络模拟进行组合测试,再设计一些随机的网络模型组合进行测试,观察被表现是否符合预期。

Q:怎样进行游戏的压力测试?

张得俊:公司内部服务器压力测试主要分为三大步骤:

1. 制定测试方案

主要是体验游戏,理解服务器架构,设计测试方案。要弄清楚游戏的玩法是什么,在什么场景下会有比较大的压力,比如登录场景、战斗场景、聊天场景;同时要搞清客户端和服务器之间交互的协议,是用的长连接还是短连接,是PB还是自定义协议等,进一步定制出性能测试方案,其中包含性能基线。

2. 开发机器人&执行测试

这一步主要是开发压测机器人,反复进行测试。公司内部压测,机器人都使用WeTest压测大师,在开发之前,需要从封测数据或用户行为的分析,构建出玩家的行为树,通过数据开发机器人。在开发过程中,会通过服务器日志或者抓包的形式,填充每条协议的字段。然后反复进行测试,暴露服务器的问题。

3. 数据分析

测试完成后,会根据测试数据,出一份完善的测试报告。报告包含测试结论、存在的问题、性能数据、优化建议等。

Q:能否简述下渗透测试的学习路线?

张得俊:渗透测试就是给你一个黑盒的产品,你在没有产品相关的内部资料的(如产品源代码、配置档、产品协议内容等)的条件下,完全模拟外网黑客去从零开始研究产品实现,在对产品实现有一定了解程度的基础上找出产品的安全漏洞。

这个也没有标准的学习路线,我觉得第一要有对各个平台如Java虚拟机、游戏引擎、二进制等有逆向能力,其次是漏洞分析能力,需要你对软件的实现和架构有一定经验,逻辑思维能力强;还有工具也很重要,针对各种语言逆向分析工具、动态调试工具,模糊测试工具也需要有和掌握。

Q:对于客户端,腾讯内部有没有一系列自动化工具,对于测试人员的工作又是怎么分配的?

孙大伟:对于手游客户端来说腾讯内部是有一系列自动化工具的。

对于功能和兼容性来说,有基于Unity控件的GAutomator(https://github.com/Tencent/GAutomator),还有基于图像识别的工具;

对于性能自动来说来说,主要是通过UI自动化工具配合UPA(以前叫Cube)工具一起使用;

安全测试,内部手游项目主要是使用SR手游漏洞分析工具,可以自动化分析一些常见的漏洞;

其他的一些专项测试也都会有相关的自动化工具。

上面只是说的手游,端游也会有对应的工具链。

腾讯测试人员主要分为:游戏测试,专项测试,测试开发,游戏测试主要负责业务逻辑方面,专项测试就是负责比如压测,安全,性能诸如此类专项测试内容,测试开发主要负责一些自动化脚本开发和工具开发,但是实际工作中界线其实并没有这么明显啦,都可以做的。

Q:能否介绍一下贵方实施压力测试的方法论以及工具?请问贵方的服务端是用java平台还是cpp平台的呢?

张得俊:服务器端开发语言不做限制的,有C++、Java、PHP、Python等各种语言,但是游戏服务器一般以C++为主。

服务器压力测试方法主要分为三大步骤:

1. 制定测试方案

主要是体验游戏,理解服务器架构,设计测试方案。要弄清楚游戏的玩法是什么,在什么场景下会有比较大的压力,比如登录场景、战斗场景、聊天场景;同时要搞清客户端和服务器之间交互的协议,是用的长连接还是短连接,是PB还是自定义协议等,进一步定制出性能测试方案,其中包含性能基线。

2. 开发机器人&执行测试

这一步主要是开发压测机器人,反复进行测试。公司内部压测,机器人都使用WeTest压测大师,在开发之前,需要从封测数据或用户行为的分析,构建出玩家的行为树,通过数据开发机器人。在开发过程中,会通过服务器日志或者抓包的形式,填充每条协议的字段。然后反复进行测试,暴露服务器的问题。

3. 数据分析

测试完成后,会根据测试数据,出一份完善的测试报告。

报告包含测试结论、存在的问题、性能数据、优化建议等。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171211G0NTT100?refer=cp_1026

扫码关注云+社区