Jmeter使用

一、Jmeter下载安装配置

1.JMeter介绍

JMeter是目前行业内用的比较多的一个开源测试工具,主要用于负载测试、性能测试、回归测试等,由Java语言编写,要依赖Java环境来运行(需要提前配置Java环境)。
主要特点:

  1. 开源性质:JMeter 是完全免费的,并且它的源代码可以被任何人查看、修改和分发。
  2. 多协议支持:除了Web服务,JMeter 还支持通过HTTP、HTTPS、FTP、JDBC、LDAP、SOAP等协议进行测试。
  3. 用户界面:它有一个基于Java的GUI界面,使得创建和执行测试计划更加直观。
  4. 脚本化测试:JMeter 允许用户通过BeanShell、JSR223脚本、Jython等编写脚本来进行复杂的测试。
  5. 灵活的测试计划:用户可以创建包含多种不同类型采样器的测试计划,以模拟真实的用户操作。
  6. 报告和可视化:JMeter 提供了多种方式来查看测试结果,包括图形、表格、日志和XML文件等。
  7. 插件扩展:JMeter 支持各种插件,这使得用户可以根据自己的需要扩展JMeter的功能。

2.下载

官网最新版本下载地址:https://jmeter.apache.org/download_jmeter.cgi

**Binaries:**二进制版,即已经编译好、可直接执行;

**Source:**源代码版,需要自己编译;

**.tgz **后缀名的为Linux下使用的包

**.zip **后缀名的为Windows、macOS下使用的包

根据自己的需要下载对应的包即可。

历史版本下载:https://archive.apache.org/dist/jmeter/binaries/

或者在我的网盘下载也可以:https://www.alipan.com/s/d8YngVufEvU

3. JMeter目录解析

首先将下载的zip包解压到自己想要放的目录。

由于里面文件比较多所以只会解释比较重要的文件。

apache-jmeter-X.X.X
 ├── bin    # 可执行文件目录
 │    ├── examples      # csv样例
 │    ├── jmeter.bat   # Windows的启动文件
 │    ├── jmeter.log    # 日志文件
 │    ├── jmeter.sh     # Linux的启动文件(tgz包才有)
 │    ├── jmeter.properties     # 系统配置文件
 │    └── jmeter-server.bat     # Windows分布式测试要用到的服务器
 ├── docs   # 帮助文档目录
 ├── extras     # 扩展插件目录,目录下的文件提供了对ant的支持
 ├── lib        # 存放Jmeter依赖的jar包,同时安装插件也放于此目录
 ├── licenses   # 软件许可文件,不用管
 ├── printable_docs     # 用户手册,其中usermanual/component_reference.html是最常用的核心帮助手册
 ├── LICENSE    # LIcense说明文件
 ├── NOTICE     # LIcense说明文件
 └── README.md  # JMeter简明介绍

4. Windows/macOS下安装启动

第一步:解压下载的安装包

第二步:进入解压后的apache-jmeter-X.X.X/bin目录

第三步:双击jmeter.bat文件或者ApacheJMeter.jar文件,两者都可以启动,使用jmeter.bat启动会多启动一个cmd窗口,使用ApacheJMeter.jar启动可直接启动jmeter的GUI界面。

启动好后

如果起不开,可能是Java环境没有配好,将Java环境配置好即可,可参考第1章 Java 概述的1.6配置。

5. JMeter切换语言为中文

临时切换,点选项-》选择语言--》中文(简体)

永久切换:

找到jmeter目录下的bin目录,打开jmeter.properties文件,找到#language=en,将其改为language=zh_CN

6. Linux下安装启动

step1:下载Linux版本的安装包,可以通过上述方式下载好再传到Linux,也可以直接通过命令在线下载:
wget https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz

step2:解压:tar -zxvf apache-jmeter-5.4.1.tgz

step3:配置环境变量:

export JMETER_HOME=/software/apache-jmeter-5.4.1
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin

让配置文件生效:source /etc/profile

step4:查看jmeter版本:jmeter -v

显示上图即代表安装成功

二、接口测试测试用例编写

:::info

常用快捷键:Ctrl+S(保存) Ctrl+E (清除结果树) Ctrl+R(运行-启动)

