JMeter入门操作简介
1、JMter简介及作用
JMter是Apache公司用Java开发的一款测试工具
接口测试、性能测试、数据库测试、java程序测试。
可以对服务器、网络或者对象模拟巨大的负载
通过带有断言的脚本来验证程序是否能返回预期的结果
2、安装启动
Java环境安装(基于java开发,需要jdk):
https://www.oracle.com/java/technologies/downloads/
JMter环境安装(需下载不带src的文件):
https://jmeter.apache.org/download_jmeter.cgi
下载后解压即可
启动:
windows下启动:安装目录/bin/jmeter.bat
linux下启动:cd/安装目录/bin  sh jmeter
中文乱码:
修改:安装目录/bin/jmeter.properties中讲encoding=改为UTF-8
默认英文,修改为中文(修改后下次启动默认还是英文)
【Options】–>【Choose language】→【Chinese(simplified)】
修改配置文件,默认语言为中文
安装目录/bin/jmeter.properties,修改配置文件中的language=zh_CN即可
3、环境变量配置(可有可无)
配置环境变量的作用
每次启动前都需要去找jmeter安装目录,在bin目录下启动文件,比较麻烦。配置环境变量后,打开terminal,输入jmeter即可启动,比较方便、减少操作
windows下配置(win10为例)
高级系统设置–>环境变量–>系统变量–>新建变量
JMETER_HOME:【jmeter安装目录】
Path变量中添加:%JMETER_HOME%\bin
mac下配置:
vim .bash_profile,编辑模式下添加以下配置
export jmeter_HOME=/安装目录/apache-jmeter-5.4.3
export PATH=PATH:PATH:PATH:jmeter_HOME/bin
执行source ~/.bash_profile命令使配置文件生效
4、目录结构
bin:可执行文件(包括不限于:Linux/windows启动文件、日志文件、系统配置文件、Linux/windows分布式测试要用到的服务器配置)
extras:扩展插件目录。提供了对Ant的支持,可以使用Ant来实现自动化测试,例如批量脚本执行,产生html格式的报表,测试运行时,可以把测试数据记录下来,jmeter会自动生成一个.jtl文件,将该文件放到extras目录下,运行"ant -Dtest=文件名 report",就可以生成测试统计报表。
licenses:jmeter证书目录
backups:默认存放jmeter保存生成的jmx文件
docs:接口文档
lib:JMeter依赖的外部jar包
printable_docs:用户手册
5、录制脚本方式
手动编辑脚本
简单的hhtp脚本或者java请求脚本(BeanShell Sampler),都可以进行手动编辑,然后创建保存后,进行修改、调试、参数化等等;
代理录制
首先创建一个线程组,再向工作台中添加一个HTTP代理服务器(选中工作台右键-添加-非测试元件-HTTP代理服务器),需要录制的客户端(手机或者电脑设置网络代理为JMeter )然后请求后进行录制;
badboy录制(第三方工具)–最快捷方式
使用badboy进行脚本录制,然后导出.jmx格式;这种录制方式录制脚本数据信息比较全面,导出信息经过简单修改就可以进行调试
6、jmeter组件(元件)
执行顺序:测试计划 > 线程组 > 配置元件 > 前置处理器 > 定时器 > (逻辑控制器)> 取样器 > 后置处理器 > 断言/监听器
作用域:可以作用于它的父级组件,同级组件,同级组件的自组件
测试计划:起点、容器
并发执行:默认并发执行
顺序执行:勾选独立运行每个线程组
线程组:虚拟用户
setUp线程组:一个测试计划中最先执行(无关位置)
tearDown线程组 :一个测试计划中最后执行(无关位置)
线程数:组内线程个数(模拟用户数量)
Ramp-Up时间(秒):准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
循环次数:每个线程循环执行取样器的次数,勾选永远则死循环
持续时间:取样器持续执行时间(会覆盖结束时间)
启动延迟:延迟x秒开始执行取样器(会覆盖启动时间)

取样器:发送请求的最小单元
http请求
一般配合http请求默认值、用户定义的变量使用(重复的信息可以写在http请求默认值中,后续http请求则不用重复填写)
名称:用于标识一个sample。建议使用一个有意义的名称
注释:对于测试没任何影响,仅用来记录用户可读的注释信息
协议:向目标服务器发送http请求时的协议,http/https大小写不敏感,默认http
服务器名称或IP:http请求发送的目标服务器名称或者IP地址
端口号:目标服务器的端口号,默认值为80,可不填
方法:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE
内容编码:默认为ISO-8859-1,需配置为utf-8
自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面,只会有最终响应结果
跟随重定向:如果发出的http请求得到响应是301/302,jmeter会重定向到新的界面,区别是,记录每个步骤的地址
keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信
对post使用multipart / from-data (post):当发送HTTP POST 请求时使用,可以上传文件信息,需要在高级→实现中选择java,才可使用
参数 --> 同请求一起发送参数(get请求)

