简介
1.J2EE性能测试
本书的方法用于一下两种情况:
ü
性能测试一个完整的应用程序
ü
性能设计----分析J2EE API不同方面的性能代价,以及某中设计决策对总体性能的影响。
2.性能
开发的应用程序可以分为两类:
交互式的:响应时间为关键,两个度量标准,同时发生的用户数量和响应时间。可以用这样的语句来描述:“该应用程序能够以1000毫秒的最大响应时间处理750个同时发生的活跃用户;峰值时刻有800用户,响应时间下降7%
”
。
批处理或后端应用程序:吞吐量来描述。事务定义要一致,在研究servlet时,我们定义事务处理为一个请求,因此吞吐量是servlet在一个设定的时间周期内(1秒)执行的同样请求的数量。当分析JMS时,吞吐量就是message。
3.
测试方法:
基准测试(Benchmarking),在各种不同的环境下和工作负载下记录应用程序性能的过程。
轮廓(Profiling),这涉及到精确地调查应用程序将大部分计算周期花费在什么地方,以及应用程序效果和高效的使用系统资源。主要目标在与突出系统中的潜在的性能瓶颈。
调整(Tuning),测试、基准测试和轮廓反馈给调整过程,然后优化应用程序。
另外,我们测试J2EE应用程序,可以从J2EE应用程序的各个组件开始,其各个组件包括数据库、JVM、操作系统、TCP/IP堆栈、web服务器、网络等等
第一章测试方法
1.方法概述
a.定义性能标准
为具体应用程序定义相关的性能度量标准,然后针对该度量标准设定一个现实的目标。建议清晰并没有歧义地定义性能度量标准,按照明确定义的要求测试。
b.模拟应用程序使用
这个步骤的关键在与测试脚本的定义。
定义测试脚本:关键在于怎么样去更好的编写测试脚本,这需要实践的经验。
“
成功的性能测试关键在于理解应用程序将如何被使用
”,所以
测试数据,所提供的关键的用户数据必须动态生成
实际的使用模式:
思考时间(休眠时间):指在执行测试脚本中每个请求之间间隔的时间。思考时间的两种基本策略:使用真实的时间思考;使用零思考时间。使用真实的时间思考,譬如用户输入要查询的电话是7秒种,那么我们说真实时间为7秒,但时间上是有偏差的,不能通过这样来提高系统的用户的并发数。这就是,时间偏差,考虑这些,通过适当降低时间来,譬如5秒,达到更加真实。当我们不清楚真实思考的时间的时候,我们可以采用零思考时间。
2.采样方法
不同的工具有不同的采样方法,The Grinder采用两种:
周期方法,周期定义为一个模拟用户对一个测试脚本的完整执行。样本多才有意义。
快照方法,快照方法代表一种基于时间的数据视图。
数据排除,排除一些明显不稳定数据,譬如初始请求的时间。排除这些,样本的数据会更加准确。
3.性能统计数字
响应时间,客户端从发送请求的那一刻起收到应用程序响应的最后一个字节时止而不得不等待的时间长度。
“
10秒是让用户的注意力集中在应用程序对话框的极限
”
《Usablility Engneering》
“
用户在等待8秒就点到别的地方去了
”
《Worth the wait ?》
响应时间的组成:处理时间,传输时间,绘制时间。我们在碰到响应时间的瓶劲的时候,可以从起组成来缩短响应时间。
同时我们明白,
我们在测试环境中几乎不可能模拟Internet的行为,所以只能最大可能接近的模拟。
平均响应时间(ART),一个请求各个响应时间样本的平均值。
总体平均响应时间(Aggregate Average Response Time,AART): 测试脚本中每个单独测试的平均响应时间的和除以该测试脚本的请求数。
最大平均响应时间(MART),不同请求的最大响应时间的平均值。
吞吐量,用TPS描述。
4.评价测试结果的准确性
样本质量,样本数据的准确性。
公式:质量 = 标准方差/算术平均
,
可以接受的质量数位于0.06到0.2的范围内。当然,标准可以自定义。
5.性能测试
测试的过程步骤:
a.
预备测试
预备测试考虑基准情况,测试环境的最佳化。
b.正式测试:单实例测试,持久测试,体系结构测试
单实例压力测试:应用程序运行在单一应用服务器实例,逐渐增加工作负载,直到操作性能标准。
持久测试:测试应用程序在较长时间内完成的性能情况。
体系结构测试:使用应用程序服务器群部署该应用程序。
------------------------------------------------------
参考资料:
《J2EE性能测试》