jmeter基础

jmeter基础

1.简介

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

jmeter官网:https://jmeter.apache.org/

在这里插入图片描述

2.安装jdk

由于jmeter基于java开发的压力测试工具,因此我们要运行jmeter,需要配置Java环境,具体步骤如下

(1)下载jdk8

下载地址:https://www.oracle.com/java/technologies/downloads/#java8-windows,选择windows操作系统,根据自己操作系统选择对应的位数,jdk-8u351-windows-i586.exe为32位操作系统,jdk-8u351-windows-x64.exe为64位操作系统

在这里插入图片描述

(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/json
    content-typeapplication/json
    token${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
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qi诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值