性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

1 性能测试技能树

  性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势。性能测试工作实质上是利用工具去模拟大量用户来验证系统能够承受的负载情况,找出潜在的性能问题,分析并解决。

目前主流的一些性能测试工具:Jmeter、Grinder、Ngrinder等。

资源监控工具:nmon、jprofiler、kibana、skywalking、grafana等。

具体的技能树如下:

2 性能测试成功与失败要素

性能测试几大难点:

(1) 需求分析

(2) 场景设计

(3) 性能诊断调优

(4) 环境搭建和模拟

性能测试判断是否通过:

3性能测试流程

  1. 业务学习:通过查看文档,手工操作系统来了解系统功能。
  2. 需求分析:分析非功能需求,确定性能测试范围,了解性能测试指标。
  3. 工作评估:工作量分解
  4. 设计模型:业务模型转化成测试模型。比如一个支付系统需要与银行的系统进行交互(充值或转出),由于银行不提供支持,这时会开发程序代替银行系统功能,保证性能测试能够正常开展。再比如登陆后新增人员,需要绑定测试,这也属于测试模型。模型需要关注的是如何实现,是否具有可操作性、可验证性。
  5. 计划编写:计划测试工作,在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等。
  6. 脚本开发:录制或编写性能测试脚本
  7. 测试环境准备:包括服务器和负载机两部分,服务器是被测系统的运行平台,负载机是我们用来产生负载的机器,用来安装负载工具,运行测试脚本。
  8. 测试数据准备:根据数据模型来准备被测系统的主数据与业务数据(主数据是保证业务能够运行畅通的基础,比如菜单、用户等数据)
  9. 测试执行:性能测试成败关键
  10. 缺陷管理:对过程中发现的缺陷进行管理
  11. 性能分析:对暴露出来的问题进行分析,找出原因
  12. 性能调优:开发人员、性能测试工程师一起来解决性能问题
  13. 测试报告:测试工作的重要交付件,对测试结果进行报告,主要包括常见的性能指标说明(TPS、RT、CPU Using...),发现的问题。

性能测试主要交付件:

  • 测试计划
  • 测试脚本
  • 测试程序
  • 测试报告或阶段性性能报告

14.评审:对性能报告中的内容进行评审,确认问题、评估上线风险。

4 性能测试通过标准

通过标准参考如下:

分类

用户量

指标

优先级

备注

事务处理类

300

(非高峰期)

前端系统访问响应时间≤5秒

  1. 前端系统指标测试需结合Jmeter的报告
  1. 后端CPU利用率可使用Jmeter插件在服务器安装,Jmeter自动监控;若不允许装插件,则使用人工监控记录

查询类

300

(非高峰期)

前端系统访问响应时间≤2秒

后端CPU利用率<=50%

后端内存利用率<=50%

1000

(高峰期)

系统访问响应时间≤10秒

后端CPU利用率<=70%

后端内存利用率<=70%

3000

(极限)

系统未崩溃

请求未返回大量错误

统计类

简单统计类

系统响应时间≤10秒

手动启动业务全过程跟踪

复杂统计类

系统响应时间≤30秒

手动启动运行月报

5 性能测试趋势

  性能测试将会在自动化的道路上越走越远,持续集成也将更好的集成性能测试部分。

6 Jmeter体系结构

元件:jmeter工具菜单中的一个子菜单(功能),比如HTTP请求、事务控制器、响应断言等。

组件:一组元件的集合(一个或多个),比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但是归类到逻辑控制器,逻辑控制器就是组件。

jmeter基本原理:建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。如果取样器中有参数化的需求,可以通过配置元件或前置处理器来完成。如果有关联需求,可以通过后置处理器来完成。如果想要设置运行场景,比如模拟多少用户,运行多长时间,就设置线程组。如果我们想要模拟并发场景,可以利用定时器来设置;如果想要控制业务的执行逻辑,可以用控制器来完成。

Jmeter结构图:

6.1 安装jmeter

6.1.1 登陆官方网站,下载jmeter

http://jmeter.apache.org/,下载jmeter,如图:

6.1.2 解压后, 运行  “bin/jmeter.bat”