:::

三、编写一条简单Jmeter用例脚本

JMeter接口测试的操作依赖各种组件,最简单的接口模拟需要用到4个组件。

1、测试计划

打开JMeter后便默认存在一个测试计划

2、添加一个线程组

添加方法:测试计划 -> 右键 -> 添加 -> 线程 -> 线程组

3、添加配置元件: HTTP请求默认值

添加方法:线程组 -> 右键 -> 添加 -> 配置元件 -> HTTP请求默认值

作用:用于配置web服务器 协议类型、ip地址、端口号

4、添加监听器:查看结果树

添加方法:线程组 -> 右键 -> 添加 -> 监听器 -> 查看结果树

作用:用于查看用例执行结果

可以选择不同的方式查看结果:默认为Text,常用的如JSON, 如果在校验Json 表达式是否正确,则可用JSON Path Tester

可以将结果输出到一个文件中,如果没有事先创建文件,则会自动生成文件(C:\Users\Administrator\Desktop\result1.csv)

5、在线程组下 添加一个 http请求(添加一条测试用例)

添加方法:线程组 -> 右键 -> 添加 -> 取样器 -> http请求

6、修改HTTP请求名称为 用例标题,带上编号;并添加请求方法与路径

7、运行并查看结果(Ctrl+r)

变量的引用:${变量名}

四、其它常用元件

1、HTTP请求默认值

添加方法:线程组 -> 右键 -> 添加 -> 配置元件 -> HTTP请求默认值

作用:一般用于存放URL相关信息,当一个用例里有多个http请求,且请求的URL信息一样 的时候可以提取出来写到这里,方便管理。

2、HTTP信息头管理器

添加方法:http请求(用例) -> 右键 -> 添加 -> 配置元件 -> HTTP信息头管理器

作用:一般用于存放token信息(输入参数--头部校验参数)

例:

3、JSON提取器

添加方法:请求 -> 右键 -> 添加 -> 后置处理器 -> JSON 提取器

作用:用于提取响应信息的内容(常用于提取token、id等),与正则表达式提取器功能类似,注意:响应必须是JSON格式的才能用。

例:

4、正则表达式提取器

添加方法:请求 -> 右键 -> 添加 -> 后置处理器 -> 正则表达式提取器

例:要提取的字符串如:

{"status":200,"msg":"success","token":"b94d67f7fb554cf09c172ba8675aeec5"}

操作

  1. 先确定要从哪个文本字符串中提取哪一部分信息,然后确定要提取信息的左右边界,左右边界不能变化,且是唯一的,
  2. 将带左右边界的串拿出来 ","token":"b94d67f7fb554cf09c172ba8675aeec5"} 将要提取的信息用(.*)替换,替换之后的串就是我们要用的正则表达式:","token":"(.*)"}
  3. 提取token:"token":"(.*)"}
  4. 提取 200,sucess,token值:{"status"😦.),"msg":"(.)","token":"(.*)"}

变量具体的值根据$中间数字决定

5、调试取样器

添加方法:线程组 -> 右键 -> 添加 -> 取样器 -> 调试取样器

作用:显示某些变量的值,如JSON提取器里提取的值

6、添加断言

6.1 JSON断言

何时用:返回对象是JSON时

添加方法:请求 -> 右键 -> 添加 -> 断言 -> JSON断言

判断值存不存在时,

判断值相不相等时,

6.2 响应断言

何时用:使用范围更广

添加方法:请求 -> 右键 -> 断言 -> 响应断言

使用

模式匹配规则的异同点

包括与字符串

测试模式中的信息只要包含在实际结果中,测试通过

包括 支持正则表达式;字符串不支持正则表达式

匹配与相等

同:

测试模式中的信息要完全与实际结果一致,测试通过

异:

匹配支持正则表达式,相等不支持正则表达式((.*))

7、事务控制器

添加路径:请求 -> 右键 -> 插入上级 -> 逻辑控制器 -> 事务控制器

目的:可以使结构更清晰

8、JDBC Connection Configuration与JDBC Request

JDBC Connection Configuration:一般用来连接数据库

