Jmeter

289 阅读7分钟

jmeter基础介绍

官网

jmeter是一款优秀的开源性能测试工具

优点

  1. 开源工具,可扩展性非常好
  2. 高可扩展性,用户可自定义调试相关模块代码
  3. 精心简单的GUI设计,小巧灵活

下载安装

  1. 官网下载地址:jmeter.apache.org/download_jm…
  2. 无需安装,下载压缩文件(.zip)到本地解压,运行bin\jmeter.bat
  3. 运行环境配置,java运行环境,全局环境变量配置

jmeter的使用

主要概念

1. 测试计划(test plan)

  • jmeter的测试脚本,脚本中测试计划只能存在一个

2.线程组(Thread group)

一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户

  • 线程数:抽象后表示的就是用户数量(5)

  • Ramp-Up时间(秒):单位是秒,默认时间是1秒,它指定了启动所有线程所花费的时间,如果你需要Jmeter立即启动所有线程,将此设定为0即可(5)

  • 循环次数:线程执行的次数,设置2,即1个/s请求发5次,执行2遍(循环数),循环的开始执行时间几乎和第一遍执行时间并行

3.取样器(Sampler)

  • 是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元

  • 模拟用户请求,向服务器发送请求,如http请求、ftp请求、jdbc请求等

  • 作用域:取样器(Sampler)元件不和其它元件相互作用,因此不存在作用域的问题

4.逻辑控制器(Logic Controller)

  • 包含两类元件,一类是控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,如If Controller、Swith Controller、Loop Controller、Random Controller等;另一 类是用来组织和控制Sampler节点的,如Transaction Controller、Throughput Controller等

  • 作用域:逻辑控制器(Logic Controller)元件只对其子节点的取样器(Sample)和逻辑控制器(Logic Controller)起作用

5.前置处理器(Pre Processors)

  • 用于在实际请求发出之前对即将发出的请求进行特殊处理

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

6.后置处理器(Post Processors)

  • 用于对取样器(Sample)发出请求后得到的服务器响应进行处理

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

7.断言(Assertions)

  • 用于检查测试中得到的响应数据等是否符合预期,Assertions一般用来设置检查点,用以保证性能测试过程中的数据交互与预期一致

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

8.定时器(Time)

  • 用于操作之间设置等待时间

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

9.测试片段(test fragment)

  • 是一种特殊的线程组,在测试树上与线程组一个层级,但是它不被执行

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

10.配置元件(Config Element)

  • 用于提供对静态数据配置的支持

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

11.监听器(Listener)

  • 对测试结果进行处理和可视化展示的一系列组件,常用的有图形结果、查看结果树、聚合报告等

  • 作用域:如果该元件是某个取样器(Sample)的子节点,则该元件仅对其父节点作用;如果其父节点不是取样器(Sample),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

取样器-HTTP请求

图片.png

1.http信息头管理器:

i:用于定义发送http请求,请求头的内容,多个先取优先级高的

ii:如果信息头管理器放到线程组下,那么线程组下所有HTTP请求都会共享这些HTTP信息头

iii:如果信息头管理器放到HTTP请求下,那么只有该请求拥有这些HTTP信息头

iiii:HTTP请求下的信息头管理器的优先级高于线程组下的信息头管理器

iiiii:配置http请求头信息,例:Content-Type: application/json

图片.png

2.http请求:

i:用于发送http请求相关配置

图片.png

ii:协议,发送请求的协议,例:http、https

iii:服务器名称或ip,请求接口的IP地址,例:localhost;端口号,默认8080

iiii:请求方式,例:post、get;路径,请求接口url,/test/api/json/getUserInfo;内容编码,UTF-8

iiiii:自动重定向,跟随重定向,使用KeepAlive======================

3.http_post请求:

i:请求url:http://localhost:8080/test/api/json/getUserInfo

图片.png

ii:参数,post请求的入参是map格式key-value格式,请求头,Content-Type:application/x-www-form-urlencoded

iii:消息体数据,post请求的入参是json格式或xml格式(目前最常用的是json格式的入参),请求头,Content-Type:application/json、Content-Type:text/xml

iiii:文件上传,===================================================

4.http_get请求:

i:请求url:https://localhost:8080/test/user/userdetail?userid=32324896069&reslang=zh-cn

图片.png

ii:参数,get请求的参数是拼接在请求的url后面,用 ? 拼接,多个参数用&拼接

取样器-JDBC Request

1.JDBC Request

图片.png

i:用于配置JDBC请求

ii:Variable name of Pool declared in JDBC Connection Configuration,数据库连接池名,例:MySQL(需要和JDBC Connection Configuration名字保持一致)

iii:Query Type,共10种类型,

Select Statement,查询语句类型,如果JDBC Request中的Query内容为一条查询语句,则选择这种类型

Update statement,更新语句类型(包含Insert),如果JDBC Request中的Query内容为一条更新语句,则选择这种类型

iiii:Query,里面填入查询数据库数据的SQL语句(填写的SQL语句末尾不要加“;”)

iiiii:parameter valus,

2.配置元件-JDBC Connection Configuration:

图片.png

i:用于配置数据库的连接

ii:Variable Name for created pool,填入数据库连接池的名字,例:MySQL()

iii:Connection Pool Configuration,连接池配置,最大连接数,最大等待时间等(使用默认值)

iiii:Database Connection Configuration,数据库连接配置,

Database URL(数据库连接地址):jdbc:mysql://localhost:3306/sql_store?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&useSSL=true&serverTimezone=Asia/Shanghai

JDBC Driver class(数据库驱动):com.mysql.jdbc.Driver(可以将需要连接的数据库驱动jar包复制到jmeter的lib/目录下,然后在设置测试计划界面,最下面的Library中导入)

Username:数据库登录名

Password:数据库登录密码