性能测试

性能测试

第一章 性能测试整体认知

一.能力要求

1.熟悉linux操作系统,熟悉shell脚本

2.熟悉jvm调优,tomcat调优等基础策略

3.熟悉mysql,熟练掌握js,java,python等至少一门编程 语言

4.熟悉常见的压测工具,jmeter,loadrunner

5.能对应用进行监控

二.性能测试技能树

1.开发语言:java,应用广,沟通在一个频道上

2.操作系统:linux,熟悉基本操作和监控命令,会应用监控命令获取当前状态

3.数据库:mysql,能够监控状态,定位问题,了解运行原理

4.测试工具:流行多的jmeter,loadrunner

5.网络知识:网络宽带大小,数据大小传输(扩展http课程)

6.业务知识:了解哪里最需要性能测试,用户访问最多的业务

三.性能测试的目的

1.发现性能瓶颈

四.性能测试的分类

1.性能测试:是一个非常广泛的概念,包括的很多方面的测试,也可称之为非功能测试

2.自动化测试:属于功能测试的范围,由于其测试方法要求测试人员拥有一定的代码能力,所以被单独分成一个测试模块

3.具体分类(测试范围)

(1)负载测试:通过逐步加压的方法,达到既定的性能阀值的目标,阀值的设定应是小于等于某个值,如CPU使用率小于等于80%

(2)压力测试:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单粗暴的解释就是什么条件能把系统压崩溃

(3)并发测试:在同一时间内,多个虚拟用户同时访问同一模块,同一功能,通常的测试方法是设置集合点,同一时间测试同一动作

(4)容量测试:所有的测试都做完了,性能指标满足预期,未来业务可能飞速发展,预测未来.通常是指数据库层面的,目标是获取数据库的最佳容量的能力.又称之为容量预估.具体测试方法为在一定的并发用户,不同的基础数据量下,观察数据库的处理能力,即获取数据库的各项性能指标

(5)可靠性测试:又称之为稳定性测试或疲劳测试,是指系统在高压情况下,长时间的运行系统是否稳定,如CPU使用率在80%以上,7X24小时运行,系统是否稳定,一般会报OOM,内存回收不彻底

(6)异常测试:又称之为失败测试.是指系统框架方面的测试,如在负载均衡架构中,要测试宕机,节点挂掉等情况系统的反应

四.性能测试的工作流程

1.需求分析:熟悉项目主要是做什么,用户主要操作什么

2.性能指标制定:TPS之类的,要有个目标

3.脚本开发:工具也行

4.场景设置:用户经常进行哪些操作,作为测试重点

5.监控部署:把应用,数据库监控起来,看到运行状态

6.测试执行:开始跑压测

7.性能分析:根据监控分析

8.性能调优:发现问题调优,继续测试和分析调优

9.测试报告:满足了性能指标不再进行调优,可以具备上线

如果是敏捷开发的不断迭代,可以设置阶段性能指标

五.常见系统应用分层架构

1.显示层(view):web,andriod,ios,h5

2.逻辑控制层(controller):api

3.数据存储层(model):mysql,mongodb,redis...

自底向上分块分层测试

六.性能测试指标定义

1.事务:从客户端发起的一个或多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应,了解业务才能知道事务

2.TPS:Transaction per second :每秒钟系统处理得事务数

3.请求响应时间:从客户端发起的一个请求开始,到客户端接收到从服务端返回的响应.整个过程所耗费的时间

4.事务响应时间:事务可能是由一个或多个请求组成的,事务响应时间主要针对用户角度而言,如转账

5.并发定义:没有严格意义上的并发.并发总有先后,无论1毫秒或者1微秒,总有一个时差.所以并发讲的是一个时间范围内,比如1秒内,如同一操作秒杀,或者不同操作,比如商品浏览

6.并发用户数:同一单位时间内对系统发起请求的用户数量

7.吞吐量:一次性能测试过程中网络上传输的数据量的总和,带宽占用量

8.吞吐率:单位时间内网络上传输的数据量 吞吐率=吞吐量/传输时间

9.点击率:每秒钟用户向服务器提交的请求数,这个指标是web应用程序(也包含手机端)特有的一个指标,可以想象每秒钟用户总共在页面上进行多次点击动作,一次点击可能向服务器发送了多个请求

10.资源使用率:对不同的系统资源的使用情况,如CPU,内存,io,针对硬件

七.性能测试的需求分析