JDBC Request:根据连接好的库,校验用例信息在数据库中是否真实存在

当需要到数据库校验信息时,可以:

1、添加驱动,把2个驱动包放到 ...\apache-jmeter-5.1.1\lib路径下,重新进入JMeter

2、添加配置元件:JDBC Connection Configuration

一般移动位置到线程组下方,具体用例(http请求)前

路径:线程组 -> 右键 -> 配置元件 -> JDBC Connection Configuration

练习用URL

jdbc:mysql://111.231.66.194:3307/test_project

例:

3、添加取样器:JDBC Request(JDBC 请求)

路径:线程组 -> 右键 -> 取样器 -> JDBC Request

查询语句,例:select * from userinfo where username = "${v_gename}";

想要知道查询的结果对不对可以在JDBC 请求下加个断言。

9、循环控制器

添加方法:请求 -> 右键 -> 插入上级 -> 逻辑控制器 -> 循环控制器

作用:循环

例:

10、CSV数据文件设置(注意作用域)

场景:

假如现在我们要注册,我们希望将测试数据放在一个文件中,如csv文件,在jmeter 中执行注册请求时,能从csv文件中读取数据,再完成注册

操作

1、新建一个csv文件,用来存放测试数据,新建的时候,先建一个txt 文件,将其扩展名改为.csv,如register.csv

2、打开register.csv,在里面写入测试数据

3、添加一个请求

4、添加一个 csv数据文件设置元件,将register.csv关联进来

5、在请求中,引用变量的值

6、将请求和csv数据文件设置元件放在循环控制器中,并设置循环次数(注意循环次数不能大于 csv文件中的数据行数)

7、执行,查看结果

11、函数助手对话框

打开路径:Tools -> 函数助手对话框 -> 选择对应的函数 -> ...

作用:可以使用函数生成一些语句,如随机数

以下是一些常用的 JMeter 内置函数介绍及使用示例:

  1. __time() - 获取当前时间:

    ${__time(yyyy-MM-dd HH:mm:ss,var1)}

这将返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS,并将当前时间存储到变量var1(可选)

  1. __timeShift 函数在 JMeter 中用于对时间进行偏移操作

    语法:
    ${__timeShift(格式, 时间变量, 偏移量, [语言], [变量名])}
    示例:
    ${__timeShift(yyyy/MM/dd HH:mm:ss,,P2DT-3H4M,,My_time)}

日期时间格式 字符串:指定返回的日期时间的格式。如果不指定格式,则默认返回毫秒级的时间戳。建议的格式为:yyyy/MM/dd HH:mm:ss
日期时间 :指定要进行偏移操作的原始日期时间。如果不指定日期时间,则默认使用当前时间。可以是具体的日期时间字符串,如 2023-08-09 10:00:00,也可以是其他能够表示日期时间的变量或表达式。
偏移量 :指定从原始日期时间中添加或减去的时间量。偏移量可以包含天(D)、小时(H)、分钟(M)和秒(S)的组合。偏移量的格式遵循 ISO 8601 规范,例如:

P2D 表示 +2 天

PT10H 表示 +10 小时

PT30M 表示 +30 分钟

PT5S 表示 +5 秒

P2DT3H4M 表示+2 天 3 小时 4 分钟

PT-6H3M 或 -P6H3M 表示 - 6 小时并+ 3 分钟(注意负号的用法)
语言 (可选):用于指定日期和时间的语言环境。默认情况下,使用的是默认的本地语言环境。
变量名(可选):指定一个变量名,用于存储 __timeShift 函数返回的结果。

  1. __intSum() - 计算两个或多个整数的和:

    ${__intSum(10,20)}

这将返回30。

  1. __Random() - 生成一个介于指定范围内的随机数:

    ${__Random(1,100)}

这将生成一个1到100之间的随机整数。

  1. __CSVRead() - 从CSV文件中读取值: --建议用csv数据文件设置元件来配置,功能一样
    假设你有一个名为data.csv的文件,内容如下:

    username,password
    user1,pwd1
    user2,pwd2

在JMeter中,你可以这样引用这些值:

${__CSVRead(data.csv,0)} // 返回第一列的第一个值,即"user1"
${__CSVRead(data.csv,1)} // 返回第二列的第一个值,即"pwd1"

