随着计算机网络的发展,我们现在的日常生活当中充满了各种各样的软件。比如,在聊天的时候,我们选择用微信、qq等聊天工具;购物的时候,我们在淘宝、京东以及拼多多等平台上;在休息的时候,我们玩游戏、看视频等。我们在使用软件的时候,都是希望它能够很好,例如功能多、运行速度快等,这样我们就需要注意软件的性能了,但其实在软件开发的前期,部分人们是不怎么注意软件性能的测试的,这样导致后期出问题的时候,会非常的麻烦。所以在开发的过程中,是要注意性能测试的,今天我们就先了解下Java性能测试的一些人们不了解的原则。

PerformanceRunner(性能测试工具)

第一个原则

就是性能测试只有在实际项目中实施才是有意义的,这样才使得测试工作具有针对性,而且目标会更加明确。这个原则中有三个类别的基准可以指导开发人员度量性能测试的结果,但是每一种方法都有它的优点和劣势。

微观基准,可以理解为在某一个方法或某一个组件中进行的单元性能测试。比如检测一个线程同步和一个非线程同步的方法运行时所需要的时间。或者对比创建一个单独线程和使用一个线程池的性能开销。或者对比执行一个算法中的某一个迭代过程所需要的时间。当我们遇到这些情况时,我们常常会选择做一个方法层面的性能测试。这些情况的性能测试,都可以尝试使用微观基准的方法进行性能测试。微观基准看似编写起来简单快捷,但是编写能够准确反映性能问题的代码并非一件易事。

宏观基准,当我们测量应用程序性能时,应当纵览整个系统,影响应用程序性能的原因可能是多方面的,不能片面的认为性能瓶颈只会在程序本身上。

折衷基准,相比微观基准和宏观基准,一个单独功能模块的性能测试,或者一系列特定操作的性能测试被称为折衷基准。它是介于微观基准和宏观基准之间的折衷方案。基于微观基准测试的正确性是较难把握的,性能瓶颈的判断绝不能仅仅依赖于此。如果我们要使用微观基准作为性能的测量方法,那么不妨在此之前先尝试基于宏观基准的测试。它可以帮助我们了解系统以及代码是如何工作的,从而形成一个系统整体逻辑结构图。接下来可以考虑基于折衷基准的测试,来真正发现潜在的性能瓶颈。需要明确的是折衷基准的测试方法并不是完整应用程序测试的替代方法,更多情况下我们认为它更适用于一个功能模块的自动测试。

第二个原则

性能测试中的第二个重要的原则是引入多样的测量方法来分析程序的性能。

批量执行所用时间的测量方法(耗时法),这是种简单而快速有效的方法,通过测量完成特定任务所消耗的时间来测量整体性能。但是需要特别注意,假如所测试的应用程序中使用缓存数据技术来为了获得更好的性能表现时,多次循环使用该方法可能无法完全反应性能问题。那么可以尝试在初始状态开始时应用耗时法做一次性能的评估,然后当缓存建立后,再次尝试此方法。

吞吐量的测量方法,在一段时间内考察完成任务的数量的能力,被称为吞吐量测量方法。在测试客户服务器的应用程序时,吞吐量的测量意味着客户端发送请求到服务器是没有任何延迟的,当客户端接收到响应后,应当立即发出新的请求,直到最终结束,统计客户端完成任务的总数。这种相对理想的测试方法通常称之为“Zero-think-time”。

响应时间的测量方法,响应时间的测量方法是指客户端发出一个请求后直到接收到服务器的响应返回后的时间消耗。响应时间测量方法不同于吞吐量测量方法,在响应时间测试过程中,客户端线程可能会在操作的过程中某一时刻休眠,这就引出“think- time”这个关键词,当“think- time”被引入到测试过程中,也就是意味着待处理任务量是固定的,测量的是服务器响应请求的速率是怎样的。大多数情况下,响应时间的测量方法用来模拟用户真实操作,从而测量应用程序的性能。

第三个原则

性能测试的第三个原则是理解测试结果如何随时间改变,即使每一次测试使用同样的数据,可能获得的结果也是不同的。一些客观因素,比如后台运行的进程,网络的负载情况,这些都可能带来测试结果的不同,所以在测试过程中存在着一些随机性的因素。

第四个原则

就是工程师应该视性能测试是整个开发过程必要的部分,尽早进行性能测试,经常进行性能的测试,是一个好的工程师应该做到的。在代码提交到代码库之前,就应当做性能测试,因为性能问题也会导致回归测试失败。所以提早发现问题会提高整个项目的质量,减小交付的风险性。

文章到这里就结束了,大家现在应该了解测试的一些知识了。最后的时候,小编给大家推荐一个测试工具,这就是PerformanceRunner (性能测试工具),这个工具提供丰富的脚本命令,支持各种检查点、参数化,采用JAVA语法易于上手,可JAVA扩展,根据UV分配参数数据,实现大数据量和特定需求和场景的测试。