在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”

消息体上传(post):当发送HTTP POST 请求时使用,json格式数据
文件上传(post):当发送HTTP POST 请求时使用
文件名称:文件路径
参数名称:请求参数名称
MIME类型:multipart / from-data(固定写法)注:要么填写MIME类型,要么勾选对post使用multipart / from-data且高级→实现中选择java,二者选其一
BeanShell取样器
可以实现跨线程组传值
可以配合正则表达式提取器、JSON提取器、Xpath提取器提取出来的变量,利用setProperty函数生成函数字符串

获取时使用Property函数生成变量即可

Debug Sampler(调试取样器):调试jmeter代码时使用,比如需要查看正则/json/css提取器是否提取到正确的数据
逻辑控制器:控制执行顺序
如果(if)控制器
线程组–>添加–>逻辑控制器–>如果(if)控制器
判断表达式语法:"${变量}" == “比对的值”
ForEach逻辑控制器
线程组–>添加–>逻辑控制器→ForEach控制器
输入变量前缀:如变量名为name_1、name_2、name_3、name_x···,则只输入name即可(前提是勾选了数字之前加上下划线“_”)

开始循环字段(不含):如需从1开始则填0
结束循环字段(含):如到3结束则填3
输出变量名称:给该foreach取变量名称,用时只需要${foreach变量名称}即可
循环逻辑控制器
线程组–>添加–>逻辑控制器→循环控制器
循环几次循环次数填几次即可
前置处理器:请求之前的操作
JSR223 PreProcessor
可以导入jar包,执行java代码的方法
BeanShell PreProcessor
功能基本与JSR223一致,性能差别
后置处理器:请求之后的操作
JSR223 PostProcessor
可以在Java平台上运行脚本语言.比如Groovy,JavaScript等
关键字:
ctx:线程上下文
prev:当前返回结果取样器
vars:读写对象
正则表达式提取器
引用名称:设置参数名
正则表示式:设置需要提取的结果(通用的正则表达式语法)
.匹配任意一个字符 除了\n 
*匹配前一个字符可以出现0次,1次,多次,可有可无
?匹配前一个字符出现一次或者没有出现  要么有要么没有
+匹配前一个字符至少出现一次或者多次,至少有一次
模板:如果匹配多个结果,根据模板决定提取其中的一个或多个
−1-1−1:表示取所有值
000:表示随机取值
nnn:表示取第n(n>=1)个
JSON提取器
用法
$代表跟目录
如下级遇json直接.key则可以拿到value值或者[“key”]
如下级遇列表(数组),则通过[索引]取值

引用名称:设置参数名
josn提取表达式:设置需要提取的结果,.名称或者.名称或者.名称或者[?],需要提取多个用英文分号隔开
匹配数量:匹配数字(0代表随机,1代表第一个,-1代表所有)
统计所有的变量值 (引用名称_ALL,注意区分大小写)
json提取器获取所有参数后,可以用foreach处理器进行循环,可以配合使用
Xpath提取器

断言:判断请求在某种规则下是否正确
响应断言 
断言状态码、响应体
大小断言 
响应内容的字节长度
断言持续时间 
判断响应时间
BeanShell断言
通过prev获取响应数据
获取响应数据:String jsonResult = prev.getResponseDataAsString();
处理响应code:if(“200“.quals(prev.getResponseCode()==false)) { Failure=true; }
定时器:延迟或者间隔发送请求(执行在每一个采样器(sampler)之前,无关位置)
固定:固定延迟时间
高斯:随机延迟时间(一般用于模拟真实场景)
同步:并发时使用(一般请求数除以并发数则就是同步定时器数)

配置元件:取样器配置信息
HTTP信息头管理器
在sampler中发送请求的时候,http头部信息列表会自动整合后一起发送。当http头部信息列表中的某一条信息 与sampler本身已自带的名称相同,则手动输入的信息会取代sampler自带的。访问某些有防盗链的页面时需要正确的Refer,这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
HTTP Cookie管理器
该组件可以像浏览器一样的存储和发送Cookie,如果发送一个http请求他的响 应中包含Cookie,那么Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。也可以自己设置保存Cookie
用户自定义变量
设置常用变量;比如切换服务器,切换登录用户
CSV Data Set Config(CSV数据文件设置)
csv:逗号分隔值,一种常见的数据存储格式
语法格式:变量值1,变量值2,变量值3···, 一行代表一条数据

