jmeter-压力和性能测试

jemter 简介

jmeter 可以做接口测试和压力测试。其中接口测试的简单操作包括做 http 脚本(发 get/post 请求、加 cookie、加 header、加权 限认证、上传文件)、做 webservice 脚本、参数化、断言、关联(正则表达式提取器和处理 json-json path extractor)和 jmeter 操作数据库等等。

jmeter 安装

  • 安装jdk(略)
  • 下载Jmeter(下载二进制直接可以运行,不需要安装)
  • windows中运行jmeter.bat即可打开可视化界面

jmter 的用法

相关名词解释

  • 测试计划:一个测试项目的开始,一切都在测试计划之下, 一个脚本就是一个测试计划, 也可以叫管理单元。
    • 线程组:可以叫用户组,进行性能测试时的用户资源池。是任务测试计划的起点,所有的逻辑控制器和采样器都必须放在线程组之下。
      • 取样器:用来模拟用户操作,向服务器(被测系统)发出HTTP请求,Webservice请求或者Java请求等,并接受服务器响应数据。
      • 逻辑控制器:逻辑控制器可以通过请求逻辑
    • 配置元件:可以用来初始化默认值和变量,以便后续采样器使用。将在其作用域的初始化阶段处理。
    • 监听器:收集取样器记录的数据并以可视化的方式来呈现。
    • 定时器:可以根据实际场景设置思考时间用于等待或是集合点同时并发。定时器是在每个sampler(采样器)之前执行的,而不是之后
    • 前置处理器:在测试脚本开发过程中,我们在请求发送前可能会做一些环境或者参数的准备工作,可以在前置处理器中完成这个工作。
    • 后置处理器:在取样器运行后执行。常常用来处理响应的数据。
    • 断言:用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
    • 测试片段:是控制器上一个种特殊的线程组,它在测试树上与线程组处于一个层级。但使用时需要和include Controller或者Module Controller配合。它的主要作用是模块化测试过程,类似于编程语言中的函数。即,将测试过程封装成测试片段,就可以在其他地方直接引用了。

注意: 一个测试计划, 至少有一个线程组, 至少有一个取样器

创建测试计划和线程组

线程数表示模拟一个用户占用一个线程
循环次数表示每个线程循环次数, 也可以设置永久运行
Ramp-Up表示是否平滑启动, 表示花费多次时间启动全部线程

添加取样器->HTTP请求

在添加http请求之前, 最好先添加测试计划->配置元件->HTTP信息头管理器, HTTP请求默认值 等默认值. 这样在添加HTTP请求时就只需输入请求的特有信息即可.

在有默认值的情况下, 只需要输入请求方式,路径,消息体即可

jmeter 指标说明

6315ef1023ba4807a76aa0e9ce066398.png

选择线程组:右键-->添加-->监听器-->查看结果树

  • 查看结果树:仅用于功能测试或调试验证时使用, 不得在负载测试中使用, 会消耗大量CPU和内存资源
  • 汇总报告:生成报告
  • 聚合报告:生成报告

汇总报告和聚合报告内容基本相同, 除了聚合报告会给出中位数(90%,95%...), 另外聚合报告会消耗更多内存.

  • 样本:请求的次数,计算公式是线程数*循环次数,如果线程组配置勾选了永远,那么就是你停止测试时实际发送的请求数
  • 平均值:响应时间的平均用时,单位是毫秒。比如这里的平均响应时间是38毫秒
  • 中位数:响应时间的中位数,单位是毫秒。
  • 90%百分位:90%的响应时间小于该数值,单位是毫秒。这里有90%的响应时间小于37毫秒
  • 95%百分位:含义和90%类似
  • 99%百分位:含义和90%类似
  • 最小值:本轮测试最小响应时间,单位是毫秒。
  • 最大值:本轮测试最大响应时间,单位是毫秒。
  • 异常%:本轮测试出现异常的请求比例。
  • 吞吐量:可以理解为QPS,即是我们测试的接口处理请求的能力。比如这里是平均每秒可以处理2.2次请求
  • 接收KB/Sec:响应数据的接收速率
  • 发送KB/Sec:请求数据的发送速率

jmeter 高级使用

开启日志/设置日志级别

菜单->选项->打开"日志查看"功能/设置"日志级别"

参数化

CSV——选择测试计划,右键-->添加-->元件-->CSV data Sat config
使用csv导入全局变量列表, 使用参数化变量:${变量名}访问

后置处理器->提取器/前置处理器

如果一个请求需要使用上一个请求返回的数据就需要使用此功能
这里需要注意同线程下与跨线程下如何调用

此处评论已关闭