1.分析的目的:

明确测试指标

明确测试场景

2.新系统:

同行业比较

业务预期,跟市场沟通

3.老系统

对比以往的用户使用行为以及用户量

八.性能测试工具

1.常用工具

loadrunner:只能在windows上安装图形化可视工具

jmeter:运行在jvm之上,跨平台

 

第二章 测试工具篇

一.初识jmeter

1.jmeter的组成:

测试计划->

线程组:虚拟用户数

断言:预期结果和实际结果进行比对,不推荐用

定时器:停顿多长时间等

监听器:调试自己的脚本,对资源进行监控

配置元件:基本的配置项

后置处理器:并发完成之后做些什么,后一个请求需要前一个请求结果可以实现

前置处理器:在请求之前做些什么

逻辑控制器:当什么条件满足时,要做什么,基于线程之下工作

sampler:放请求的,请求控制器,例如http

 

二.jmeter实现多并发

1.线程组:负载发生器,用多线程或多进程的方式来模拟用户的使用行为.jmeter是以线程的方式来进行模拟用户的并发访问的

2.配置元件:用来提供一些配置相关的信息,如http请求头,cookie管理,提供参数化数据.还可以进行用户自定义变量等,用以定义常量等

第三章 linux服务器监控性能测试

一.服务器性能测试范围

1.测试目的:发现服务器的性能瓶颈.配置的不同能够承载的最大任务数不同,能够承载的压力也不同

2.测试范围及性能指标

CPU:相当于工人,计算

内存:存储,临时存储

磁盘:持久化

网络:带宽,传输速度

版本:服务器版本,很难保证测试环境和生产环境配置相同,保证软件版本相同,系统版本相同,不一致的环境会造成很大性能差距

3.测试与生产的环境配置不同

通过多次压测来计算性能损耗

4.性能损耗的计算方式

横轴:服务器数量,服务器越多性能损耗越大

相同的配置增加服务器计算性能损耗

 

二.进程与线程

1.进程:是可以独立运行的.具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位,例如QQ

2.线程:线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能够独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源.一个线程可以创建和撤销另一个线程

3.定义与区别

一个线程只能属于一个进程,而一个进程可以拥有多个线程

线程是进程工作的最小单位,车间里的工人

一个进程会分配一个车地址空间,进程与进程之间不共享地址空间,即不共享内存

同一个进程下的不同的多个线程,共享父进程的地址空间

线程在执行过程中,需要协作同步.不同进程的线程间要利用消息通信的办法实现同步,利用外部中间件队列

线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

4.进程优点

每个进程相互独立,不影响主程序的稳定性,子进程崩溃不影响其他进程

通过增加CPU,就可扩充性能

可以尽量减少线程加锁与解锁的影响,极大的提高了性能

逻辑控制复杂,需要和主程序交互

多进程调度开销大

5.线程优点

程序逻辑和控制方式简单

所有线程可以直接共享内存和变量等

线程方式消耗的总资源比进程方式少

6.线程缺点

每个线程与主程序共享地址空间,最大内存地址受限

线程之间的同步和加锁不易控制

一个线程的崩溃可能影响到整个程序的稳定性

三.linux命令

1.帮助命令: man xxx xxx是命令名字,查看命令的帮助

2.实时监控 top

-h 帮助

-p 监控指定的进程.当监控多个进程时,进程ID以逗号隔开

top任务区命令:

M:按内存使用率排序

P:按CPU使用率排序

z:彩色/黑白显示

top中的load average:系统的运行队列的平均利用率,也可以认为是可运行进程的平均数.三个值分别表示在最后的1分钟,5分钟,15分钟的平均负载值

在单核时1表示满负荷状态,多核中1*cpu核数

3.vmstat

可以监控操作系统的进程状态,内存,虚拟内存,磁盘IO,cpu的信息

vmstat 时间间隔 显示多少次

4.free -h

显示M

5.mpstat

最大特点可以查看多核心cpu中每个计算核心的统计数据

-P 0到CPU个数-1

相邻的两次采样的间隔时间

安装:yum install sysstat

mpstat -P ALL 1 100

%iowait列CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的

可以看哪些核心满负荷,哪些空闲

6.网络

netstat:用于显示本机网络连接,运行端口,路由表等信息

netstat -ntlp 查看端口是否被监听,活着没

netstat -i 看网络监听网络传输的大小和有没有传输错误

主要看err drp ovr失败的