监听器:收集测试结果
查看结果树
查看取样器的结果、请求、响应数据
如果需要对返回结果进行正则提取,可以选择查看方式为RegExp Tester,在Regular expression中测试正则表达式,查看提取结果的位置
如果需要对返回结果进行json提取,可以选择查看方式为JSON PATH Tester,在JSON PATH Tester中测试JSON表达式
聚合报告
性能指标数据
参数详解
Label:作用域内每一个http请求的名称

#Samples(样本):请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
平均值:平均响应时间——默认情况下是单个 Request 的平均响应时间
中位数:50% 用户的响应时间

90%百分位:90% 用户的响应时间
95%百分位:95% 用户的响应时间
99%百分位:99% 用户的响应时间
最小值:最小响应时间
最大值:最大响应时间
异常%:错误请求数/请求总数
吞吐量:默认情况下表示每秒完成的请求数
接收 KB/sec:每秒从服务器端接收到的数据量
发送 KB/sec:每秒从服务器端接收到的数据量
7、常用函数
计数器函数:
用户维度的计数器counter(true,),全局计数器{_counter(true,)}, 全局计数器c​ounter(true,),全局计数器{_counter(false,)}
随机数函数:
${_Random(1, 3,)} 1为最小值,3为最大值,都为闭区间
时间函数:
time(,)无参返回时间戳,{time(,)} 无参返回时间戳,time(,)无参返回时间戳,{time(yyyy-MM-dd hh:mm:ss,)} 年-月-日 时:分:秒格式
UUID函数 :通用唯一识别码
使用方式:${__UUID} 生成不重复的字符串,在同一时间是唯一的
8、jmeter调试
调试取样器
jmeter + fiddle/charles/whistle
jmeter–>http请求→高级中输入服务器名称或IP(一般是本机,localhost或者127.0.0.1),端口号(抓包工具的端口号)
抓包工具中过滤域名(只抓某个域名的请求)
执行jmeter脚本
抓包工具中查看请求(打断点/弱网等操作) 
9、fiddle/charles/whistle自动生成jmx文件(抓包后自动生成jmeter可执行脚本)
抓包(不再赘述)
过滤需要的http请求
导出saz(fiddle、whistle)/ chlsj(charles)格式文件
将saz/chlsj文件转换为jmx文件:https://github.com/dongpengfei826153155/fiddler2jmeter

将导出的jmx文件导入到jmeter中,修修补补即可使用
10、非GUI操作
有GUI为什么还要熟悉非GUI模式操作
非GUI模式下比GUI模式消耗更少的系统资源,我建议不要只关注平均响应时间,也要关注其他重要的指标,比如说检查测试流程中的每个节点,比如线程的启动时间、每秒钟执行的事务、监听器的输出(Jemter可用的插件、生成的hmtl报告、和第三方的分析工具进行对比,结论是GUI模式下你的ramp-up更慢,因为会出现一些线程已经完成了,但是其他的进程还没有开始的情况;在非GUI模式下,ramp-up会更快,所以你有更多在线的用户,所以访问到待测系统效率更高),可以试试增加循环次数,然后观察在测试期间是怎么运行的。(官方文档翻译)
前提:
配置好jmeter/ant环境变量(不然每次都得输入全路径或者需要cd到启动目录下命令执行)
命令
-n 使用非GUI方式,不能单独使用,必须和-t(指定jmeter脚本)一起使用
只会生成一个log日志文件,没有报告输出
-l 生成jtl格式的报告  例:jmeter -n -t 居家干预.jmx -l D:\log.jtl
如果需要看到响应数据和请求数据的话需要修改jmeter.propties配置文件
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
-e -o -e生成html报告,-o指定html报告的文件夹(文件夹必须为空,否则报错)
例:jmeter -n -t 居家干预.jmx -l result.jtl -e -o d:\result
11、使用jmeter + ant + jenkins实现持续集成
ant下载
http://ant.apache.org/bindownload.cgi
1.10.2 .zip archive  对应jdk8
解压,配置环境变量
系统环境变量中添加:D:\apache-ant-1.10.12\bin(自己的安装地址)
检查是否配置成功
ant -version
需要构建一个build.xml文件,放在jmx文件同级目录
修改jmeter.properties
jmeter.save.saveservice.output_format=xml
ant运行
jenkins  todo

12、连接数据库
下载Mysql jdbc驱动包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(版本是一个大版本就行)
设置JDBC Connection Configuration
Variable Name:自定义参数,在JDBC Request中会用到;
Database URL:jdbc:mysql:// 数据库IP地址:数据库端口/数据库名称;(例:jdbc:mysql://127.0.0.0:3306/mysql)如果运行报时间错误后边加上:?serverTimezone=UTC; 如果中文乱码后边加上:?useUnicode=true&characterEncoding=UTF-8
JDBC Driver Class:com.mysql.jdbc.Driver;
Username:数据库用户名;
Password:数据库密码;
线程组下添加JDBC Request
JDBC Request中Variable Name of Poll declared in JDBC Connection Configuration填写设置的JDBC Connection Configuration中的Variable Name变量名称

