性能工具之 JMeter 快速入门

简介: 【5月更文挑战第10天】性能工具之 JMeter 快速入门

一、前言

JMeter 作为浏览器与web服务器之间的代理,可以捕获浏览器的请求和 web 服务器的响应,通过线程来模拟真实用户对 web 服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果。

二、下载安装

下载地址:http://jmeter.apache.org/download_jmeter.cgi

image.png
image.png

三、目录介绍

image.png

四、快速使用

GUI 启动点击:

~/bin/jmeter.bat

后台启动进程,并且提示通过命令执行方式:

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

image.png
GUI 显示:
image.png

五、创建线程组

在 TestPlan 位置点击右键选择新建线程组如图:

线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 JMeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。在 JMeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。

image.png
成功显示:

image.png
解释说明:

作用:是一个测试计划执行的开始点,里面包含 sampler,controller 等等。
参数:

  • Name:线程组的名称,可以随意修改
  • Comments:备注信息,记录一些参数设置的原因和策略可填可不填
  • Action to be taken after a Sampler error:

线程内的采样器失败后,接下来采取的动作:

  • Continue:继续执行接下来的操作
  • Start Next Thread Loop:执行下一个线程循环
  • Stop Thread:退出该线程,不在执行该线程的任何操作
  • Stop Test:等待该线程的采样结束后,结束整个测试,不会立即停止
  • Stop Test Now:立即停止整个测试

Thread Properites:线程属性

  • Number of Threads(users):线程数,也就是一共要启动多少线程用来并发执行
  • Ramp-uo Period(in seconds):多长时间将上一步设置的线程数启动完毕。设置不同的值可以验证在不同并发的情况下验证系统的性能
  • Loop Count:设置 sampler 循环的次数,勾上 Forever 后就会死循环一直执行
  • Scheduler:调度器,日程表。选上之后才能设置执行时间
  • Number of Threads * Loop Count 就是 Sampler 执行的次数,可以在 View Results Tree 中看到。

Scheduler Configuration:

  • Duration(seconnds):请求的执行时间(Loop Count 的 Forever 必须勾上才有效)
  • Startup delay(seconds):延迟时间,一般不用。但是如果想在指定的时间执行测试,可以用此配置。
  • setUp Thread Group、Thread Group 和 tearDown Thread Group3 种线程组都可以设置。

Thread Group中的执行规则

  • setUp、Thread Group 和 tearDown 串行执行

六、编写 http 请求

image.png
成功显示:
image.png
解释:用来向服务器发送 HTTP(S) 请求

参数说明:

  • Name:组件名,可以修改
  • Comment:注释信息,可写可不写

