Jmeter安装使用

JMeter是 Apache 组织开发的基于Java的开源软件,用于对系统做功能测试和性能测试。

下载 JMeter

它是绿色版无需安装,解压到本地目录即可。
使用前提:需要安装JDK8以上才能使用 JMeter

配置环境

1. 新建JMETER_HOME变量,添加 JMeter 所在目录,如:D:\SoftWare\apache-jmeter-5.6.2
2. 在 PATH 添加下面三个路径:
  • %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
  • %JMETER_HOME%\lib\jorphan.jar
  • %JMETER_HOME%\lib\logkit-2.0.jar

启动验证

JMeter有三种启动方式:(均在bin目录下)

  • 1. 双击 jmeter.bat
  • 2. 双击 ApacheJMeter.jar(推荐)
  • 3. 命令行输入: java -jar ApacheJMeter.jar

汉化配置

临时性: 启动JMeter → 选择菜单 ‘Options’ → Choose Language → Chinese (Simplified)
永久性:找到 jmeter 安装目录下的 bin 目录,打开 jmeter.properties文件,大概第39行位置,修改 language=zh_CN,再重启JMeter即可。

JMeter元件及执行顺序

同一作用域下,元件执行顺序:配置元件 - 前置处理器 - 定时器 - 取样器 - 后置处理器 - 断言 - 监听器
线程组的分类
  • setup线程组:前置处理,初始化
  • 普通线程组:编写脚本
  • teardown线程组:后置处理,环境恢复等

案例:执行顺序

下图的执行顺序:定时器1 - 请求1 - 定时器1 - 定时器2 - 请求2 - 定时器1 - 定时器3 - 请求3

案例:基本使用

先新建一个线程组,里面添加请求、察看结果树。。。

查看结果树:线程组内的所有请求结果,都在这儿查看。

参数化

参数化的设置有以下几种方式:
  • 用户定义的变量
  • 用户参数
  • CSV数据文件设置(灵活,业务测试常用)
  • 函数的方式(灵活,业务测试常用)

1. 用户定义的变量

用户定义的变量,是全局变量。作用域针对的是测试计划

添加方式:测试计划 → 线程组 → 配置元件 → 用户定义的变量

2. 用户参数

添加方式:测试计划 → 线程组 → 前置处理器 → 用户参数

3. CSV数据文件设置

添加方式:测试计划 → 线程组 → 配置元件 → CSV 数据文件设置
CSV数据文件:在本地新建,编写数据。比如,下图有三组数据:
设置循环次数:3组数据就3次
导入文件,设置变量名,英文逗号分隔
忽略首行:True为忽略,False为不忽略,默认值:False
编写请求,变量名赋值给请求参数

函数(__counter)

计数函数,一般做执行次数统计使用;

位置:在菜单中选择 → 工具 → 函数助手对话框

TRUE,每个用户有自己的计数器;FALSE,使用全局计数器

通过计数器做参数化

添加方式:线程组 → 配置元件 → 计数器

线程组设置:设置循环次数

HTTP请求:引用变量名

查看结果树:共5次请求,每次传递的 number 都不一样;由于最大值为4,所有第五次的 number 又从头 100000001 开始了。

 断言

JMeter中的几种断言方式

  • 响应断言
  • JSON断言
  • 持续时间断言(Duration Assertion)

1. 响应断言

添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 断言 → 响应断言
Apply to:适用范围
  • Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器;
  • Main sample only: 仅作用于父节点取样器;
  • Sub-samples only: 仅作用于子节点取样器;
  • JMeter Variable: 作用于jmeter变量(输入框内可输入jmeter的变量名称);
测试字段
  • 响应文本: 来自服务器的响应文本,即响应体,不包括任何HTTP头
  • 响应代码: 响应的状态码,例如:200
  • 响应信息: 响应的信息,例如:OK
  • 响应头: 响应头
  • 请求头: 请求头
  • 请求数据: 请求数据
  • URL样本: 响应的URL
  • 文档(文本): 响应的整个文档
  • 忽略状态:忽略返回的响应状态码
  • 请求数据:请求体数据
模式匹配规则
  • 包括:文本包含指定的正则表达式
  • 匹配:整个文本匹配指定的正则表达式
  • 相等:整个返回结果的文本等于指定的字符串(区分大小写)
  • 字符串:返回结果的文本包含指定字符串(区分大小写)
  • 否:取反
  • 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK) 
场景
  • 请求:https://www.baidu.com
  • 检查:让程序检查响应数据中是否包含“百度一下,你就知道” 

2. JSON断言

作用域:对响应结果为JSON数据进行的断言。
添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 断言 → JSON断言
场景
  • 要求:Post请求,URL:https://ihrm.itheima.net/api/sys/login,请求体:{mobile: "13800000002", password: "hm#qd@23!"}
  • 检查:断言响应体数据中的message为”登录成功“
注意:请求参数值有中文,则勾选 “ 编码? ”
看到绿标,就是断言成功了。

