1. 配置环境变量的作用
每次启动前都需要去找jmeter安装目录,在bin目录下启动文件,比较麻烦。配置环境变量后,打开terminal,输入jmeter即可启动,比较方便、减少操作
2. windows下配置(win10为例)
高级系统设置-->环境变量-->系统变量-->新建变量
JMETER_HOME:【jmeter安装目录】
Path变量中添加:%JMETER_HOME%\bin
3. mac下配置:
vim .bash_profile,编辑模式下添加以下配置
export jmeter_HOME=/安装目录/apache-jmeter-5.4.3
export PATH=$PATH:$jmeter_HOME/bin
执行source ~/.bash_profile命令使配置文件生效
1. bin:可执行文件(包括不限于:Linux/windows启动文件、日志文件、系统配置文件、Linux/windows分布式测试要用到的服务器配置)
2. extras:扩展插件目录。提供了对Ant的支持,可以使用Ant来实现自动化测试,例如批量脚本执行,产生html格式的报表,测试运行时,可以把测试数据记录下来,jmeter会自动生成一个.jtl文件,将该文件放到extras目录下,运行"ant -Dtest=文件名 report",就可以生成测试统计报表。
3. licenses:jmeter证书目录
4. backups:默认存放jmeter保存生成的jmx文件
5. docs:接口文档
6. lib:JMeter依赖的外部jar包
7. printable_docs:用户手册
1. 手动编辑脚本
简单的hhtp脚本或者java请求脚本(BeanShell Sampler),都可以进行手动编辑,然后创建保存后,进行修改、调试、参数化等等;
2. 代理录制
首先创建一个线程组,再向工作台中添加一个HTTP代理服务器(选中工作台右键-添加-非测试元件-HTTP代理服务器),需要录制的客户端(手机或者电脑设置网络代理为JMeter )然后请求后进行录制;
3. badboy录制(第三方工具)–最快捷方式
使用badboy进行脚本录制,然后导出.jmx格式;这种录制方式录制脚本数据信息比较全面,导出信息经过简单修改就可以进行调试
1. 执行顺序:测试计划 > 线程组 > 配置元件 > 前置处理器 > 定时器 > (逻辑控制器)> 取样器 > 后置处理器 > 断言/监听器
2. 作用域:可以作用于它的父级组件,同级组件,同级组件的自组件
3. 测试计划:起点、容器
并发执行:默认并发执行
顺序执行:勾选独立运行每个线程组
4. 线程组:虚拟用户
setUp线程组:一个测试计划中最先执行(无关位置)
tearDown线程组 :一个测试计划中最后执行(无关位置)
线程数:组内线程个数(模拟用户数量)
Ramp-Up时间(秒):准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
循环次数:每个线程循环执行取样器的次数,勾选永远则死循环
持续时间:取样器持续执行时间(会覆盖结束时间)
启动延迟:延迟x秒开始执行取样器(会覆盖启动时间)
5. 取样器:发送请求的最小单元
a. http请求
1. 一般配合http请求默认值、用户定义的变量使用(重复的信息可以写在http请求默认值中,后续http请求则不用重复填写)
2. 名称:用于标识一个sample。建议使用一个有意义的名称
3. 注释:对于测试没任何影响,仅用来记录用户可读的注释信息
4. 协议:向目标服务器发送http请求时的协议,http/https大小写不敏感,默认http
5. 服务器名称或IP:http请求发送的目标服务器名称或者IP地址
6. 端口号:目标服务器的端口号,默认值为80,可不填
7. 方法:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE
8. 内容编码:默认为ISO-8859-1,需配置为utf-8
9. 自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面,只会有最终响应结果
10. 跟随重定向:如果发出的http请求得到响应是301/302,jmeter会重定向到新的界面,区别是,记录每个步骤的地址
11. keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信
12. 对post使用multipart / from-data (post):当发送HTTP POST 请求时使用,可以上传文件信息,需要在高级→实现中选择java,才可使用
13. 参数 --> 同请求一起发送参数(get请求)
在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”
14. 消息体上传(post):当发送HTTP POST 请求时使用,json格式数据
15. 文件上传(post):当发送HTTP POST 请求时使用
16. 文件名称:文件路径
17. 参数名称:请求参数名称
18. MIME类型:multipart / from-data(固定写法)注:要么填写MIME类型,要么勾选对post使用multipart / from-data且高级→实现中选择java,二者选其一
b. BeanShell取样器
1. 可以实现跨线程组传值
2. 可以配合正则表达式提取器、JSON提取器、Xpath提取器提取出来的变量,利用setProperty函数生成函数字符串(见后文图片示例)
3. 获取时使用Property函数生成变量即可(见后文图片示例)
4. Debug Sampler(调试取样器):调试jmeter代码时使用,比如需要查看正则/json/css提取器是否提取到正确的数据
6 . 逻辑控制器:控制执行顺序
1. 如果(if)控制器
参数介绍
use status of last sample
上个取样器的使用状态:上个取样器结果成功则执行如果(if)控制器下的请求,上个取样器执行失败则不执行
Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写,勾选性能会比不勾选强)
勾选:(可以直接输入true或者false,但没有意义)
表达式通过jexl3或者groovy转成true或false结果,条件格式:${__jexl3(条件表达式)}
例:${__groovy(${val}==123,)}或者${__jexl3(${val}==123,)}
不勾选:表达式结果为true执行子节点,flase则不执行
例:val == 1
Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式
场景:如登录成功后再执行访问用户资料接口
注:用来对比的变量如果是String类型的数据,则必须用引号引起来;如果单纯只是使用变量,则可以不用
2. ForEach逻辑控制器
线程组-->添加-->逻辑控制器→ForEach控制器
输入变量前缀:如变量名为name_1、name_2、name_3、name_x···,则只输入name即可(前提是勾选了数字之前加上下划线“_”)
开始循环字段(不含):如需从1开始则填0
结束循环字段(含):如到3结束则填3
输出变量名称:给该foreach取变量名称,用时只需要${foreach变量名称}即可
3. 循环逻辑控制器
线程组-->添加-->逻辑控制器→循环控制器
循环几次循环次数填几次即可
4. while循环控制器
Condition
为空:子节点中最后一个sample执行失败才会退出循环(网上大多数说法是某次sample执行失败则退出循环,实则不准)
LAST:效果同为空
其他:条件表达式为false时退出循环
7. 前置处理器:请求之前的操作
JSR223 PreProcessor
可以导入jar包,执行java代码的方法
BeanShell PreProcessor
功能基本与JSR223一致,性能差别
8. 后置处理器:请求之后的操作
a. JSR223 PostProcessor
可以在Java平台上运行脚本语言.比如Groovy,JavaScript等
关键字:
ctx:线程上下文
prev:当前返回结果取样器
vars:读写对象
b. 正则表达式提取器
引用名称:设置参数名
正则表示式:设置需要提取的结果(通用的正则表达式语法)
.匹配任意一个字符 除了\n
*匹配前一个字符可以出现0次,1次,多次,可有可无
?匹配前一个字符出现一次或者没有出现 要么有要么没有
+匹配前一个字符至少出现一次或者多次,至少有一次
模板:如果匹配多个结果,根据模板决定提取其中的一个或多个
$-1$:表示取所有值
$0$:表示随机取值
$n$:表示取第n(n>=1)个
c. JSON提取器(见后文图片示例)
用法
$代表跟目录
如下级遇json直接.key则可以拿到value值或者["key"]
如下级遇列表(数组),则通过[索引]取值
引用名称:设置参数名
josn提取表达式:设置需要提取的结果,$.名称或者$[?],需要提取多个用英文分号隔开
匹配数量:匹配数字(0代表随机,1代表第一个,-1代表所有)
统计所有的变量值 (引用名称_ALL,注意区分大小写)
json提取器获取所有参数后,可以用foreach处理器进行循环,可以配合使用
d .Xpath提取器 (见后文图片示例)
8. 断言:判断请求在某种规则下是否正确
响应断言
断言状态码、响应体
大小断言
响应内容的字节长度
断言持续时间
判断响应时间
BeanShell断言
通过prev获取响应数据
获取响应数据:String jsonResult = prev.getResponseDataAsString();
处理响应code:if(“200“.quals(prev.getResponseCode()==false)) { Failure=true; }
9. 定时器:延迟或者间隔发送请求(执行在每一个采样器(sampler)之前,无关位置)
固定:固定延迟时间
高斯:随机延迟时间(一般用于模拟真实场景)
同步(见后文图片示例):并发时使用(一般请求数除以并发数则就是同步定时器数)
10. 配置元件:取样器配置信息
HTTP信息头管理器
在sampler中发送请求的时候,http头部信息列表会自动整合后一起发送。当http头部信息列表中的某一条信息 与sampler本身已自带的名称相同,则手动输入的信息会取代sampler自带的。访问某些有防盗链的页面时需要正确的Refer,这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
HTTP Cookie管理器
该组件可以像浏览器一样的存储和发送Cookie,如果发送一个http请求他的响 应中包含Cookie,那么Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。也可以自己设置保存Cookie
用户自定义变量
设置常用变量;比如切换服务器,切换登录用户
CSV Data Set Config(CSV数据文件设置)
csv:逗号分隔值,一种常见的数据存储格式
语法格式(见后文图片示例):变量值1,变量值2,变量值3···, 一行代表一条数据
11. 监听器:收集测试结果
查看结果树
查看取样器的结果、请求、响应数据
如果需要对返回结果进行正则提取,可以选择查看方式为RegExp Tester,在Regular expression中测试正则表达式,查看提取结果的位置
如果需要对返回结果进行json提取,可以选择查看方式为JSON PATH Tester,在JSON PATH Tester中测试JSON表达式
聚合报告
性能指标数据
参数详解
Label:作用域内每一个http请求的名称
#Samples(样本):请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
平均值:平均响应时间——默认情况下是单个 Request 的平均响应时间
中位数:50% 用户的响应时间
90%百分位:90% 用户的响应时间
95%百分位:95% 用户的响应时间
99%百分位:99% 用户的响应时间
最小值:最小响应时间
最大值:最大响应时间
异常%:错误请求数/请求总数
吞吐量:默认情况下表示每秒完成的请求数
接收 KB/sec:每秒从服务器端接收到的数据量
发送 KB/sec:每秒从服务器端接收到的数据量
json提取器
xpath提取器
同步定时器
上传csv格式文件
计数器函数:
随机数函数:
时间函数:
UUID函数 :通用唯一识别码
调试取样器
jmeter + fiddle/charles/whistle
ant下载
http://ant.apache.org/bindownload.cgi
1.10.2 .zip archive 对应jdk8
解压,配置环境变量
系统环境变量中添加:D:\apache-ant-1.10.12\bin(自己的安装地址)
检查是否配置成功
ant -version
需要构建一个build.xml文件,放在jmx文件同级目录
修改jmeter.properties
jmeter.save.saveservice.output_format=xml
ant运行
jenkins todo
下载Mysql jdbc驱动包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(版本是一个大版本就行)
设置JDBC Connection Configuration
Variable Name:自定义参数,在JDBC Request中会用到;
Database URL:jdbc:mysql:// 数据库IP地址:数据库端口/数据库名称;(例:jdbc:mysql://127.0.0.0:3306/mysql)如果运行报时间错误后边加上:?serverTimezone=UTC; 如果中文乱码后边加上:?useUnicode=true&characterEncoding=UTF-8
JDBC Driver Class:com.mysql.jdbc.Driver;
Username:数据库用户名;
Password:数据库密码;
线程组下添加JDBC Request
JDBC Request中Variable Name of Poll declared in JDBC Connection Configuration填写设置的JDBC Connection Configuration中的Variable Name变量名称
数据库查询结果当做参数使用
JDBC Request中为variable name设置一个变量名
添加一个调试取样器(debug sample)
查看结果树中调试取样器的结果,结果的变量名就可以直接调用该变量使用
添加http请求使用该变量
概念
a)BeanShell是一种轻量级的java脚本
b)Beanshell 有自己的专属语法
log、ctx 、vars、props、prev
c)Beanshell可以执行标准的java代码
java文件、class文件、jar包
BeanShell语法