性能测试和功能测试是测试工作中两个不同的方面,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。但两者目标相同,它们的最终目的都是为了提高软件质量,以更好地满足用户需求。
性能测试为了模拟验证测试的系统是否满足程序大量并发请求时,可能会导致源被占满,处理器不能即时处理进程时会出现进程排队的现象,如果出现持续排队的现象就说明CPU当前处于繁忙状态,不能及时响应用户请求。同时,性能测试是一个测试、监控、分析并调优的过程,所以在性能测试过程中,对服务器资源的监控是必不可少的。
CPU使用率:进程消耗的CPU资源,一般不超过75%。
内存使用率:系统处理任务占用的内存资源,一般不超过75%。
JMeterPlugins-Standard-1.4.0
ServerAgent-2.2.3
Apache JMeter 5.2
Xshell 7
1) 解压JMeterPlugins-Standard-1.4.0.zip,把 “\lib\ext\JMeterPlugins-Standard.jar”包,
放到JMeter目录的“\lib\ext”中;
2) 重新启动JMeter在线程组→添加→监听器,可以看到监听器中比之前增加了jp@gc开头的多个组件,见下图。
3) 选择“jp@gc-PerfMon Metrics Collector”并添加,这个组件是用于监控资源的控制台。
“ServerAgent-2.2.3”是我们需要在被监控的服务器运行,用于在JMeter中监控的服务端程序,且同时支持
Windows、Linux系统。
在Windows系统的服务器中,我们直接运行“startAgent.bat”文件即可,见下图;
在Linux环境下则需要运行“startAgent.sh”先通过命令“chmod 777 startAgent.sh ”提升可执行文件权限
后“./startAgent.sh”来执行Agent服务,见下图。
进入到“jp@gc-PerfMon Metrics Collector”中,在“Servers to Monitor”窗口中添加服务器IP、端口号(默认:4444),分别选择要监控的“CPU”、“Memory”等,在下一个窗口“所有数据写入一个文件”中,选择路径、并创建存储监控结果的文件,(注意:文件名默认为当前脚本名称,一定要修改名称及后缀否则会覆盖掉当前脚本。)
过程中遇到了运行报错的情况,查看报错指向了JDK1.8.0版本的不兼容,经过检查发现是“PerfMon”组件默认版本为2.0,在JMeter Plugins Manager中卸载PerfMon并重新安装2.1版本后解决。具体操作方式为:取消勾选→应用→切换到未安装选项卡→勾选“PerfMon”→选择2.1版本→应用,见下图。
分享一些性能测试的设计方案,LoadRunner工具性能测试建模0513.pdf
1.性能测试建模
1. 系统用户模型
系统使用的用户群体大致分为系统总用户、在线用户、并发用户,其中系统总用
户为所有可能用到该系统的用户;在线用户为与系统保持连接关系并且 session 连接 未断
的用户;并发用户为同一时间向系统发出请求的用户,我们通过实际调研通过对 系统总用
户数及在线用户数的收集对并发用户数进行估算,力求与真实情况相接近。
**测试过程中的系统用户模型:**系统存在 200 名用户访问的可能。本次性能测试用
户模型均转化为并发用户,具体并发用户数情况参见本文档 1.3.1 测试要求中描述。
2. 典型业务模型
性能测试中不可进行穷举测试,对系统整体性能的考核可针对典型业务即大用户量访
问、高压力、高风险的业务进行测试,从而评估系统性能整体表现。测试过程中的典型业
务模型:采购计划编制、采购计划查询、综合查询统计。
3. 用户接入模型
指用户在访问系统时,以什么样的方式或者带宽来访问系统。测试过程中可通过 测
试工具或者相关设备对用户接入模式进行仿真。对用户接入行为的仿真模型我们称 为用
户接入模型。
**测试过程中的用户接入模型:**通过对本次测试内容分析,测试应在 1000M 环境下 执
行,且在测试环境中执行,带宽不做重点考虑。
4. 思考时间模型
指在测试过程中模拟人的真实操作行为,比如一个人访问应用系统的过程中,不 可
能是一直跟服务器进行交互,一定存在浏览、填写表单、阅读说明等行为,因此在 性能
测试过程中,需要通过一种机制来模拟这种行为,那么这种行为的模拟方式就是 建立
“思考时间模型”,通过测试脚本程序上的等待来完成用户以上行为的仿真。
测试过程中的思考时间模型: 信息采集业务思考时间为:3 秒
随机 警情处理业务思考时间为:3 秒随机 动态监控业务思考
时间为:5 秒随机
5. 数据模型 旨在为测试过程中模拟系统真实的业务数据,而人为在
系统中添加预埋数据及测
试数据。
6. 浏览器模型 浏览器模型:是指在测试过程中模拟用户浏览器的类型、操作模式、
缓存处理、
非 HTML 资源处理等配置方式的一个模型。浏览器模型的建立可以真实的仿真用户基于 客
户端访问系统的情况。
测试过程中的浏览器模型:浏览器类型仿真:IE6.0、IE8.0,不下载非 HTML 资 源,不清除浏览器缓存。
7. 性能监控模型
应用属性服务器
对象 |
度量
|
描述
|
Memory
|
Free(KB)
|
可用物理内存
|
Swap(KB)
|
已使用的虚拟内存数量。在 Linux 中,该值 被识别为 swpd。
|
|
(Page)si
|
每秒钟从磁盘交换到内存的数量。 在 Linux 中 该值被放在 swap 区中。
|
|
Cache(KB)
|
文件系统缓存
|
|
Process
|
%CPU Usage
|
被处理器消耗的处理器时间数量。如果是专 用于某种特定应用(例如数据库服务器或者 应用服务器)则可应用相关进程的%Process Time 进行衡量,此时可接受的上线一般不超 过 85%。
|
Page Fault count
|
该进程产生的页面失效次数。可以用该值与 系统的页面失效次数进行对比,从而判断该 进程对页面失效的影响。
|
|
R esident size(KB)
|
进程保留的使用内存量。该值等于进程的代 码使用内存+进程的数据使用内存。如果该值 在测试过程中持续增加,很可能意味着发生 了内存泄露。
|
|
Processor
|
%Idle Time
|
%Idle Time 描述的是CPU总的空闲时间。 如果该值低于10%,表明 CPU 瓶颈。可以 考虑增加一个处理器或换一个更快的处理 器。
|
%User Time
|
非内核操作消耗的 CPU 时间。一般来说,如 果系统中使用大量的算法或复杂的计算操 作,该值会比较大。
|
|
%Kernel Time
|
CPU 内核时间是在特权模式下处理线程执行 代码所花时间的百分比。
|
|
%IOwait Time
|
CPU 消耗在等待 I/O 处理上的时间,此值需要 结合 I/O 计数器进行考虑。
|
|
PhysicalD isk
|
Percent of time the disk is busy
|
指所选磁盘驱动器忙于为读或写入请求提供 服务所用的时间百分比。
|
Average number of transactions actively being serviced
|
指读取或写入请求(为所选磁盘在实例间隔 中队列的)的平均数。该值应不超过磁盘数的 1.5-2 倍。要提高性能,可增加磁盘。 在 iostat 的结果中,该值为 actv。
|
|
Average number of transactions actively waiting for service
|
指读取(写入)请求(队列)的平均数。 在 iostat 的结果中该值显示为 wait。
|
|
Read(Writes) per sec
|
物理磁盘上每秒钟读、写磁盘次数。两者相 加,应该小于磁盘设备的最大容量。 在 iostat 的结果中,该值显示为 r/s 和 w/s。
|
|
Average service time active transactions in milliseconds
|
指以毫秒计算的在磁盘上读取和写入数据的 所需平均时间。在 iostat 的结果中,该值显 示为 asvc_t。
|
|
The number of disk operations per second
|
显示每个磁盘每秒的被操作次数。
|
|
System
|
%User Time
|
系统上所有处理器执行非内核操作的平均时 间的百分比,该值反映了用于有用作业上的 时间比率。
|
CPU context switches
|
CPU 上下文切换。
|
|
Network
|
Bytes Received/sec
|
网络每秒接收的字节数。
|
Bytes Sent/sec
|
网络每秒发送的字节数。
|
|
Bytes Total/sec
|
网络每秒总和的字节数。
|
|
Current Bandwidth
|
当前的带宽数值。
|
对象 |
度量
|
描述
|
System
|
Total Processor Time
|
数据库进程占用的 CPU 时间。在不同的数据库 中以不同的名称表示。 在 Oracle 中该计数器 被称为:CPU used by this Session。
|
User Connections
|
当前用户连接数。数据库服务器一般都有用户 连接限制,当应用不合理时,有可能出现连接 数超过限制的情况,导致一些异常发生。
|
|
Memory
|
Cache Hit Ratio
|
缓存命中率。当该值比较小,而数据库比较繁 忙时,可能需要调整缓存的大小。
|
PGA Memory/UGA Memory(仅用于 Oracle)
|
Oracle 进程的内存占用情况。
|
|
Lock
|
Average Wait Time
|
锁平均等待时间
|
Lock Requests/sec
|
每秒钟锁请求数
|
|
Number of Deadlocks /sec
|
每秒钟产生死锁的数量。当该计数器值较大 时,需要查找产生数据库死锁的原因。
|
|
Throughput
|
Throughput
|
指单位时间内可以成功传输的数据数量。
|
I/O
|
Outstanding Reads (Writes/s)
|
被挂起的物理读写。当计数器比较大时,可能 是 CPU、磁盘 I/O 产生瓶颈,可以通过服务器 的 CPU 和 I/O 分析了解进一步的原因。
|
Page Reads /sec
|
每秒钟页面读写次数
|
|
Transactions/Sec
|
每秒钟产生事务数。
|
|
Iops
|
每秒进行读写(I/O)操作的次数。
|
|
Network
|
Bytes Received/sec
|
网络每秒接收的字节数。
|
Bytes Sent/sec
|
网络每秒发送的字节数。
|
|
Bytes Total/sec
|
网络每秒总和的字节数。
|
|
Current Bandwidth
|
当前的带宽数值。
|