3. 持续时间断言

作用:检查HTTP请求的响应时间是否超出要求范围。
添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 断言 → 断言持续时间
持续时间(毫秒):在将每个响应标记为失败之前允许的最大毫秒数

关联

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。 JMeter可以通过 “后置处理器” 中的一些组件来处理关联。
那么,提取请求返回的数据有以下几种方式
  • 正则表达式提取器
  • XPath提取器
  • JSON提取器

1. 正则表达式提取器(任意响应数据)

正则表达式:就是一个公式,或者说一套规则,使用这套规则可以从任意字符串提取出想要的数据内容。
公式格式:左边界(.*?)右边界
  • .:是通配符,可以代表任意字符(除换行回车)
  • *:代表前面的字符出现0次或者多次
  • .*:贪婪匹配,找到左边界值后,往右查找右边界,找到最后面的右边界,中间的所有数据都被记录下来
  • ?:非贪婪匹配,找到左边界后,往右查找右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
应用:比如提取HTML文本内容
添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 后置处理器 → 正则表达式提取器
举例一:
  • 请求:https://www.itcast.cn/ ,获取网页的 title 值
  • 请求:https://www.baidu.com/ ,把获取到的 title 作为请求参数

举例二:

获取传智播客首页的地址,把第3个校区地址作为参数传递。

案例三(推荐):案例二的另一种方法

添加 调试取样器(Debug Sampler):作用是,查看数据参数。

正则表达式提取器:把匹配数字设为 -1(表示获取全部数据,列表)

HTTP请求-百度:路径设为 /S?wd=${address_3},(列表数据中的第三个)也能达到同样效果。

2. XPath提取器(HTML标签类响应数据)

场景:针对HTML格式的响应数据,可以使用XPATH提取器进行提取。
添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 后置处理器 → XPath提取器
XPath query:写法举例
  • //a : 找出所有的a标签
  • //a[@id='kw'] : 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
  • //b[@name='kw'] : 在HTML页面中,找出b标签(有一个属性为name,且name的值为kw)
  • //title : 获取所有 title 标签

3. JSON提取器(json响应数据)

场景:用于 json 格式的响应数据,可对 json 内容进行提取。
添加方式:测试计划 → 线程组 → HTTP请求 → (右键添加) 后置处理器 → JSON提取器

4. 跨线程组关联(JMeter属性)

当有依赖关系的两个请求(一个请求的入参是另一个请求返回的数据),放入到不同的线程组中时,就不能使用提取器保存的变量来传递参数值,而是要使用Jmeter属性来传递。
案例:
  • 第一个线程组:发起登录请求,获取响应数据中的message值,将其设置为JMeter属性并提取
  • 第二个线程组:发起百度请求,请求参数为JMeter属性对应的值。

JSON提取器:提取JSON格式的响应数据:$.message,设置变量名:message1

setProperty函数:将json提取的变量名,设置为JMeter属性:P_message,生成函数字符串

BeanShell取样器:提取setProperty函数生成的函数字符串

property函数:读取属性

百度请求:将property函数生成的函数字符串,当作请求参数

结果:从上往下运行线程组,由下图可知,message已被设置为JMeter属性,并传递到第二个线程组中作为请求参数了。

脚本录制

不好用,抓取到的请求,还要去整理出自己需要的。
添加方式:测试计划 → 非测试元件 → HTTP代理服务器

1. 创建测试计划,添加 ”HTTP代理服务器“,添加 ”线程组“,添加 ”查看结果树“。

2. 配置 ”HTTP代理服务器“

  • 配置端口:8899(随意)
  • 目标控制器:抓取的HTTP请求的保存位置
  • 请求过滤 - 排除模式:过滤一些请求,如css、js、gif。。。

3. 本地电脑 - 手动代理

4. 启动录制

HTTP代理服务器 - 启动

启动后,去浏览器操作页面即可,抓取到的HTTP请求会保存在 ”线程组“ 下。

连接数据库

使用场景

添加MySQL JDBC驱动 jar 包

使用 jmeter 连接数据库,需要先把 MySQL JDBC 驱动 jar 包存放在下面 jmeter 的 lib/ext 目录下,重启 jmeter。

如何下载MySQL的JDBC驱动包_mysqljdbc驱动包下载_普通网友的博客-CSDN博客

配置数据库连接信息

添加方式:测试计划 → 线程组 → 配置元件 → JDBC Connection Configuration
添加方式:测试计划 → 线程组 → 取样器 → JDBC Request

案例:把从数据库查询到的商品id,传递给请求当参数。

上图,查询返回的 goods_id 是一组数据,用 ${goods_id_1} 表示取其数据的第一个。

调试取样器:能看到查询返回结果的组成。

这里 goods_id_1 = 1 被用上了。

 

 

 

 

 

posted @ 2023-09-22 23:20  鹿先森JIAN  阅读(244)  评论(0编辑  收藏  举报