天天看点

个人对测试的理解--性能测试

系列文章目录

整理下个人对测试的一些想法和理解,个人之见。

文章目录

    • 系列文章目录
    • 整体思路
    • 工具
      • jmeter
      • loadrunner
      • gatling
      • locust
      • nmon
    • 自动化

整体思路

  1. 性能测试是一个很大的概念,从不同角度、深度来看,同样一个测试可以有不同的称呼。
  2. 并发测试、压力测试、负载测试,从严格的定义上是指不同情况或者说不同层级的测试。以接口测试为例,并发测试是指在测试过程中使用并发手段发请请求;压力测试主要是在测试过程中逐渐增大请求压力(简单的说就是更多并发)直到系统报错所能承受的极限;负载测试是一般指在一定的压力下(特定的并发、事务数控制等),系统较长时间运行,获得其资源消耗情况的测试。就我个人而言,压力测试通常是通过并发测试实现的,负载测试又可以算是压力测试的一部分。实践中不怎么进行区分,一切以预期的结果数据为准。期望获得什么数据就叫什么测试,还是接口测试为例,比如登陆接口,期望数据是系统能支撑的同时登陆请求的个数(假设这个接口是简单的判断接口,速度非常快,代理服务器是nginx,设置了较小的连接数),我个人认为算并发测试,通过jmeter,创建测试脚本,配置一定的并发(要设置集合点)每个并发请求1次,多次测试中不断增大并发,直到接口无法正常响应,临界值就是系统能支撑的同时登陆请求的个数(能承受的并发极限)。
  3. 针对接口的性能的测试叫接口性能测试,针对整个系统的叫系统性能测试,针对存储的测试叫存储性能测试,命名看心情出,随时都能出一个新测试。
  4. 性能测试的指标相对较多,需要学习。以jmeter聚合报告为例,常见包括并发、延迟、95%line等、throughput、send、received。其他的好理解,重点是throuput,通常会叫吞吐,也作事务数(loadrunner中的Transactions),这个报告里,是sample(比如一个请求,或者定义多个请求为一个事务)总数/运行时间,不同地方叫法不太一样,或有细微差异,自行学习体会,项目组内部统一定义。
  5. 灵活制定测试计划,要依据对产品需求的理解制定,不要为了测试而测试,例如一个接口,生产环境的下甚至都没有调用,就不用测试了。
  6. 系统性能测试,不仅包含短时间大并发下的压力测试,也要考虑到7*24小时(服务器类型)运行的稳健性,还要考虑到随时间正常增长的诸如存储数据的可用容量。例如一个业务系统,会保留大量业务日志,一段时间后,业务日志可能超出硬盘容量,引起系统崩溃,又或者数据量超过系统处理极限,无法进行一些处理操作。

工具

jmeter

jmeter天下第一

易学易用,可视化配置,命令行执行,支持分布式,除http外支持大量协议,特别是存在大量插件可用,也可以自行编写基于java的sampler,灵活强大

jmeter有个搜集服务器信息的插件,可以和测试同时启动,非常方便:https://jmeter-plugins.org/wiki/JMXMon/

  1. 下载https://jmeter.apache.org/download_jmeter.cgi
  2. 安装jdk
  3. 直接可用
  4. 在可视化界面配置脚本
  5. 使用命令行模式执行脚本

    使用自行百度或者参考:https://blog.csdn.net/u012810434/article/details/54380975

loadrunner

知道即可,现在为和Micro Focus旗下产品(hp的软件业务和Micro Focus合并了),可以说是标杆级的应用,功能强大、权威、重量级,但是正常情况下不会使用(也用不起),可能会遇上一些测试需求要求使用loadrunner(外行的典型就是指定工具而非指标)

换了好几个东家,中间有个V12版本是有社区版的,50并发限制

  1. 下载社区版https://www.microfocus.com/en-us/products/loadrunner-professional/download
  2. 新版没用过,自行百度学习,老的是三个组件:VUG(Virtual user generator)创建脚本,controller设置并发以及运行,analysis分析报告

gatling

使用Scala,支持大量并发

jmeter是java的,并发是通过线程实现的,会占用大量资源,一旦并发数增多只能尝试分布式运行,但就我个人经验,分布式不好使,主要是项目原因,总不能测试机比系统服务器还多。

scala可以简单的认为是java的扩展版(自行百度),并发实现上并非直接使用线程,远比基于java的jmeter轻量,节约资源。

  1. 下载:https://gatling.io/open-source
  2. 实话说也没怎么用过,自行百度

locust

基于python,一个框架

也没怎么用过,都说是python了,简单易上手,自定义开发方便,使用协程而非线程实现模拟并发,可以比jmeter单机模拟更多的并发

之前比较简陋,要啥没啥,需要二次开发。

并发能力高并不意味压测能力前,搜了下别人的测试,locust默认的http库存在性能问题,TPS不高(相较jmeter)。一般项目(单机部署)几十并发就够测出极限压力了。

  1. pip 安装
  2. 自行百度使用

nmon

linux用的系统监控软件,方便测试时使用,输出系统的资源使用情况

自动化

看项目需求,有些需求会是常态化7*24小压力下稳定性测试,主要指标是报错率和响应时间,以及系统资源消耗;

有些需求是需要搭配持续化构建测试。