7.磁盘

iostat

tps:一次IO请求

kb_read/s:每秒读的数据大小

kbwrtn/s:每秒写

kb_read:读总数

kb_wrtn:写总数

iostat -x:

重点:rkb/s wkb/s 读写每秒大小 %util繁忙程度 100%非常繁忙

8.万能命令

sar:系统活动情况报告,最全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告

性能监控范围:

文件的读写情况,系统调用使用情况,IO,CPU效率,内存使用状况,进程活动及IPC有关的活动等

-A:所有报告的总和

-u:CPU利用率

-o 文件名:输出到文件

1 10:间隔1s打印10次

-r:显示系统内存使用情况

-b:缓冲区使用情况

9.进程追踪

strace:是一个集诊断,调试,统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者了解应用工作过程的目的

-p:跟踪指定的进程

监控某一个进程各方面都正常,没办法了最后可以用strace命令查看

四.linux监控工具

一.nmon

是一种在linux操作系统上广泛使用的监控与分析工具,nmon锁记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果

二.nmon_analyzer

作用就是分析nmon数据采集后的结果,需要借助excel的宏,wps默认没有安装宏需要安装插件

重点sheet:

sys_summ:系统汇总页,包含cpu占有率变化情况,磁盘IOS的变化情况等信息

AAA:操作系统以及nmon本身的一些信息

cpunn:显示执行时间内CPU占用情况

cpu_all:所有CPU概述,显示所有cpu平均占用情况

cpu_summ:每一个cpu在执行时间内的占用情况

DGBUSY:磁盘组每个hdisk设备平均占用情况

DGREAD:每个磁盘组的平均读情况

DGSIZE:每个磁盘组的平均读写情况

NET:显示系统中每个网络适配器的数据传输速率

等等,能够带来比较便利的工具

三.linux定时任务

配合监控使用

1.crontab:linux系统是由cron这个系统服务来控制的,linux上肯多的计划性工作.使用者也可以设置任务,所以linux系统提供了使用者控制计划任务的命令

2.crontab的启动

/sbin/service crond status 查看定时任务的服务是否启动

start/stop/restart 启动服务/停止服务/重启服务

reload重新载入配置

3.crontab服务权限

crontab的权限存储在cron.allow和cron.deny文件中,如果没有可在etc目录下创建

4.使用场景说明

如果两个文件都不存在,那么只允许root用户使用crontab

5.使用

crontab -e

6.时间单位说明

1列分钟,2列小时,3列日期,4列月份,5列星期,6列运行的命令,*代表取值范围的所有值,/代表每,-代表从x到x,逗号,代表隔开的不同数字

第四章 数据驱动性能测试

一.定义:

从数据文件中读取测试数据,驱动测试过程的一种测试方法

数据驱动可以理解为更高级的参数化

二.电商业务模型

 

三.jmeter中如何做数据驱动

控制方式:

参数化

逻辑控制器

可以把测试数据写到数据库,jmeter连接数据库读取数据,用循环控制器遍历数据用条件控制器控制不同的接口测试

第五章 数据库架构设计

一.数据库性能测试的目的与范围

1.性能测试目的

发现数据库相关的所有性能瓶颈

2.sql语句-慢查询等

3.资源使用率

4.数据库架构的合理性

5.数据库的性能指标

二.数据库的常用架构

1.一主多从

优点:读写分离,分担了单台服务器的压力情况,因为读都分摊在多台服务器上

缺点:主从延时,

2.双机热备

优点:查询实时性

缺点:A挂了之后,B数据库写入的A启动的时候是没有的,需要手动同步

场景:

读的操作多:一主多从比较好

写入数据比较多:双机热备比较好

三.数据库主从同步的工作原理

1.主从同步原理:

master将改变记录到二进制日志中(binary log)中

slave将master的binary log events拷贝到它的中继日志(relay log)

slave重做中继日志中的事件,将改变反应它自己的数据

四.数据库分库分表的设计方法

1.拆分原因:

单表或库数量太大

硬件不能升级或无法升级

2.业务拆分

用户,商品,订单...

3.垂直拆分

商品表:

表大了,可以按种类拆分成不同表

4.水平拆分

一致性哈希算法,取模,拆分成一样的表,取模几就可以拆分成几个表

第六章 mysql性能测试

一.mysql数据库的介绍

1.mariadb:

mysql之父widenius创建,目标在于替换现有mysql

