jmeter基础介绍
jmeter是一款优秀的开源性能测试工具
优点
- 开源工具,可扩展性非常好
- 高可扩展性,用户可自定义调试相关模块代码
- 精心简单的GUI设计,小巧灵活
下载安装
- 官网下载地址:jmeter.apache.org/download_jm…
- 无需安装,下载压缩文件(.zip)到本地解压,运行bin\jmeter.bat
- 运行环境配置,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请求
1.http信息头管理器:
i:用于定义发送http请求,请求头的内容,多个先取优先级高的
ii:如果信息头管理器放到线程组下,那么线程组下所有HTTP请求都会共享这些HTTP信息头
iii:如果信息头管理器放到HTTP请求下,那么只有该请求拥有这些HTTP信息头
iiii:HTTP请求下的信息头管理器的优先级高于线程组下的信息头管理器
iiiii:配置http请求头信息,例:Content-Type: application/json
2.http请求:
i:用于发送http请求相关配置
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
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
ii:参数,get请求的参数是拼接在请求的url后面,用 ? 拼接,多个参数用&拼接
取样器-JDBC Request
1.JDBC Request
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:
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:数据库登录密码