Web Server:

  • Protocol[http]:不写就是默认的 HTTP,可以根据实际情况指定
  • Server Name or IP:IP 或者域名,比如 cn.bing.com(不要加 http:// ,默认就带;不能有路径)

HTTP Request:

  • Port Number:HTTP 默认为 80,https 为 443
  • Path:/ 表示根目录
  • Content encoding:内容编码,如果请求有乱码的话可以将其配置为 UTF-8 或者 ANSI
  • 配置项:默认值即可
  • Paramters:配置请求参数,比如添加 key--àvalue、编码格式(url encode)、文件类型
  • Body data:当选择 body Data 时候并且输入 Json 请求体后 Parameters 选项不能点击。【parameters and Body Data and Files Upload】不能同时选择。
  • Files upload:上传文件,一般不用。

image.png
image.png

七、添加查看结果树

image.png

八、点击运行

image.png

九、显示结果

image.png
说明:

查看结果的常用方式

  • Text:默认的显示方式,原始的 HTML 文本
  • HTML:以类似浏览器的格式查看响应数据
  • RegExp Tester:支持正则用来做检查点或者关联使用;(在做关联的时候可以在这里做调试是否写得是否正确)
  • XPath Tester:xpath 方式提取内容;(在做关联的时候可以在这里做调试是否写得是否正确)
  • Scroll automatically:请求很多时可以自动滚屏

显示信息:

  • Sampler Result:本次请求的汇总信息
  • 请求信息:分为请求数据和请求头
  • 响应信息:分为响应数据和响应头
  • Filename:可以将执行结果保存到 Filename 指定的文件中,注意:默认保存在 JMeter 的 bin 目录下。如果勾选了后面的 Errors,那么只保存错误信息;如果勾选了 Success,那么只保存执行成功的信息;都不勾选的话保存所有的信息
  • Browser:可以打开之前保存过的测试文件,将测试信息显示到下面的 result 栏中。如果勾选了后面的 Errors,那么只显示错误信息;如果勾选了 Success,那么只显示执行成功的信息;都不勾选的话显示所有的信息

Sampler result 结果说明:

image.png

十、Summary RePort 展示

image.png
显示结果:
image.png
解释聚合报告标签的含义:

  • Label:每个 JMeter 的 element 都有一个那么属性,这个显示 name 属性的值
  • sampler:表示在本次测试中一共发出请求数,11 个用户,循环 1 次就是1

  • Average:平均响应时间,,默认情况下是单个 request 的平均响应时间,当使用了 transaction controller 时,也可以以transaction 为单位显示平均响应时间
  • Median:中位数,50 %用户的访问时间在这个时间以下
  • 90% line:90%用户的访问时间在这个时间以下
  • min:最小响应时间
  • max:最大响应时间
  • error%:本次测试出现的错误数/总的请求数
  • Throughput:吞吐量,默认情况下表示每秒完成的请求数(Request per second)
  • KB/sec:每秒从服务器接受到的数据量,相当于 LR 中 Throughput/sec 单位毫秒。

如果想生成 html 报告可以参考,如下命令生成即可:

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder

十一、参数化小试

Jmeter 参数 CSV Data Set Config 用文件做参数化
选择配置原件中的 CSV Data Set Config

image.png

显示:

image.png
参数说明:

  • Filename:文件路径。可以是相对路径也可以是绝对路径。可以是.txt文件也可以是.csv文件
  • File encoding:文件编码,默认问 ANSI,其它编码根据实际情况配置
  • Variables Names(comma-delimited):变量名,表示将每一列赋值给一个变量,有多个列时同逗号分隔,后续通过${}引用
  • Ignore first line:忽略首行
  • Delimiter(use "\t" for tab):分隔符,默认为逗号
  • Allow quoted data?:数据是否带引号,默认为false,如果数据中有引号的话就会把数据连同引号一起赋值给变量;如果为Flase的话就会把引号去掉
  • Recycle on EOF?:遇到文件结束符是否再次循环,默认为True,也就是继续从文件开头取值
  • Stop thread on EOF?:遇到文件结束符是否结束线程,默认为False也就是不停止。注意:当【Recycle on EOF?】设置为True时,此项设置无效;当【Recycle on EOF?】设置为False,此项也设置为False,那么到达文件最后在引用变量就会变为 < EOF >
  • Sharing mode:共享模式。默认为 all threads,还支持 current thread group / current thread / edit

共享模式小结:

  • all treatds:csv 文件中的数据是共享的,不管是线程数还是循环次数,都会触发接口请求参数来使用 csv 文件中不同行的变量数据
  • current thread group:在线程组内,线程数和循环次数都会触发接口请求参数变化
  • current thread:循环了数据就会变化,线程数不能决定更新csv文件中的数据,循环次数才可以

image.png

参数文件使用:

  1. 编写内容

image.png

  1. 获取结果

image.png

  1. 显示结果:

image.png

十二、BeanShell

在造数据时候,需要获取结果到保存到本地,有两种方式:

  • 第一种直接通过获取结果保存到本地
  • 第二种通过数据库导出

今天介绍第一种,通过 JMeter 中正则表达式获取:

步骤一:
image.png

第二步:
image.png

第三步:

image.png
参考代码:

FileOutputStream fps=new FileOutputStream("${outfile_online}",true);
OutputStreamWriter osw=new OutputStreamWriter(fps);
BufferedWriter bw=new BufferedWriter(osw);

bw.append("${mobile}\t${User}\t${User}\t${fd}\n");

if(bw!=null){bw.close();}
if(osw!=null){osw.close();}
if(fps!=null){fps.close();}

第四步:

image.png
获取结果:
image.png

十三、正则表达式 Regular Expression Extractor

image.png
简单写法:
image.png
正则表达式提取器说明:

  • Apply to:应用范围
  • 要检查的响应字段:样本数据源。
  • 引用名称:其他地方引用时的变量名称,我这里写的 phone,可自定义设置,引用方法:${引用名称}
  • 正则表达式:数据提取器,() 括号里为你要获取的的值。"phone":"( 相当于 LR 左边界,)","name" 相当于 LR 右边界。而括号里 \d+ 为正则表达式,用来匹配所需要获取的数据,何谓正则表达式文章末尾会附上说明
  • 模板: $$ 对应正则表达式提取器类型。-1 全部,0 随机,1第一个2第二个,以此类推,若只有一个正则一般就填写 $1$
  • 匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1 表示全部,0 随机,1 第一个,2 第二个,以此类推。若只要获取到匹配的第一个值,则填写1
  • 缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。

十四、JMeter 常用快捷键参考

快捷键 功能 备注
Ctrl + C 复制 可复制组件
Ctrl + V 粘贴 可粘贴组件
Ctrl + Shift + C 复制粘贴当前组件到下一行
Ctrl + R 运行测试计划
Ctrl + E 清空运行结果
Ctrl + T 启用/禁用当前组件 可以多选
Ctrl + F 全文搜索 一般用来搜索组件, 搜索完成后可点击Search -> Reset Search恢复
Ctrl + - 全部收起 “-“为主键盘的减号
Ctrl + Shift + - 全部展开 “-“为主键盘的减号
Ctrl + 0 创建线程组
Ctrl + 1 新增HTTP请求
Ctrl + 2 正则表达式提取器
Ctrl + 3 响应断言
Ctrl + 4 固定定时器
Ctrl + 5 Test Action 5.0更改为Flow Control Action JMeter流量控制动作
Ctrl + 6 JSR223 PostProcessor(后处理程序)
Ctrl + 7 JSR223 PreProcessor(预处理器)vars.put("key",value):将value存到jmeter变量key中,在后续请求中使用${“key”}进行引用。
Ctrl + 8 Debug Sampler
Ctrl + 9 查看结果树

十五、Linux 快速启动参考

参考代码:

#!/bin/bash

#jmeter kill and start

echo -e '\033[32m--------Jmeter---------------\033[0m'
echo "kill 掉 jmeter-server 进程................... \n"
kill -9 `ps aux | grep jmeter | grep -v grep | awk '{print $2}'`
sleep 3
cd /root/tools/apache-jmeter-3.3/bin/
echo "启动 jmeter-server"
nohup ./jmeter-server &
echo -e '\033[32m------------欢迎使用-----------------\033[0m'
目录
相关文章
|
3月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
126 2
|
4月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【8月更文挑战第5天】随着互联网应用规模增长,性能测试至关重要。本文介绍如何利用Python结合Apache JMeter和Locust构建高效可定制的性能测试框架。JMeter广泛用于负载测试,通过模拟大量虚拟用户并发访问来评估性能。Locust基于Python,通过编写简单脚本模拟HTTP请求,特别适合Web应用测试,比JMeter更灵活易扩展。Python作为胶水语言简化测试脚本编写并流畅自动化流程。文章提供JMeter命令行测试和Locust脚本示例,并展示如何用Python自动化执行和整合测试结果,最终帮助应用在高负载下稳定运行。
107 1
|
1月前
|
Java Shell Apache
Jmeter快速入门
Jmeter快速入门
34 1
Jmeter快速入门
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
79 2
|
3月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
123 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
76 3
|
4月前
|
存储 Linux 数据库
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
【8月更文挑战第7天】性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
84 1
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
|
4月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
147 4
|
4月前
|
测试技术 Go API
[jmeter]快速入门
[jmeter]快速入门
[jmeter]快速入门
|
4月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
110 1