游戏服务器压力测试怎么做,开发app怎么提高运行速度?
App运行速度分析以及初步优化方案
一、 App运行速度分析
(1)硬件约束
CPU主频,多核;
CPU主频决定手机的运算速度,多核则更多体现在并发任务方面。
内存:运存与内存(RAM+ROM)
图1-1 移动端内存示例图
运存是指手机运行程序时的内存,也叫RAM简称运存;RAM越大,手机可运行的APP应用程序越多,运行越流畅,目前RAM基本是2GB够用,3GB流畅,4GB极佳。
内存是指手机的存储控件,也叫ROM;ROM越大,手机储存的文件空间越多,目前ROM基本是16GB,32GB,64GB;ROM不影响手机的运行速度。
当运存(RAM)匮乏时,运行大型APP会出现卡顿、黑屏甚至出现暂时性卡死状态。
在运存不够时可以采取手动关闭后台不必要的程序进行释放,或者通过手机管理软件进行内存释放,例如手机管家、手机安全卫士等。
(2)网络环境影响以及服务器接口环境
网络状况直接影响业务型APP的体验,例如用户登陆业务;登陆时手机端需要向服务器发送用户的登录名及密码等信息,服务器进行信息核对后返回登陆状态指令,手机端接收到返回信息进行业务跳转。登陆业务只需要进行一次接口调用,在网络和服务器环境都理想的情况下,http三次握手时间可以控制在1秒以内。综合考虑手机端网络以及服务器环境,登陆控制在2.5秒内是可以被用户接受的。
手机端针对网络环境可采取相应的缓存策略以降低服务器的频繁访问,从直观上提高页面响应速度。根据业务级别提供相对可靠的有损服务,可采用懒加载、延迟异步加载等方式降低服务器压力。
对于服务器可采用缓存服务器、分布式服务器、反向代理等方式进行数据提供业务,对于图片、视频等媒体资源采用CDN进行加速。服务器端的优化性能提高率远大于手机端优化的提高率。
(3)View的绘制过程
Measure(计算) -> Layout(定位) -> Draw(绘制)
整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,函数做的执行过程可简单概况为根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),其框架过程如下:
图 1-2 View绘制流程示例图
View的绘制时间可以利用hierarchyviewer工具进行查看。
图1-3 hierarchyviewer示例图
上图Measure为0.089ms,Layout为0.115ms,Draw为1.088ms,该view的绘制总耗时为1.292ms。
(4)16ms原则
目前大多数手机的屏幕刷新频率是60hz,如果在1000/60=16.67ms内没有办法把这一帧的任务执行完毕,就会发生丢帧的现象。丢帧越多,用户感受到的卡顿情况就越严重。16ms时间很短,身为一名应用开发者,为了让用户有更好的体验,应该要充分利用这16ms,确保刷新一帧的时候在16ms内。
图1-4 UI刷新示例图
如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面。
图1-5丢帧示例图
优化16ms问题可以通过尽可能减少过度绘制,减少布局嵌套,尽可能不要在UI线程做过多耗时操作。
(5)OverDraw过度绘制
当设计上追求更华丽的视觉效果的时候,我们就容易陷入采用复杂的多层次重叠视图来实现这种视觉效果的怪圈。这这很容易导致大量的性能问题,为了获得最佳的性能,我们必须尽量减少Overdraw的情况发生。
图 1-6 过度绘制四种级别示例图
蓝色、淡绿、淡红、深红代表了4种不同程度的Overdraw情况,我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。
(6)GC垃圾回收
GC一般耗时在几毫秒到几百毫秒之间,然而对于手机16ms渲染机制来说,GC会带来不小的开销,所以在开发过程中尽量避免显示调用GC。频繁GC会导致页面卡顿,当执行GC操作时,任何线程都进入暂停状态,等待GC操作结束后才能够继续运行。导致频繁GC有两个原因:
1、 内存抖动,即大量的对象被创建后又在短时间内立刻被释放
2、 瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值时会触发GC过程。
以上这些GC操作可能会造成丢帧情况,如下图:
图 1-7 GC时丢帧示例图
24ms的GC形成了丢帧,用户感知到页面卡顿。
(7)同步任务过多
页面启动时同步任务过多会在短期内过多占用手机资源,直接导致其他性能下降,影响页面响应时间。例如在Activity的onCreate方法中进行了大量的同步任务。
二、 初步优化方案
综上所述,App运行速度分析概括为以下七点:硬件约束、网络环境影响以及服务器接口环境、View的绘制过程、16ms原则、OverDraw过度绘制、GC垃圾回收、同步任务过多。在这里我们只对移动端开发并对后面五点提出相应的初步优化方案:异步延迟加载。
不妨先针对View的绘制过程、16ms原则来分析下某首页,采用hierarchyviewer工具分析首页如下:
图 2-1 首页MLD分析示例图
从上图可以看出首页包含了1435个view,Measure耗时43.476ms,Layout耗时1.141ms,Draw耗时2.840,总耗时47.457ms(大于16ms)。基于16ms原则,该页面会出现丢帧情况从而导致卡顿现象。针对这种长篇幅的页面可以根据实际情况进行异步延迟加载,对于第三屏、第四屏、第五屏采用梯级延迟加载从而避开同步加载。
异步延迟加载的关键是延迟时间为多少是合适的,对于配置较低的手机延迟相对要高一些,对于配置较高的手机延迟相对要低一些。如果延迟配置的不合理的话,高配置手机会产生等待延迟加载的内容的情况,而低配置手机会出现优化效果不明显的情况。所以这个时间需要结合业务以及不同配置的手机进行测试来确定的。
针对GC垃圾回收,我们以某APP MainActivity为例子分析下。MainActivity作为项目中所有Activity的托管,采用getLocalActivityManager().startActivity().getDecorView()方法获取启动Activity的视图进行显示。jumpActivity为切换Activity的方法,每次进行页面跳转时必须经过该方法,该方法包含GC过程。通过测试分析统计出每次跳转页面GC的耗时在8ms到300毫秒之间,这里的GC时间会随着下个启动页面的工作量越多而耗时越长。我们采用异步处理一下,GC过程耗时在0~4ms之间,效果提升显著。
使用低配置的手机打开某APP进入首页时会黑屏8~·14秒,然后出现界面,通过代码分析发现首页同步初始化五个重量级的Fragment,导致系统运存缺乏,影响了后续的界面绘制渲染等逻辑。我们采用异步延迟加载进行处理一下,先对第一个主Fragment进行异步加载,主Fragment加载完毕后再异步加载第二个Fragment,接着第三个,最后第四个,这样就可以在短时间内合理分配运存,避免了黑屏的情况。
以上就是App运行速度分析以及初步优化方案,我们只有对App运行速度的硬件环境、开发的软件因素以及App运行交互的原理进行了解后才能制定相应的优化方法,方可对症下药。对于每一个可能影响用户体验的问题进行逐步优化,以先解决大问题、迫切问题为前提,以解决繁琐、细小的问题为原则进行深入优化,App体验才会越来越好。
web是在本地测试还是在服务器?
web是在服务器上的测试。
因为她俩这是最先的,其实是在本地测试,本地测试跑通了之后就需要放到服务器上面,这些服务器是跟真实的环境相匹配的,也就是模拟真实的环境的毕竟服务器的性能压力各方面都要比本地测试的好一些,或者是条件不一样,测试的结果就是不一样的。
上午八点做的为什么到晚上八点还没有出结果?
还没结果可能与查询途径、标本出错、数据上传、地区检测压力大等原因有关。
1.查询途径,需要明确自己的查询途径是否正确,部分采样点可能需要登录外检公司网站进行查询。
2.标本出错,虽然概率极低但也可能发生,如标本污染、丢失等。
3.数据上传,因为实验结果还需要工作人员从后台上传到公众网络,需要一定的过程,可能受限于服务器等问题,出现一定的延迟。
4.地区检测压力大,部分地区发生疫情之后,需要进行大面积的核酸检测,此时数据的量比较大,则会出现超过48小时未能查询到结果,建议耐心等待即可
软件测试工具都有哪些?
开源测试管理工具:Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具:Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具:Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator[TestDirector]:企业级测试管理工具,也是业界第一个基于Web的测试管理系统。
[Quality Center]:基于Web的测试管理工具,可以组织和管理应用程序测试流程的所有阶段,包括指定测试需求、计划测试、执行测试和跟踪缺陷。
[QuickTest Professional]:用于创建功能和回归测试。
[LoadRunner]:预测系统行为和性能的负载测试工具。
其他工具与自动化测试框架:Rational Functional Tester、Borland Silk系列工具、WinRunner、Robot等。国内免费软件测试工具有:AutoRunner和TestCenter。Winrunner 最主要的功能是自动重复执行某一固定的测试过程,它以脚本的形式记录下手工测试的一系列操作,在环境相同的情况下重放,检查其在相同的环境中有无异常的现象或与预期结果不符的地方。可以减少由于人为因素造成结果错误,同时也可以节省测试人员大量测试时间和精力来做别的事情。功能模块主要包括:GUI map、检查点、TSL 脚本编程、批量测试、数据驱动等几部分。
LoadRunner® 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,还能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。
QTP是一个B/S系统的自动化功能测试的利器,软件程序测试工具。Mercury的自动化功能测试软件QuickTest Professional ,可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。Mercury QuickTest Pro 是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。 Mercury QuickTest Pro为每一个重要软件应用和环境提供功能和回归测试自动化的行业最佳解决方案
TestDirector基于WEB的测试管理工具,他能够让你系统地控制整个测试过程,并创建整个测试工作流的框架和基础,使整个测试管理过程变得更为简单和有组织。他能够帮助你维护一个测试工程数据库,并且能够覆盖你的应用程序功能性的各个方面。T并且还为你提供了直观和有效的方式来计划和执行测试集、收集测试结果并分析数据。还专门提供了一个完善的缺陷跟踪系统。并可以同Mercury公司的测试工具、第三方或者自主开发的测试工具、需求和配置管理工具、建模工具的整合功能。你可以通过他进行需求定义、测试计划、测试执行和缺陷跟踪,即整个测试过程的各个阶段
SilkTest 是面向Web应用、Java应用和传统的C/S应用,进行自动化的功能测试和回归测试的工具。它提供了用于测试的创建和定制的工作流设置、测试计划和管理、直接的数据库访问及校验等功能,使用户能够高效率地进行软件自动化测试。
为提高测试效率,SilkTest提供多种手段来提高测试的自动化程度,包括:从测试脚本的生成、测试数据的组织、测试过程的自动化、测试结果的分析等方面。在测试脚本的生成过程中,SilkTest通过动态录制技术,录制用户的操作过程,快速生成测试脚本。在测试过程中,SilkTest还提供了独有的恢复系统(Recovery System),允许测试可在24×7×365全天候无人看管条件下运行。在测试过程中一些错误导致被测应用崩溃时,错误可被发现并记录下来,之后,被测应用可以被恢复到它原来的基本状态,以便进行下一个测试用例的测试
Selenium是为正在蓬勃发展的web应用开发的一套完整的测试系统。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。它的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上,包括IE、Mozilla Firefox、Chrome、Safari等。
TPT是针对嵌入式系统的基于模型的测试工具,特别是针对控制系统的软件功能测试。TPT支持所有的测试过程:包括测试建模、测试执行、测试评估以及测试报告的生成。
TPT软件由于首创地使用分时段测试(Time Partition Testing),使得控制系统的软件测试技术得以极大提升;同时由于TPT软件支持众多业内主流的工具平台和测试环境,能够更好地利用客户已有的投资,实现各种异构环境下的自动化测试;针对MATLAB/Simulink/Stateflow以及TargetLink,TPT提供了全方位的支持进行模型测试