系列文章目录
整理下个人对测试的一些想法和理解,个人之见。
文章目录
-
- 系列文章目录
- 整体思路
- 工具
-
- jmeter
- loadrunner
- gatling
- locust
- nmon
- 自动化
整体思路
- 性能测试是一个很大的概念,从不同角度、深度来看,同样一个测试可以有不同的称呼。
- 并发测试、压力测试、负载测试,从严格的定义上是指不同情况或者说不同层级的测试。以接口测试为例,并发测试是指在测试过程中使用并发手段发请请求;压力测试主要是在测试过程中逐渐增大请求压力(简单的说就是更多并发)直到系统报错所能承受的极限;负载测试是一般指在一定的压力下(特定的并发、事务数控制等),系统较长时间运行,获得其资源消耗情况的测试。就我个人而言,压力测试通常是通过并发测试实现的,负载测试又可以算是压力测试的一部分。实践中不怎么进行区分,一切以预期的结果数据为准。期望获得什么数据就叫什么测试,还是接口测试为例,比如登陆接口,期望数据是系统能支撑的同时登陆请求的个数(假设这个接口是简单的判断接口,速度非常快,代理服务器是nginx,设置了较小的连接数),我个人认为算并发测试,通过jmeter,创建测试脚本,配置一定的并发(要设置集合点)每个并发请求1次,多次测试中不断增大并发,直到接口无法正常响应,临界值就是系统能支撑的同时登陆请求的个数(能承受的并发极限)。
- 针对接口的性能的测试叫接口性能测试,针对整个系统的叫系统性能测试,针对存储的测试叫存储性能测试,命名看心情出,随时都能出一个新测试。
- 性能测试的指标相对较多,需要学习。以jmeter聚合报告为例,常见包括并发、延迟、95%line等、throughput、send、received。其他的好理解,重点是throuput,通常会叫吞吐,也作事务数(loadrunner中的Transactions),这个报告里,是sample(比如一个请求,或者定义多个请求为一个事务)总数/运行时间,不同地方叫法不太一样,或有细微差异,自行学习体会,项目组内部统一定义。
- 灵活制定测试计划,要依据对产品需求的理解制定,不要为了测试而测试,例如一个接口,生产环境的下甚至都没有调用,就不用测试了。
- 系统性能测试,不仅包含短时间大并发下的压力测试,也要考虑到7*24小时(服务器类型)运行的稳健性,还要考虑到随时间正常增长的诸如存储数据的可用容量。例如一个业务系统,会保留大量业务日志,一段时间后,业务日志可能超出硬盘容量,引起系统崩溃,又或者数据量超过系统处理极限,无法进行一些处理操作。
工具
jmeter
jmeter天下第一
易学易用,可视化配置,命令行执行,支持分布式,除http外支持大量协议,特别是存在大量插件可用,也可以自行编写基于java的sampler,灵活强大
jmeter有个搜集服务器信息的插件,可以和测试同时启动,非常方便:https://jmeter-plugins.org/wiki/JMXMon/
- 下载https://jmeter.apache.org/download_jmeter.cgi
- 安装jdk
- 直接可用
- 在可视化界面配置脚本
-
使用命令行模式执行脚本
使用自行百度或者参考:https://blog.csdn.net/u012810434/article/details/54380975
loadrunner
知道即可,现在为和Micro Focus旗下产品(hp的软件业务和Micro Focus合并了),可以说是标杆级的应用,功能强大、权威、重量级,但是正常情况下不会使用(也用不起),可能会遇上一些测试需求要求使用loadrunner(外行的典型就是指定工具而非指标)
换了好几个东家,中间有个V12版本是有社区版的,50并发限制
- 下载社区版https://www.microfocus.com/en-us/products/loadrunner-professional/download
- 新版没用过,自行百度学习,老的是三个组件:VUG(Virtual user generator)创建脚本,controller设置并发以及运行,analysis分析报告
gatling
使用Scala,支持大量并发
jmeter是java的,并发是通过线程实现的,会占用大量资源,一旦并发数增多只能尝试分布式运行,但就我个人经验,分布式不好使,主要是项目原因,总不能测试机比系统服务器还多。
scala可以简单的认为是java的扩展版(自行百度),并发实现上并非直接使用线程,远比基于java的jmeter轻量,节约资源。
- 下载:https://gatling.io/open-source
- 实话说也没怎么用过,自行百度
locust
基于python,一个框架
也没怎么用过,都说是python了,简单易上手,自定义开发方便,使用协程而非线程实现模拟并发,可以比jmeter单机模拟更多的并发
之前比较简陋,要啥没啥,需要二次开发。
并发能力高并不意味压测能力前,搜了下别人的测试,locust默认的http库存在性能问题,TPS不高(相较jmeter)。一般项目(单机部署)几十并发就够测出极限压力了。
- pip 安装
- 自行百度使用
nmon
linux用的系统监控软件,方便测试时使用,输出系统的资源使用情况
自动化
看项目需求,有些需求会是常态化7*24小压力下稳定性测试,主要指标是报错率和响应时间,以及系统资源消耗;
有些需求是需要搭配持续化构建测试。