jmeter界面能正常打开,表示安装成功,如图:

PS:Jmeter 是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language  来选择语言

6.1.3  JDK环境变量配置

计算机→属性→高级系统设置→高级→环境变量,如图:

3-1.添加用户变量JAVA_HOME ,变量内容填写jdk的目录, 如 C:\Program Files\Java\jre1.8.0_131

3-2.添加系统变量CLASSPATH,变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有点和分号:点表示当前路径,分号表示分隔符)

3-3.添加系统变量PATH,变量值填写%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)

3-4.检验是否配置成功 运行cmd 输入 java -version (java 和 -version 之间有空格)

若如图所示 显示版本信息 则说明安装和配置成功,如图:

6.2 jmeter工具目录

• Jmeter的Home目录下包含bin、docs、extras、lib、printable_docs这5个文件夹。

• 我们需要重点知道的是bin、lib和docs目录。

6.2.1 bin文件

• Bin目录下存放的是启动文件(Jmeter启动快捷方式、报告生成快捷方式)、配置文件(日志设置、JVM设置)日志文件、启动jar包、示例脚本。

在windows下,找到bin文件下的jmeter.bat文件,双击就打开jmeter。

在linux下,找到bin文件下的jmeter.sh文件。

jmeter界面能正常打开,表示安装成功,如图:

PS:Jmeter 是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language  来选择语言

6.2.2 lib目录

Jmeter是java写的,在lib下面包含ext、junit目录、jar包。

Jar包在脚本或者jmeter运行时所需要的jar包,比如使用JDBC测试数据库时,就需要对应的jdbc驱动的jar包放入lib目录。

Ext目录下存放的是jmeter运行时的各个组件的jar包,也可以存放自定义组件和插件的jar包。

6.3 jmeter 组成

取样器:进行脚本逻辑控制

线程组:场景设置

监视器:监控我们的脚本运行,取得性能指标

6.3.1线程组

名称:可以给线程组设置一个个性化的命名

注释:可以对线程组添加备注以标记

在取样器错误后要执行的动作:就是在错误之后要如何执行,可选继续执行后续的、停止执行等。

线程数:就是需要设置多少线程执行测试。

Ramp-up Period (in Seconds):用于告知JMeter 要在多长时间内建立全部的线程。多长时间内需要把上面的线程数均匀启动完。 默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

循环次数:就是决定一个线程要跑多少次测试。

Delay Thread creation until needed:直到需要时延迟线程的创建

调度器:选中之后可以配置启动时间,立即或者预定的时间

 6.3.2 取样器:模拟用户操作

取样器用来模拟用户操作,向服务器(被测试系统)发出HTTP请求、WebService请求或Java请求。

取样器路径:【测试计划】->【线程组】->【Sample】

6.3.3 监听器:记录测试结果

Jmeter的测试结果需要添加监听器来收集。监听器任务用于添加结果监听、展示结果。

路径:【测试计划】->【监听器】

【取样器】、【断言】、【监听器】组合在一起们可以完成发送请求、验证结果及记录结果。

6.3.4 断言:验证结果的正确性

断言是用来验证结果的正确性。

断言就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配。

断言路径:【测试计划】->【断言】。

6.3.5 前置处理器:准备环境或参数

前置处理器用于环境或参数的准备工作,比如对数据库进行操作前,需要先建立连接。

路径:【测试计划】->【前置处理器】

6.3.6 配置元件:参数化

配置元件用于模拟大量用户操作我们往往需要做参数化或者可以用来记录服务器的返回数据。

路径:【测试计划】->【配置元件】

6.3.7后置处理器:处理服务器的返回结果

后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个web应用程序,我们登录后会返回一个SessionID,登陆后的业务操作过程中会作为验证条件,验证用户是否合法登录。Jmeter的关联通过后置处理器来完成。

路径:【测试计划】->【后置处理器】

【前置处理器】、【配置元件】、【后置处理器】都是为取样器提供数据支持的,取样器关注业务逻辑。

6.3.8 控制器:一次控制,多次查看

比如说用在登陆一次邮件,查看多封邮件。

