jmeter基础
1.简介
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
jmeter官网:https://jmeter.apache.org/
2.安装jdk
由于jmeter基于java开发的压力测试工具,因此我们要运行jmeter,需要配置Java环境,具体步骤如下
(1)下载jdk8
(2)安装jdk
傻瓜式下一步即可,或自定义安装目录(需记住自己安装的位置,方便后续配置java环境)
(3)配置java环境
- 右击我的电脑–>选择属性–>高级系统配置—>环境变量
- 系统环境变量中添加JAVA_HOME(JAVA_HOME为安装jdk的位置)
- 将jdk添加到path环境变量中,path—>编辑—>新建:添加:%JAVA_HOME%\bin,点击【确定】完成环境变量的配置
- 验证是否配置成功,打开cmd,输入:java -version,显示java版本即java环境配置成功
3.下载jmeter
进入jmeter官网,点击Download Releases,选择二进制或源码包点击下载即可(注意Windows下载zip包,linux下载tgz包)
解压apache-jmeter-5.5.zip,进入到解压文件夹/bin下运行jmeter.bat出现jmeter工作台,表示安装成功
4.jmeter文件目录介绍
目录作用bin存放可执行文件和配置文件lib用来存放Jmeter依赖的jar包和用户扩展所依赖的jar包docsjmeter相关的api文档
5.如何启动jmeter
(1)进入jmeter解压目录的/bin目录下,点击jmeter.bat运行
(2)将jmeter添加到系统环境变量中(参考jdk环境变量配置,这里不在细说)
- 进入系统环境变量 ,新建JMETER_HOME=jmeter解压位置
- 添加到path环境变量中,%JMETER_HOME%\bin
- cmd输入jmeter即可正常打开jmeter
6.设置jmeter语言为中文
(1)工作台设置语言为中文,打开jmeter–>Options–>Choose Language–>Chinese(Simplified)(需每次打开jmeter设置,比较繁琐)
(2)修改配置文件,设置为中文,进入jmeter\bin路径,打开jmeter.properties,添加:language=zh_CN(一劳永逸,推荐使用)
7.测试计划
操作步骤:文件—>新建
测试计划(Test Plan)描述了jmeter运行时将要执行的一系列步骤。完整的测试计划包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件组成,相当于我们测试项目的工程(project)。
8.线程池
(1)线程组
操作步骤:测试计划—>添加—>线程(用户)—>线程组
- 在取样器错误后要执行的动作:取样器发生错误要执行哪个动作,包含继续、启动下一进程循环、停止线程、停止测试、立即停止测试五个动作动作解释继续取样器发生错误,忽略错误 继续执行,默认选项启动下一进程循环取样器发生错误,忽略错误 停止当前线程循环,执行下一个循环停止线程当前线程运行完毕后,停止所有线程停止测试停止测试计划,如果一个测试计划下有多个线程组,那么所有线程组都会停止立即停止测试整个测试计划会立即停止运行
- 线程数:定义需要运行的线程数量
- ramp-up时间:设置启动所有线程所需要的时间
- 循环次数:设置线程组中每个线程执行的次数
- 永远:勾选后线程组中的线程将永远运行下去
- same user on each iteration:每次迭代使用相同的线程
- 延迟创建线程知道需要:如果勾选了此选项,那么线程只会在合适的需要用到的时候创建
- 调度器:勾选此选项后,可设置持续时间和延迟启动调度器描述持续时间(秒)设置线程组运行多长时间,单位是秒启动延迟(秒)设置线程启动延时时间,单位是秒
(2)setUp线程组
操作步骤:测试计划—>添加—>线程(用户)—>setUp线程组
setUp线程组在普通线程执行前自动触发执行,setUp线程组可以用于测试准备,比如用它来创建测试用户等。
(3)tearDown线程组
操作步骤:测试计划—>添加—>线程(用户)—>tearDown线程组
tearDown线程组在主线程结束后执行,Teardown线程组可以用于测试清理工作,比如删除测试用户等。
9.配置原件
(1)CSV Data Set Config(CSV数据文件设置)
操作步骤:线程组—>添加—>配置元件—>CSV Data Set Config
- 文件名:csv文件的路径,点击浏览可添加文件的绝对路径,如果是相对路径,会在jemeter的bin目录下找到响应文件位置
- 文件编码:默认为当前操作系统的编码格式,文件编码包含:UTF-8、UTF-16、ISO-8859-15、US-ASCII等
- 变量名称(英文逗号间隔):csv文件中各列的名字,有多列时,用英文逗号隔开列名
- 忽略首行(只在设置了变量名称后才生效):true:忽略首行,false:不忽略首行
- 分隔符(用’\t’代替制表符):csv文件中的分隔符(用”\t”代替tab键),一般情况下,分隔符为英文逗号,保持默认就行
- 是否允许带引号?:是否允许数据内容添加引号,true:允许添加引号,flase:不允许添加引号
- 遇到文件结束符再次循环?:到文件尾是否结束循环,true:继续从文件第一行开始读取,falase:不在循环
- 遇到文件结束符停止线程:到文件尾是否停止线程,true:结束线程,false:不结束线程
- 线程共享模式:csv数据共享线程范围,所有线程:所有线程共享数据;当前线程组:数据只对当前线程生效,当前线程:数据只对当前线程生效
(2)HTTP信息头管理器
操作步骤:测试计划—>添加---->配置元件—>HTTP信息头管理器
信息头,也就是请求头,它会随着我们的HTTP请求一起发送到服务器,比如需要传输User-Agent 、cookie、token或其他某些信息,或是需要伪造请求头的时候。
- 常用信息头信息头值acceptapplication/jsoncontent-typeapplication/jsontoken${token}
(3)HTTP请求默认值
操作步骤:测试计划—>添加---->配置元件—>HTTP请求默认值
- 协议:接口访问的协议,常见的有http和https
- 服务器名称或IP:服务器地址(比如:127.0.0.1)
- 端口号:访问服务器的端口(比如:8080)
- 路径:访问接口的路径(比如:/login)
- 内容编码:编码格式(一般为utf-8)
- 参数:请求参数
- 消息体:以json格式传递参数
(4)计数器
操作步骤:测试计划—>添加---->配置元件—>计数器
- Starting value:计数器的起始值、初始值,第一次迭代时,会把该值赋值给计数器
- 递增:每次迭代后,给计数器增加的值
- Maxinum value:计数器的最大值,如果超过最大值,重新设置为初始值,默认的最大值为2^63-1
- 数字格式:指定计数器输出的格式,比如:0000,输出后为0001,0002,0003
- 引用名称:计数器的变量名称,方便其他模块的引用,形式为${num}
- 与每个用户独立的跟踪计数器:勾选上,每个用户拥有自己独立的值,不勾选,所有用户共用此计数器
- 在每个线程组迭代上重置计数器:勾选上,每次线程组迭代都会重置计数器,不勾选,线程迭代不会重置计数器
10.取样器
(1)HTTP请求
操作步骤:线程组—>添加—>取样器—>HTTP请求
- 协议:接口访问的协议,常见的有http和https
- 服务器名称或IP:服务器地址(比如:127.0.0.1)
- 端口号:访问服务器的端口(比如:8080)
- 请求方式:一般为post和get请求两种方式
- 路径:访问接口的路径(比如:/login)
- 内容编码:编码格式(一般为utf-8)
- 参数:请求参数
- 消息体:以json格式传递参数
11.监听器
(1)查看结果树
操作步骤:线程组—>添加—>监听器—>查看结果树
- 文件名:输入一个完整路径,后缀可以为csv、html等,若文件已存在,则覆盖原有文件
- 仅错误日志:结果只输出错误日志
- 仅成功日志:结果只输出成功日志
- 配置:配置需要输出文档的内容,可根据自己需求来确定
- 请求结果显示格式:Text、JSON Path Tester、HTML等
- 取样器结果:显示取样器相关信息,默认为Raw试图,可以切换为Parsed试图
- 请求:默认为Raw视图,显示Request Body和Request Headers两部分,包含请求uri,请求数据、鉴权信息(cookies)等
- 响应数据:包含Response Body和Response handers两部分。
(2)聚合报告
操作步骤:线程组—>添加—>监听器—>聚合报告
参数说明:
参数含义Label请求的名称,就是脚本中Sampler的名称样本总共发给服务器的请求数量平均值默认情况下是单个Request的平均响应时间,单位是毫秒中位数50%用户的响应时间小于该值90%位90%用户的响应时间小于该值95%位95%用户的响应时间小于该值99%位99%用户的响应时间小于该值最小值最小的响应时间最大值最大的响应时间异常%异常率=异常请求的数量/请求的总数吞吐量默认情况下表示每秒完成的请求数(Request per Second)接收 KB/sec每秒从服务器端接收到的数据量发送 KB/sec每秒发送到服务器端的数据量
(3)汇总报告
操作步骤:线程组—>添加—>监听器—>汇总报告
参数说明:
参数含义Label请求的名称,就是脚本中Sampler的名称样本总共发给服务器的请求数量平均值默认情况下是单个Request的平均响应时间,单位是毫秒最小值最小的响应时间最大值最大的响应时间标准偏差响应时间与平均值的平均偏差值异常%异常率=异常请求的数量/请求的总数吞吐量默认情况下表示每秒完成的请求数(Request per Second)接收 KB/sec每秒从服务器端接收到的数据量发送 KB/sec每秒发送到服务器端的数据量平均字节数平均每次请求的字节数
12逻辑控制器
(1)IF控制器
操作步骤:线程组—>添加—>逻辑控制器—>IF控制器
表达式的值为true时,执行if控制器中的模块,表达式的值为false时,不执行if控制器中的模块
- Expression (must evaluate to true or false) :表达式(值必须是 true 或 false ),也就是说,在右边文本框中输入的条件值必须是 true 或 false(默认情况下)
- Interpret Condition as Variable Expression?:默认勾选,将条件解释为变量表达式(需要使用
${__jexl3 }
或 KaTeX parse error: Expected group after '_' at position 2: {_̲_groovy } 表达式),…{__jexl3(11)}或${__groovy(11)}` - Evaluate for all children?:勾选后,条件作用于每个子项
(2)事务控制器
操作步骤:线程组—>添加—>逻辑控制器—>事务控制器
将控制器下的所有取样器作为一个事务统计、分析
- Generate Parent Sample:如果选中,事务控制器将作为其他取样器的父级样本,否则事务控制器仅作为独立的样本。通俗的讲勾选后,显示事务控制器和取样器,不勾选,只显示事务控制器
- Include duration of timer and pre-post processors in generated sample:是否在生成的样本中包括计时器,预处理和后处理的延迟时间。通俗的讲勾选后,包含定时器、前置处理器和后置处理器的时间,不勾选的话,不包含定时器、前置处理器和后置处理器的时间
(3)循环控制器
操作步骤:线程组—>添加—>逻辑控制器—>循环控制器
循环去执行取样器,其功能相当于for循环,当设置循环次数为n时,循环执行n次控制器中的取样器,若勾选永远后,则一直执行循环控制器中的取样器
- 循环次数:循环运行子节点中的取样器次数
- 永远:勾选后,将永远循环,不会停止
(4)While控制器
操作步骤:线程组—>添加—>逻辑控制器—>While控制器
相当于直到型循环,首先执行循环体,再进行判断条件,当条件满足时,跳出循环,当不满足条件时,继续执行循环体,由于首先执行的循环体,所以While至少执行一次。
(5)仅一次控制器
操作步骤:线程组—>添加—>逻辑控制器—>仅一次控制器
在仅一次控制器模块下的取样器等只执行一次
13.定时器
(1)固定定时器
操作步骤:线程组—>添加—>定时器—>固定定时器
- 一般用于两个请求之间,第一个请求发送之后,等待固定时间后,在发送第二个请求
- 线程延迟(毫秒):设置等待时间,单位毫秒(1秒=1000毫秒)
(2)Synchronizing Timer(同步定时器)
操作步骤:线程组—>添加—>定时器—>Synchronizing Timer
同步定时器:表示线程数集合达到设置模拟用户数量之后,同时释放线程组,
注意:同步定时器是在线程组请求之前执行的
- 模拟用户组的数量:设置同步的线程数,注意:模拟用户组的数量一定不能大于线程组中设置的线程数
- 超时时间以毫秒为单位:当超时时间设置为0,表示无超时时间,将会等待线程数达到设置的模拟用户组的数量,才会释放线程组;当超时时间大于0,一旦设置时间后,即使线程数量没有达到模拟用户组的数量中设置的值,同样也会释放线程组
14.前置处理器
(1)用户参数
操作步骤:线程组—>添加—>前置处理器—>用户参数
- 每次迭代更新一次:目前暂未发现勾选与不勾选有啥区别,后续找到答案后跟新
- 添加变量:添加一行变量信息,此变量会应用于每个用户。
- 删除变量:删除所选中的一行数据。
- 添加用户:竖着添加一个用户信息,一个用户就是一组测试数据。
- 删除用户:删除所选中的一列数据。
- 向上和向下按钮:就是上下移动所选中变量的位置。
15.后置处理器
(1)正则表达式提取器
操作步骤:HTTP请求—>添加—>后置处理器—>正则表达式提取器
- **Apply to :**选项解释Main sample and sub-samples对主请求和子请求生效Main sample only默认勾选,仅对主请求生效Sub-sample only只对子请求生效Jmeter Variable Name to use对jmeter变量生效,在测试计划中定义的变量
- 要检查的响应字段:选项解释主体默认选项,响应体Body(unescaped)无符号响应体,会自动忽略特殊字符,功能不稳定,不推荐使用Body as a Document响应体,以文件形式存在(在互联网传输的接口数据都是文件),性能差信息头响应信息头Request Headers请求头URL请求rul响应代码响应状态码响应信息响应信息
- 引用名称:保存变量的名称
- 正则表达式:正则表达式匹配的值,语法示例:token:(.?)正则表达式说明.表示匹配任意字符+表示匹配一个或多个,不可以匹配空字符表示匹配0个或多个,可以匹配空字符?表示匹配0次或1次
- 模板:
$1$
表示取第一个正则表达式的值,多个正则时用$1$,$2$
- 匹配数字(0代表随机):0表示随机,1代表第一个取值,2代表第二个取值
- 缺省值:如果正则表达式没有匹配到值,则使用该缺省值,需要勾选Use empty default value
(2)JSON提取器
操作步骤:HTTP请求—>添加—>后置处理器—>JSON提取器
- Apply to :
- 选项解释Main sample and sub-samples对主请求和子请求生效Main sample only默认勾选,仅对主请求生效Sub-sample only只对子请求生效Jmeter Variable Name to use对jmeter变量生效,在测试计划中定义的变量
- Names of created variables:定义提取变量名称
- JSON Path expressions:JSON Path表达式,一般用法:$.data[0].token
- Match No. (0 for Random):表示取结果的第几个值,0表示随机,-1表示全部,1表示第一个,2表示第二个,一次类推
- Compute concatenation var (suffix_ALL):勾选此选项后,若匹配到多个值,jmeter使用英文逗号将其连接起来,存储在变量中,自动命名为_ALL(例如$.data.user匹配到多个值,分别为user1,user2,user3,则变量名user_ALL表示全部user)
- Default Values:缺省值,当JSON Path表达式未匹配到值,将使用此默认值
16.断言
(1)响应断言
操作步骤:HTTP请求—>添加—>断言—>响应断言
- Apply to :
- 选项解释Main sample and sub-samples对主请求和子请求生效Main sample only默认勾选,仅对主请求生效Sub-sample only只对子请求生效Jmeter Variable Name to use对jmeter变量生效,在测试计划中定义的变量
- 测试字段:测试字段包含:响应文本、响应代码、响应信息、响应头、请求头、URL样本、文档(文本)、忽略状态、请求数据,常用解释如下测试字段说明响应文本返回的文本信息响应代码http状态码 如200等响应信息指 response message响应头响应头部信息,response handers
- 模糊匹配规则:选项说明包括包括测试模式中的内容,支持正则字符串包括测试模式中的内容,不支持正则匹配完全匹配测试模式中的内容,不支持正则相等完全匹配测试模式中的内容,支持正则否断言结果取反,true为false,false为true或者有多个断言时,只要有一个断言成功,最终结果就是成功的
- 测试模式:断言的内容,如果有多个,按顺序执行,在没有选择【或者】的情况下,所有断言通过后,取样器结果才是成功的
- 自定义失败信息:断言失败后提示信息,比如:error
(2)JSON断言
操作步骤:HTTP请求—>添加—>断言—>JSON断言
- Assert JSON Path exists:JSON表达式
- Additionally assert value:断言值,不勾选,JSON Path表达式在JSON文档中找到路径;勾选,验证JSON Path表达式提取的值是否与预期值一样
- Match as regular expression:预期值是否可以使用正则表达式。不勾选,预期值不能使用正则表达式;勾选,预期值可以使用正则表达式
- Expect null:预期值为null
- **Invert assertion(will fail if above conditions met)**:勾选后,表示断言结果取反 个,按顺序执行,在没有选择【或者】的情况下,所有断言通过后,取样器结果才是成功的
- 自定义失败信息:断言失败后提示信息,比如:error
版权归原作者 qi诺 所有, 如有侵权,请联系我们删除。