jmeter 工具学习 未完待续
about
Apache JMeter是Apache组织的开源项目,是
一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于
web应用测试,后来逐渐的扩展到其他领域
jmeter可以用于对静态和动态的资源(文件、Servlet、Perl脚本、
Java对象,数据库和查询、FTP服务器或者是其它资源)的性能进行
测试。jmeter可以用于分析不同压力条件下的总体性能情况。也可以使用jmeter提供的图形化界面,分析性能指标。
jmeter环境配置
前置条件:必须配有Java如果没配转这篇博客
打开下面链接进行下载
官网:https://jmeter.apache.org/download_jmeter.cgi
历史版本:https://archive.apache.org/dist/jmeter/binaries/
将jmeter文件解压到某个文件夹下 (前提java环境已经配好) 注意:安装目录不许有空格和中文及特殊字符
现在你点击jmeter安装目录中的bin目录下的jmeter.bat 文件,已经可以成功的启动jmeter了。
jmeter已成功启动。
为了让我们更方便的启动,所有要添加环境变量(使其在cmd就可以直接启动)。
将jmeter的安装目录添加到环境变量中,我的jmeter安装目录是G:\software\apache-jmeter-5.2.1 。
在控制面板 ▶ 所有控制面板 ▶ 系统 ▶ 高级系统设置 ▶ 环境变量 ▶ 系统变量 中选择新建 ,将变量名和变量值按照下图所示添加进去即可。
(可选操作,但强烈建议)添加****CLASSPATH
还是控制面板 ▶ 所有控制面板 ▶ 系统 ▶ 高级系统设置 ▶ 环境变量 ,在系统变量 列表中新建(没有classpath)或者追加(存在classpath)变量值:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
ps:jmeter-4.0还要添加一个%JMETER_HOME%\lib\logkit-1.2.jar路径,但5.2.1版本我没找到,暂时不管它
这一步是将jmeter的bin目录添加到环境变量中,这一步就无需多言了吧。
相关参数修改
这一步是将jmeter的bin目录添加到环境变量中,这一步就无需多言了吧。
更改jmeter语言文字 与编码
ps注意点
这个选项Windows和Mac都一样。但这只是临时,再重新打开,又会变成默认语言了。想要永久更改,需要修改G:\software\apache-jmeter-5.2.1\bin(安装目录的bin目录) 的jmeter.properties 文件,将其中的默认language=en 修改为language=zh_CN ,点击保存即可。
修改编码
同样是jmeter.properties 文件,修改其中的sampleresult.default.encoding 字段为utf-8。
sampleresult.default.encoding=utf-8
目录结构说明
当你在安装完毕之后,会看到这样的一个目录结构(以Windows平台为例):
来看看各目录中的一些重要的文件及说明。
jmeter主要元件
测试计划:可以理解为盛放所有测试用例集的容器。
线程组:测试计划右键可以新建线程组,具体的接口用例可以在线程组内创建并且执行。
监听器:当执行了接口请求,如何查看响应情况呢,就在监听器中选择查看结果树即可。
断言:无需多言,用来对接口做断言的。
快速上手
我们们以java项目为列子
带参数的get请求
先添加一个线程组
修改线程组名称如图所示
在通用请求 中添加一个HTTP请求取样器。
配置请求相关参数。
这里需要说明的是,由于当前请求需要携带参数,这里可以有两中方式添加参数,如上图所示,可以以key:value的形式或者跟url后。
另外,关于ip和端口为什么和url分开写,这是因为一个项目在不同的阶段的ip和端口是不同的,这么写是为了方便,
配置好了就可以执行了,
但是执行结果从哪看呢?这里还需要添加一个监听器,也就是察看结果树,添加方式 如下图所示。
点击菜单栏的运行按钮(下图中3号),在察看结果树 中就可以看到执行的结果了。
图中各编号说明
\1.如果提示你是否保存测试计划,就点击保存,或者点击上图中的 1 自己保存。
\2. 切换按钮,当然我喜欢称呼它为注释按钮。如果在测试计划中,有多个线程组,你不想让某个线程组执行的 话,就点击 2 将当前线程组注释掉,也就是当前线程组不会执行了,再次选中当前线程组再次点击 2 是取消注释。
\3. 是执行按钮,你看情况选择哪个执行按钮。
\4. 如果你重复执行测试用例的话,察看结果树中就会保存每次执行的用例执行结果,想要清空就选择4就对了。
\5.是当前测试计划中的用例执行情况。这里就一个线程组中包含一个请求,所以就一条。清空也是两个按钮,你 看情况选择即可。
key:value格式的post请求
接口项目中的通用练习接口中的:/pinter/com/login
参数是k:v 格式的。
点击通用请求 线程组,添加一个HTTP取样器,相关参数设置如下图。参数在参数 选项以key:value格式填充。
现在就可以点击运行了,在察看结果树中
可以看到,刚才的get请求也执行了。你要不想要get请求执行,可以点击切换按钮注释掉它。
参数为k=json的POST接口
再来看另一种post请求,它跟刚才的post请求一样,都是k:v格式的参数,只是value稍显不一样,它是json类型的。
url还是通用练习接口中的:/pinter/com/buy
接口参数配置如下图
来看执行结果
没有问题。
参数为json的POST接口
还是通用练习接口中的post类型的url /pinter/com/register
接口参数设置如下图
ps接口的其他参数该怎么设置怎么设置,
需要说明的是json类型的参数需要放在消息体数据 中,必须是标准json格式的。
接口的其他参数该怎么设置怎么设置,需要说明的是json类型的参数需要放在消息体数据 中,必须是标准json格式的。
![img](file:///C:\Users\86131\AppData\Local\Temp\ksohtml4468\wps30.png)现在点击运行,走你!
![img](file:///C:\Users\86131\AppData\Local\Temp\ksohtml4468\wps31.png)
报错了,415,error是不支持的媒体类型。什么原因呢,本次请求遵循的是HTTP协议,它默认识别k:v格式的参数,
但我们携带的是json类型的,它识别不了,怎么解决呢?
那就是再发请求的时候header头中携带一个标识,标识是Content-Type: application/json;charset=UTF-8
,告诉它解析json类型的参数。
选中当前的接口,右键如下图添加一个HTTP信息头管理器。添加标识。需要注意的是,这个http信息头管理器 是在当前接口中的,也就是只作用于当前接口,请放心使用。再来执行该接口就解决了这个问题。
![img](file:///C:\Users\86131\AppData\Local\Temp\ksohtml4468\wps39.png)
ps重要
纯josn数据要注意添加http请求头
jmeter超时处理
在接口请求中一般会遇到超时问题,超时问题一般可以分为请求超时,客户端发一个请求,怎么也无法建立连接。响 应超时是客户端怎么也接收不到服务端返回的数据。
那在jmeter中如何设置呢?又要设置哪些参数呢?
例如下图所示的http请求中,在高级选项中,可以设置两个两个参数:
- 实现选项,有httpclient 和java实现的http请求。 httpclient 是默认的请求方式,我们该选项保持默认即可。
- 超时选项有两个参数,请求超时和响应超时
超时单位是毫秒,1秒等于0.001毫秒
如下图设置
一般的,在接口请求中,出现TimeOut 情况,如果请求本身写的没有问题的话,通常是服务端问题,去服务端查问题即可。
断言
响应断言
选择线程组 ▶ 添加 ▶ 断言 ▶ 响应断言 。
断言作用的范围与其作用域有关
响应断言相关参数填充完毕,那么该响应断言作用于当前线程组内的每一个请求,上面的预期值是"code":"0" ,那执行结果都会通过,如下图,察看结果树中一片绿代表都通过了。
现在,如果我们将预期值修改为"message":"success" ,再重新执行,会发现有个请求没有通过,原因是接口返回值的字段与预期不符,它是"message":"注册成功" 而不是"message":"success"
json断言
!在工作中,难免遇到判断某个较深路径路径中的某个值,比如下面这样的,判断json字符串中data 下面的skuName
这个key是否存在,或者判断key对应的value是否符合预期值。
这就用到json path
![img](file:///C:\Users\86131\AppData\Local\Temp\ksohtml9344\wps1.png)json-path:https://github.com/json-path/JsonPath
怎么用呢?来几个练习:
1$.message
2# $代表整个json字符串
3$.data.skuName # 获取json字符串中data下的skyName
一路点下去就行了,这里不存在同级路径下key重复的问题。来看jmeter中怎么用,以线程组中get请求用例为例。
断言某个路径下的key是否存在
新建一个json断言
我们来断言$.data.message 这个key是否存在
很明显,会执行失败, $.data 下没有message 这个key 下面是结果图。
换一个断言$.data.skuName
是否存在。答案是肯定的
断言某个路径下的key值是否符合预期
那么现在需求是判断$.data.skuName 对应的值是ptest-1 么,怎么断言呢?按照如下图的操作即可。
添加判断value,并且填写value值即可(上图如示)。执行也是成功的。
自定义变量
看图所示 发现一个问题
现在我们的项目在本地运行,测试用例中的ip和端口这么写没问题,然后我们就写了好几百个 用例 然后,项目上线了,IP和端口变了,我们的用例是不是都要一个个的修改成新的?是的!但是,这就太麻烦了,所以,我们要学习一种新的方式,就像写配置文件一样,将ip和端口之类的容易变的值定义成变量,然后在脚本 中引用变量,将来有变化的话,我们直接修改变量对应的值就完了
在测试计划 的用户定义的变量 中,我们在这里定义一些变量,然后其他的地方用到就可以直接引用了 如下图
引用方式使用${变量}
就可以 下图使用示例
调试取样器
查看jmeter在执行请求中都使用了哪些变量?(比如我们要查看ip和端口这两个变量。那就是使用调试取样器)
创建调试取样器
调试取样器无需添加什么配置,它主要配合察看结果树来使用
点击运行当前线程组,然后察看结果树中会发现调试取样器选项。
如上图,我们在这里找到ip和端口两个变量,当然还有其他的变量 请保证变量名的唯一性
作用域
作用域这个概念,说简单也简单。比如,察看结果树,如果它位于线程组下面,跟其他的请求用例同级,那它作用于 所有的请求;如果它位于某个请求下面,那它只作用于该请求:如果它跟线程组同级,那么它作用于所有的线程组,其他元件也是一样的。
导入导出jmx脚本
当你点击保存按钮的时候,在本地就生成了一个jmx文件 如下图所示
那怎么引入呢,也非常的简单,直接拖到jmeter中就行了
参数化
jmeter内置了很多函数来供我们使用,比如:
- 随机数函数
- 随机字符串函数
- 时间戳函数
怎么用呢?在你的菜单栏,有个函数助手对话框,里面包含了jmeter提供的所有的函数,内置的和自定义的都有。
随机数函数
- 在菜单栏,点击函数助手对话框 。
- 在弹出的窗口中,下拉选择随机数函数。
- 对于随机数范围的限制,和将随机数函数赋值给一个变量(可选参数,可以不写),方便别的地方引用。
- 点击生成,左侧的输入栏就是jmeter生成的随机数函数,把它拷贝走即可。
- 当你点击生成的时候,自动的执行了该函数,随机生成了一个随机数。
使用截图
上图,展示了函数的两种用法,第一是直接引用即可,第二种是通过变量的形式引用。
变量的引用方式适用于,此次请求需要一个随机数,但在此次请求中这个随机数要多处使用,并且值是一样的。 来看是否应用成功:
随机字符串函数
选择 RandomString 随机字符串函数。
几个参数配置随机字符串的长度,从哪些 备选字符生成字符串(缺点是,不支持什么a-zA-Z0-9这种),也就是说我们的备选字符是abcd ,那么生成的随机字符串就是从abcd 中生成的;最后一个参数同样是起一个可选变量,方便引用。
使用示例
现在我们在/pinter/com/register 这个接口中使用,这个接口需要携带参数是:
{"userName":"test","password":"1234","gender":1,"phoneNum":"110","email":"beihe@163.co m","address":"Beijing"}
那能否把userName 替换成随机函数,可以这样:
{"userName":"${ RandomString(4,abcd,r_str)}","password":"1234","gender":1,"phoneNum": "110","email":"beihe@163.com","address":"Beijing"}
![img](file:///C:\Users\86131\AppData\Local\Temp\ksohtml9344\wps17.png)
注意,你这里可能有疑问, "test" 是一个字符串,在使用函数替换的时候,要不去掉两边的引号, 答案是不用去掉。
来看是否应用成功
CSV文件读取
jmeter 工具学习 未完待续的更多相关文章
- springcloud-netflix组件学习-未完待续!!!
SpringCloud学习 Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现 ...
- 浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
- 【tomcat】sessionId学习(未完待续)
这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...
- 可持久化Treap(fhq Treap,非旋转式Treap)学习(未完待续)
简介: Treap,一种表现优异的BST 优势: 其较于AVL.红黑树实现简单,浅显易懂 较于Splay常数小,通常用于树套BST表现远远优于Splay 或许有人想说S ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...
- 堆学习笔记(未完待续)(洛谷p1090合并果子)
上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...
- 省钱版----查找 IoT 设备TTL线序__未完待续
作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...
随机推荐
- NIO学习总结
第一.NIO概述 java.nio 全称 java non-blocking IO,是指 JDK 提供的新 API.从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 N ...
- 【洛谷2050】 [NOI2012]美食节(费用流)
大家可以先看这道题目再做! SCOI2007修车 传送门 洛谷 Solution 就和上面那道题目一样的套路,但是发现你会获得60~80分的好成绩!!! 考虑优化,因为是SPFA,所以每一次只会走最短 ...
- ORA-28000
oracle11g中默认设置了 “FAILED_LOGIN_ATTEMPTS=10次”,当输入密码错误次数达到设置值将导致此,该用户会自动锁住. 1. conn sys/oracle as sysdb ...
- 03 MySQL之数据类型和运算符
01-数据类型 MySQL支持多种数据类型,主要有 数值类型.日期/时间类型和字符串类型. 1.1 整数类型 1.2 浮点数类型和定点数类型 单精度浮点类型(FLOAT)和双精度浮点类型 (DOUBL ...
- RabbitMQ学习之:(十二)在Node.js环境下使用RabbitMQ
学,以致用.找了半天Node.js下RabbitMQ的库,看上去都不太趁手,直到最后找到了amqp库,看上去倒还不错,照着例子,写了第一个RabbitMQ的客户端. 首先,使用 npm install ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战
笔记 5.服务注册和发现Eureka Server搭建实战 简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍 官方文档:http://clou ...
- java(SSM)上传文件到七牛云(对象存储)
项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...
- linux 中的命令是什么?执行命令的几种方式?如何自己创建命令?
linux 中的命令是什么? 命令是可执行的二进制程序 执行命令的几种方式? ./test.sh #相对路径执行 /data/test.sh ...
- 说说mysql的存储引擎,有什么区别?索引的介绍
InnoDB 支持ACID事务,支持事务的四种隔离级别,串行化,可重复读,读已提交,读未提交. 支持行级锁以及外检约束:所以可以支持写并发. 不存储总行数. 逐渐索引采用聚集索引,索引的数据域存储数据 ...
- 《ThinkPHP 5.0快速入门》 基础和路由
一.基础: 创建项目:conposer create-project topthink/think tp5 --prefer-dist 创建项目模块:php think build --module ...