路径:【测试计划】->【线程组】->【逻辑控制器】

6.3.9 定时器:集合

定时器模拟同一时刻发送,集合的功能。

路径:【测试计划】->【线程组】->【定时器】

6.4 jmeter脚本的两种录制方式

有2种方式的录制方式:

一、使用badboy进行录制

二、使用代理方式进行录制

6.4.1 脚本录制的流程与思路

6.4.2 Badboy演示与录制

打开百度,输入badboy,进入官网,下载对应的版本,网址如下:http://www.badboy.com.au/

如图:

下载完成后,进行安装,安装成功后,在程序中找到badboy,点击打开badboy,表示安装成功,如图:

Badboy功能区如下:

6.4.3 jmeter代理录制

HTTP代理方式进行录制的原理:解析网络数据包,按Http协议包装成Http Request,Http Response等对象。

HTTP请求默认值(添加录制控制器)

HTTP代理服务器(设置端口、IP地址)

浏览器设置:

6.4.4手动编写

根据对应的协议类型选择合适的取样器(sampler),手动编写对应的请求,实现模拟数据发送的效果。

前提:了解协议、了解抓包工具、了解性能测试工具。

7 jmeter运行原理

  Jmeter是以线程的方式来运行的,JMeter是运行在JVM虚拟机上。Jmeter通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组。Jmeter运行场景可以通过GUI方式或命令行方式中完成[命令行运行的方式对负载机的资源消耗会更小]。

jmeter运行逻辑[jmeter支持远程运行]:

  1. 远程负载机首先启动Agent程序,待控制机连接;
  2. 控制机连接上远程负载机;
  3. 控制机发送指令(脚本及启动命令)启动线程;
  4. 负载机运行脚本,回传状态(包括测试结果);
  5. 控制机收集结果并显示。

注意:

1.控制机:参与脚本运行,同时管理远程负载机指挥远程负载机运行的任务,并且手机远程负载机的测试结果。

2.负载机:受控制机管理[前提需要启动一个客户端程序-Agent:jmeter-server.bat],同时运行的脚本中有参数文件以及依赖的jar包时,控制机并不能把他们发送到远程负载机,需要手动拷贝。

8 jmeter测试计划要素

 jmeter分一个脚本即是一个测试计划,也是一个管理单元。jmeter的请求模拟与并发数(设置线程数,一个线程代表一个虚拟用户)设置都在脚本文件中一起设置。

测试计划要素:

  1. 脚本中测试计划只能有一个
  2. 测试计划中至少要有一个线程组
  3. 至少要有一个取样器
  4. 至少要有一个监听器

附录

1、自动重定向和跟随重定向的区别

自动重定向:当重定向时,自动跳转时,只针对GET和Head请求,自动重定向可以自动跳转到最终目标页面,但是jmeter不记录重定向过程内容【在查看结果树中只能看到重定向后的响应内容】

跟随重定向:当重定向时,自动重定向可以自动跳转到最终目标页面,但是jmeter记录重定向过程内容【在查看结果树中既能看到重定向后的响应内容,也能看到重定向前的响应内容】

2、如何解决JMeter设置线程组循环不起作用?

使用badboy录制的脚本,导出到jmeter中的,会出现一个问题就是,设置线程组循环会失效。只有设置step1的循环控制器才起作用。

问题的根本原因: jmeter中的循环控制器和badboy录制的脚本的step1循环控制器是不相同的。

解决方法:

1、badboy录制的脚本,循环要在step中设置。

2、jmeter代理录制的脚本,循环在循环控制器中设置。