注意,列索引从0开始。

  1. __property() - 读取JMeter属性值:

    ${__property(user.timezone)}

这将返回JMeter属性user.timezone的值。

  1. __V() - 引用JMeter变量:
    假设你有一个名为myVar的JMeter变量,你可以这样引用它:

    ${__V(myVar)}

  2. __BeanShell() - 运行BeanShell脚本:

    ${__BeanShell(2+3)}

这将执行脚本2+3并返回结果5。

  1. __split() - 分割字符串:

    ${__split(MyString,, )}

这将分割变量MyString中的值,并存储在新的变量中。

  1. __eval() - 计算表达式的值:

    ${__eval(1+2*3)}

这将计算表达式1+2*3的值,并返回结果7。

  1. __digest() - 计算摘要:

    ${__digest(MD5,mySecretKey)}

这将计算字符串mySecretKey的MD5摘要。

  1. __char() - 返回与指定整数对应的unicode字符:

    ${__char(65)}

这将返回字符'A',因为65是'A'的ASCII码。

  1. __unescape() - 对字符串进行URL解码:

    ${__unescape(%20Hello%20World)}

这将返回解码后的字符串Hello World

  1. __urlencode() - 对字符串进行URL编码:

    ${__urlencode(Hello World)}

这将返回编码后的字符串Hello%20World

  1. __UUID() - 生成一个UUID:

    ${__UUID()}

这将生成一个UUID字符串。

  1. __machineName() - 获取执行JMeter的机器名:

    ${__machineName()}

这将返回执行JMeter的机器名。

  1. __stringFromFile() - 从文件中读取字符串:

    ${__stringFromFile(myFile.txt)}

这将读取名为myFile.txt的文件内容。

  1. __P() - 读取JMeter属性值,如果属性不存在,则返回默认值:

    ${__P(myProperty,default)}

这将返回属性myProperty的值,如果该属性不存在,则返回字符串default

请注意,函数的使用可能需要根据上下文进行适当的修改,以确保它们在JMeter测试计划中正确地执行。

12、HTTP Cookie管理器

模拟浏览器的缓存信息

场景:在界面上测试时,如果登录成功(回话id会返回来放在cookie里,而cookie在浏览器缓存里存放),当你需要去查bug时,会在浏览器里找到鉴权信息,就可以直接去查看bug了但是 做接口测试时,每一个接口都是独立的,你调用一个登录接口,再调用一个查看bug的接口,如果不进行特殊处理,它们之间是没有任何关联的,后续操作就没法做

添加路径:线程组 -> 右键 -> 添加 -> 配置元件 -> HTTP Cookie管理器

使用:直接添加进来即可,一般放到线程组下方

作用:像Web浏览器一样存储和发送Cookie。如果您有HTTP请求并且响应包含cookie,则Cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。每个JMeter线程都有自己的"cookie存储区"

13、用户定义的变量

添加方法:线程组 -> 右键 -> 添加 -> 配置元件 -> 用户定义的变量

作用:用户自定义的变量,用于替换一些重复数据(如:登陆账号,密码等),便于后期维护

相关推荐
攸攸太上4 小时前
JMeter学习
java·后端·学习·jmeter·微服务
-$_$-2 天前
【黑马点评】2 商户查询缓存
java·jmeter·缓存·maven
Play_Sai2 天前
【接口测试】任务1:登录接口
软件测试·jmeter·接口测试·技能竞赛·楚怡杯·postaman
弥琉撒到我2 天前
微服务JMeter解析部署使用全流程
jmeter·spring cloud·微服务·架构
Betray3912 天前
Jmeter常用函数、逻辑控制器
jmeter
AgostoDu3 天前
jmeter操作数据库
数据库·jmeter
无所事事的海绵宝宝3 天前
Jmeter生成JWT token
网络·数据库·jmeter
小han的日常4 天前
jmeter-Critical Section Controller逻辑控制器
jmeter
付聪12104 天前
JMeter中线程组、HTTP请求的常见参数解释
jmeter
AgostoDu4 天前
jmeter中token测试
笔记·jmeter