对于下一代测试工具的思考。 在以往的性能测试工作中,一直以来使用的测试工具框架都是基于请求-响应模型来进行开发的, 该模型是指脚本通过模拟HTTP请求并接收服务器的响应来针对被测对象的响应时间等考评指标来进行考评。 目前主流的性能测试工具都产生于瘦客户端的时代,而且由于基于的HTTP请求-响应模型本身是很标准的模型, 因此工具更容易做到普适性。 但是很多时候我们测试的结果看着很漂亮,但是实际用户在使用的时候却感觉系统性能糟透了, 抛开场景本身在抽象后与实际场景的差异,这种测试时间和体验时间之间的较大差距就是基于请求-响应模型进行模拟时造成的时间失真。 而随着胖客户端的应用越来越广泛,基于请求-响应模型的性能测试结果与实际用户体验时间比较上的失真也变的越来越严重。 因此,一直对于此类场景测试中只能观测到服务器端的性能表现耿耿于怀, 脑海中也自己大概构思过一个基于事件-消息的测试模型。该模型主要以用户体验时间作为考评指标,即将前端作为测试对象。 在事件-消息的测试模型中,用户的每一个原子操作都是由一个或者多个事件组成的。 用户在真实世界的原子操作有两类:定位当前焦点和点击。 定位当前焦点:即找到要操作的对象;每一类对象都是一个事件; 点击:左键单击、右键单击、左键双击等每一个都是一个事件; 定位当前焦点的方法,类似于功能自动化测试,似乎又倒退回了UI的方式。 一旦涉及到UI,我们就容易联想到基于浏览器查找对象的各种效率低,说到这里,也就该正式介绍一下phantomjs。 PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API。 它的渲染引擎就是QtWebkit,JS引擎是JavascriptCore(不是V8),大致上可以当作是一个没有GUI的Safari浏览器。 由于其不需要浏览器界面,因此,在执行效率上差不多能有一个量级的提升; 该效率的提升使的以前一直被诟病的基于UI模拟的自动化效率问题得到很大程序的解决。 从而在保证效率的同时,也可以让我们从前端体验出发,获取实际用户体验的时间。 另外,对于事件-消息的测试模型,测试的时候也不应该所有并发用户都一股脑的全都基于UI模拟, 这没什么意义,因为现实中不存在所有用户从一个客户端去操作, 所以只需要在原来请求-响应测试模型的基础上,增加1个事件-消息模型的用户就可以了。 这样既对服务器端的压力情况进行了模拟和观测,又兼顾了客户端的实际用户体验。 至于对用户体验时间的分解,我们可以使用Navigation Timing API获取到处理的每一个步骤的响应时间。
转载于:https://blog.51cto.com/1152313/1766642