兼容mysql,对于开发者来说感知不到变化

免费开源

二.监控指标

1.qps:每秒查询数量,查询总数/秒数

show global status like 'Question%'

2.TPS:

TPS=(Com_commit+Com_rollback)/seconds

show global status like 'Com_commit'

3.线程连接数

使用最大的连接数:show global status like 'Max_used_connections'

线程连接数:show global status like 'Threads%' 有多少线程连接数据库

设置最大连接数:show variables like 'max_connections'

4.query cache

查询缓存用于缓存select查询结果

当下次接受到相同的查询请求时,不再执行实际查询处理而直接返回结果

适用于大量查询,很少改变表中数据

show variables like '%query_cache%';

5.query cache命中率

show status like 'Qcache%'

命中率百度一下

6.锁定状态

show global status like '%lock%'

Table_locks_waited/Table_locks_immediate的值越大代表表锁的阻塞越严重

如果Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,

因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些

Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的

7.主从延时

查询主从延时时间:show slave status

三.慢查询工作原理及操作

定义:执行速度超过定义的时间的查询

不同的系统定义不同的慢查询指标

2.配置

/etc/my.cnf 在mysqld中添加

开启慢查询:slow_query_log=1

慢查询的时长:long_query_time=1

slow_query_log_file=/data/mysql/slow.log 目录要有权限

log_queries_not_using_indexs=1 没有索引的查询也记录到日志中

四.sql的分析与调优方法

mysqldumpslow命令

--获取返回记录最多的3个sql

mysqldumpslow -s r -t 3

--获取访问次数最多的3个sql

mysqldumpslow -s c -t 10 slow.log

--按照时间排序,前10条包含left join查询语句的sql

mysqldumpslow -s t -t 10 -g "left join" slow.log

 

五.索引的概念及作用

略,可看sql优化篇

六.索引的工作原理与设计规范

单张表中索引数量不超过5个

单个索引中字段数不超过5个

不适用更新频繁地列作为主键

合理创建组合索引(避免冗余)

不适用%前导的查询,无法使用索引

不适用反向查询

选择越小的数据类型越好

单独的order by用不了索引

连接条件on上加索引

七.存储引擎

myisam:

优点:读的性能比Innodb高很多,索引与数据分开,使用了压缩,从而提高了内存使用率

缺点:不支持事务,写入数据时,直接锁表,写入会慢

innodb:

优点:支持事务,支持外键,支持行级锁

缺点:不支持fulltext索引(全文索引)

行级锁并不绝对,当不确定扫描范围时,锁全表

索引与数据时紧密捆绑的,没有使用压缩导致体积庞大

八.实时监控

1.orzdba

九.集群监控方案

1.天兔lepus:可视化监控

十.性能测试用例准备

1.jmeter测试mysql

创建jdbc connection

创建jdbc request

写入的时候,querytype设置为: Update Statement

十一.Jmeter开发mysql性能测试脚本

1.从mybatis中拿出sql脚本

十二.执行测试

设置好线程组

做好监控,把慢查询找出来

异常类测试,主从的主库挂了能不能正常切换,观察主从延时的问题

数据量达到一定时的速率

第七章 多协议接口性能测试

一.接口性能测试的目标及范围

发现应用程序的性能瓶颈

发现数据库的性能瓶颈

二.常见接口协议

1.http超文本传输协议

2.https安全超文本传输协议

3.ftp 文件传输协议

4.tcp网络控制协议

5.ip互联网协议

6.udp用户数据协议

三.https协议

默认端口:443 http默认是80

安全性的ssl加密传输协议

以安全为目标的http协议通道,可以理解为http协议的安全版

四.ftp协议

1.使用两个并行tcp连接为控制连接和数据连接

控制连接负责两个主机之间传输控制信息,如用户表示,口令,发送的命令,运行端口为21

数据连接用于实际传输一个文件,运行端口为20

2.jmeter添加ftp请求可测试ftp

五.性能测试用例设计

1.几要素

被测系统及版本

测试数据

测试场景(包含异常场景)

预期结果

预期性能指标

六.性能测试报告

被测系统

版本号

运行环境,配置

测试场景(并发定义)

预期性能指标

实际结果

测试结论

测试人员

如果不通过说明瓶颈

如通过说明最大性能指标

容量规划,未来多长时间内系统可以撑得住

第八章 jmeter扩展组件开发的意义

一.待看

第九章 大数据测试

一.待看

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值