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、用户定义的变量

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

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

相关推荐
文人sec3 天前
性能测试-jmeter9-逻辑控制器、定时器压力并发
测试工具·jmeter·性能优化·模块测试
CesareCheung4 天前
JMeter分布式压力测试
分布式·jmeter·压力测试
测试界清流4 天前
jmeter使用技巧
jmeter
春时似衿里4 天前
jmeter配置数据库连接步骤
数据库·jmeter
新知图书4 天前
JMeter的安装部署
jmeter
程序员杰哥4 天前
什么是Jmeter? Jmeter工作原理是什么?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·测试用例
乐神嘎嘎嘎4 天前
Jmeter测试
jmeter
卓码软件测评5 天前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
BatyTao5 天前
Jmeter执行数据库操作
数据库·jmeter
二宝哥5 天前
性能测试工具Jmeter之java.net.BindException: Address already in use
jmeter