数据库查询结果当做参数使用
JDBC Request中为variable name设置一个变量名
添加一个调试取样器(debug sample)
查看结果树中调试取样器的结果,结果的变量名就可以直接调用该变量使用
添加http请求使用该变量

JMeter入门操作简介相关推荐

  1. jmeter 入门操作

    今天用领导交给我一个任务,有一个链接需要调用200次,但是其中的一个参数需要变化.如果要用手工,哦,NO,我不敢往下想..... 想想jmeter强大的功能,就用这个来试试吧,以前就知道jmeter功 ...

  2. HBase入门: 简介、特点、优缺点、数据结构、系统架构、入门操作、适用场景、注意事项与遇到的坑

    原文地址 https://www.cnblogs.com/Little-Li/p/7878219.html https://yq.aliyun.com/articles/54410 https://b ...

  3. Jmeter入门基础

    目录 Jmeter入门基础 前言 一.Jmeter简介 二.认识Jmeter界面 1.菜单栏 1.1.文件 1.2.编辑 1.3.查找 1.4.运行 1.5.选项 1.6.工具 1.7.帮助 2.工具 ...

  4. 2021年大数据HBase(十):Apache Phoenix的基本入门操作

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Apache Phoenix的基本入门操作 一.Pho ...

  5. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

    为什么80%的码农都做不了架构师?>>>    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2. ...

  6. TypeScript基础入门 - 函数 - 简介

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...

  7. TypeScript基础入门 - 接口 - 简介

    转载地址 TypeScript基础入门 - 接口 - 简介 项目实践仓库 https://github.com/durban89/typescript_demo.git tag: 1.0.6 为了保证 ...

  8. MoveIt!入门教程-简介

    转载: http://www.ncnynl.com/archives/201610/1028.html MoveIt!入门教程-简介 说明 MOVEit!是目前针对移动操作最先进的软件. 它结合了运动 ...

  9. Badboy入门操作手册

    Badboy入门操作手册 下载地址:http://www.badboy.com.au/ 版本:Version 2.2.5 1.安装及卸载 安装:解压,按照安装向导,安装即可. 启动:双击badboy. ...

最新文章

  1. 爬虫豆瓣top250项目-开发文档
  2. [ CodeVS冲杯之路 ] P1044
  3. vue在开发环境怎么兼容ie_Vue兼容ie9的问题全面解决方案
  4. 通过ip快速定位问题主机连接的交换机
  5. OpenGL整体概念
  6. selenium自动化测试_49自动化测试中最常见的Selenium异常
  7. Atitit.java swing打印功能 api  attilax总结
  8. 智能卡门禁管理系统_出入口门禁控制系统与消防火灾报警系统怎么联动?
  9. Java 四种线程池的用法分析
  10. 大话企业上云之第二篇
  11. 腾讯2012实习生招聘面试题:矩阵中A移动到B一共有多少走法
  12. React 使用图片验证码组件(登录验证)
  13. 最新柒上网络小说漫画系统双模板源码V4.0+TP内核
  14. HQChart使用教程92-如何创建分笔明细表
  15. 9008刷机 小米max2_小米max2线刷包_小米max2刷机包_小米max2固件包_小米max2救砖包 - 线刷宝ROM中心...
  16. 信息学奥赛一本通(C++版)在线评测系统 1967:【14NOIP普及组】螺旋矩阵
  17. 国内做市场情报公司前10名
  18. 全球5G发展洞察2022(上)
  19. centos7.2php,Centos7.2之phpadmin安装配置
  20. 鸿蒙升级后桌面背景底纹怎么弄,ps添加背景怎么弄

热门文章

  1. 弘辽科技:淘宝店铺一直没流量怎么办?淘宝网店没有流量怎么办?
  2. 强连通分支和半连通分支
  3. Java实现 蓝桥杯VIP 算法提高 现代诗如蚯蚓
  4. 【运维面试】面试官:你们公司的系统应用架构图是什么样的?
  5. 云之梦php免费教学视频下载_云知梦2017最新PHP工程师全套视频教程 laravel框架版...
  6. 68页PPT!WMS设计与配置(出入库、拣选、补货、复核……)
  7. 甘特图是什么?甘特图是用来干什么的?
  8. ui自动化测试框架_数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索
  9. PTC Creo 4.0 M150
  10. html5实践教学总结,个人实践教学总结