性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)的更多相关文章

  1. 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交.   步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...

  2. 性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)

    1 性能测试目的 性能测试的目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件. 最后起到优化系统的目的性能测试包括如下几个方面: 1.评估系统的能力:测试 ...

  3. 性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )

    1 Jmeter 工作区介绍 jmeter工作区分为3个部分:目录树.测试计划编辑区域.菜单栏. 2 Jmeter 执行顺序规则 Jmeter执行顺序规则如下: 配置元件 前置处理器 定时器 采样器s ...

  4. 嵌入式Linux驱动学习之路(七)Linux内核启动流程

    编译的内核可能会很大,故这里可以压缩一下.而在内核文件中需要解压,所以就会有一段自解压代码. 在uboot启动内核的时候,调用了函数: thekernel(0,MACH_ID,params_addr ...

  5. Jmeter接口测试、性能测试详细介绍

    下面主要就是讲一下Jmeter工具的用法,用法非常简单,比起loadrunner不知道简单多少,并且开源免费~~ 1.接口简介 接口定义 接口: 就是数据交互的入口和出口,是一套标准规范. 接口(硬件 ...

  6. 性能测试学习之三—— PV->TPS转换模型&TPS波动模型

    PV->TPS转换模型 由上一篇“性能测试学习之二 ——性能测试模型(PV计算模型)“ 得知 TPS = ( (80%*总PV)/(24*60*60*(T/24)))/服务器数量 转换需要注意: ...

  7. JMeter学习-016-思路篇之-山重水复柳暗花明

    首先,此文非技术类博文,为思路类的博文,敬请参阅,欢迎共同探讨! 今天在编写 JMeter 接口监控脚本时,遇到了一个问题,在解决问题的时候,思路出现了偏差,导致了自己在解决问题时,绕了弯,浪费了些时 ...

  8. Jmeter+jenkins接口性能测试平台实践整理(二)

    本篇为Jmeter+jenkins+Ant方式执行性能测试 1.设置JDK,ANT环境变量: 2.build.xml文件: <?xml version="1.0" encod ...

  9. Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)

    性能测试计划 性能测试用例 录制脚本 性能测试结果 性能测试报告 性能测试监控报告 准备工作 从脚本已录制成功之后开始进行压测 安装Jmeter拓展插件 查看 Transactions per Sec ...

随机推荐

  1. Dem地形数据转换为cass支持的dat格式教程

    一.获取dem数据各类精度的dem高程数据下载这里不赘述,可以查阅这篇文章:高程数据下载 这里我们以12.5m精度的dem为例进行转换: 二.将dem数据转换为文本我们这里先将地形数据加载入globa ...

  2. git commit后如何取消commit

    在git使用中要如何取消commit但是还未push的操作? 通常,我们对修改的文件会先git add .,然后git commmit -m "注释",但是如果commit错了,想 ...

  3. 自定义泛型方法, 三级排序, low版,待升级

    package com.jd.dashboard.util; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken ...

  4. VMware虚拟机 - 解决 Vmware 启动虚拟机报:该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏的问题

    问题背景 当虚拟机仍然在运行时,直接关闭电脑,下次重开电脑并想重新启动虚拟机时报了下图问题 解决方案 进入虚拟机所在目录,把 .lck 后缀的文件都删完 Vmware 重新启动虚拟机 成功!!

  5. Tim Urban:如何选择真正适合你的职业?

    Wait But Why是一个专注于写长博客的网站,Tim Urban是网站的创始人之一.Tim Urban专注于写长论文,与时下的轻度阅读完全背道而驰,文章动辄几千甚至上万字,但令人吃惊的是却拥有惊 ...

  6. cnblog markdown 模式下调整图片大小

    流程 上传图片,获得图片链接,例如 ![](https://img2020.cnblogs.com/blog/2163507/202010/2163507-20201030205035211-7968 ...

  7. 死磕以太坊源码分析之Kademlia算法

    死磕以太坊源码分析之Kademlia算法 KAD 算法概述 Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能.使用一种基于异或指标的拓扑结构来路由查询 ...

  8. 卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks

    代码实现 概述 这是关于Texture Synthesis Using Convolutional Neural Networks论文的tensorflow2.0代码实现,使用keras预训练的VGG ...

  9. webpack 无法打包:No configuration file found and no output filename configured via CLI option

    报错内容 No configuration file found and no output filename configured via CLI option.A configuration fi ...

  10. OWASP固件安全性测试指南

    OWASP固件安全性测试指南 固件安全评估,英文名称 firmware security testing methodology 简称 FSTM.该指导方法主要是为了安全研究人员.软件开发人员.顾问. ...