一、Jmeter下载安装配置
1.JMeter介绍
JMeter是目前行业内用的比较多的一个开源测试工具,主要用于负载测试、性能测试、回归测试等,由Java语言编写,要依赖Java环境来运行(需要提前配置Java环境)。
主要特点:
- 开源性质:JMeter 是完全免费的,并且它的源代码可以被任何人查看、修改和分发。
- 多协议支持:除了Web服务,JMeter 还支持通过HTTP、HTTPS、FTP、JDBC、LDAP、SOAP等协议进行测试。
- 用户界面:它有一个基于Java的GUI界面,使得创建和执行测试计划更加直观。
- 脚本化测试:JMeter 允许用户通过BeanShell、JSR223脚本、Jython等编写脚本来进行复杂的测试。
- 灵活的测试计划:用户可以创建包含多种不同类型采样器的测试计划,以模拟真实的用户操作。
- 报告和可视化:JMeter 提供了多种方式来查看测试结果,包括图形、表格、日志和XML文件等。
- 插件扩展: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"}
操作
- 先确定要从哪个文本字符串中提取哪一部分信息,然后确定要提取信息的左右边界,左右边界不能变化,且是唯一的,
- 将带左右边界的串拿出来 ","token":"b94d67f7fb554cf09c172ba8675aeec5"} 将要提取的信息用
(.*)
替换,替换之后的串就是我们要用的正则表达式:","token":"(.*)"} - 提取token:"token":"(.*)"}
- 提取 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 内置函数介绍及使用示例:
-
__time()
- 获取当前时间:${__time(yyyy-MM-dd HH:mm:ss,var1)}
这将返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS
,并将当前时间存储到变量var1(可选)
-
__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 函数返回的结果。
-
__intSum()
- 计算两个或多个整数的和:${__intSum(10,20)}
这将返回30。
-
__Random()
- 生成一个介于指定范围内的随机数:${__Random(1,100)}
这将生成一个1到100之间的随机整数。
-
__CSVRead()
- 从CSV文件中读取值: --建议用csv数据文件设置元件来配置,功能一样
假设你有一个名为data.csv
的文件,内容如下:username,password
user1,pwd1
user2,pwd2
在JMeter中,你可以这样引用这些值:
${__CSVRead(data.csv,0)} // 返回第一列的第一个值,即"user1"
${__CSVRead(data.csv,1)} // 返回第二列的第一个值,即"pwd1"
注意,列索引从0开始。
-
__property()
- 读取JMeter属性值:${__property(user.timezone)}
这将返回JMeter属性user.timezone
的值。
-
__V()
- 引用JMeter变量:
假设你有一个名为myVar
的JMeter变量,你可以这样引用它:${__V(myVar)}
-
__BeanShell()
- 运行BeanShell脚本:${__BeanShell(2+3)}
这将执行脚本2+3
并返回结果5。
-
__split()
- 分割字符串:${__split(MyString,, )}
这将分割变量MyString
中的值,并存储在新的变量中。
-
__eval()
- 计算表达式的值:${__eval(1+2*3)}
这将计算表达式1+2*3
的值,并返回结果7。
-
__digest()
- 计算摘要:${__digest(MD5,mySecretKey)}
这将计算字符串mySecretKey
的MD5摘要。
-
__char()
- 返回与指定整数对应的unicode字符:${__char(65)}
这将返回字符'A',因为65是'A'的ASCII码。
-
__unescape()
- 对字符串进行URL解码:${__unescape(%20Hello%20World)}
这将返回解码后的字符串Hello World
。
-
__urlencode()
- 对字符串进行URL编码:${__urlencode(Hello World)}
这将返回编码后的字符串Hello%20World
。
-
__UUID()
- 生成一个UUID:${__UUID()}
这将生成一个UUID字符串。
-
__machineName()
- 获取执行JMeter的机器名:${__machineName()}
这将返回执行JMeter的机器名。
-
__stringFromFile()
- 从文件中读取字符串:${__stringFromFile(myFile.txt)}
这将读取名为myFile.txt
的文件内容。
-
__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、用户定义的变量
添加方法:线程组 -> 右键 -> 添加 -> 配置元件 -> 用户定义的变量
作用:用户自定义的变量,用于替换一些重复数据(如:登陆账号,密码等),便于后期维护