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提供的所有的函数,内置的和自定义的都有。

随机数函数

  1. 在菜单栏,点击函数助手对话框 。
  2. 在弹出的窗口中,下拉选择随机数函数。
  3. 对于随机数范围的限制,和将随机数函数赋值给一个变量(可选参数,可以不写),方便别的地方引用。
  4. 点击生成,左侧的输入栏就是jmeter生成的随机数函数,把它拷贝走即可。
  5. 当你点击生成的时候,自动的执行了该函数,随机生成了一个随机数。

使用截图

上图,展示了函数的两种用法,第一是直接引用即可,第二种是通过变量的形式引用。

变量的引用方式适用于,此次请求需要一个随机数,但在此次请求中这个随机数要多处使用,并且值是一样的。 来看是否应用成功:

随机字符串函数

选择 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 工具学习 未完待续的更多相关文章

  1. springcloud-netflix组件学习-未完待续!!!

    SpringCloud学习 Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现 ...

  2. 浅析Oracle PL/SQL 学习--未完待续

    这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...

  3. 【tomcat】sessionId学习(未完待续)

    这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...

  4. 可持久化Treap(fhq Treap,非旋转式Treap)学习(未完待续)

    简介:     Treap,一种表现优异的BST 优势:     其较于AVL.红黑树实现简单,浅显易懂     较于Splay常数小,通常用于树套BST表现远远优于Splay     或许有人想说S ...

  5. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  6. Java开发中的23+2种设计模式学习个人笔记(未完待续)

    注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...

  7. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

  8. 堆学习笔记(未完待续)(洛谷p1090合并果子)

    上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...

  9. 省钱版----查找 IoT 设备TTL线序__未完待续

    作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...

随机推荐

  1. 解决vscode打开空白的问题

    环境 :win7,最新vscode 问题:打开后窗口全黑,但是原按钮对应位置还有触摸手势,显示tag等,卸载重装等无效,如上图 最终方案: 启动方式后加 --disable-gpu 解决思路(其余参考 ...

  2. TCP报头格式

    1.端口号:用来标识同一台计算机的不同的应用进程.     1)源端口:源端口和IP地址的作用是标识报文的返回地址.     2)目的端口:端口指明接收方计算机上的应用程序接口. TCP报头中的源端口 ...

  3. 8. 使用Zuul构建微服务网关

                    使用Zuul构建微服务网关 8.1. 为什么要使用微服务网关 8.2. Zuul简介 8.3. 编写Zuul微服务网关 8.4. Zuul的路由端点 8.5. Zuul ...

  4. oracle 中INSTR 函数和SUBSTR函数的使用

    INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字符的结尾就结束. ...

  5. Netfilter 之 连接跟踪钩子函数分析

    ipv4_conntrack_defrag ipv4_conntrack_defrag对输入包进行检查,如果是分片包,则调用nf_ct_ipv4_gather_frags函数进行重组: static ...

  6. Nginx之进程间的通信机制(Nginx频道)

    1. Nginx 频道 ngx_channel_t 频道是 Nginx master 进程与 worker 进程之间通信的常用工具,它是使用本机套接字实现的,即 socketpair 方法,它用于创建 ...

  7. How to delete System Profiles for those registered with Red Hat Subscription Management (RHSM)?

    Environment Red Hat Customer Portal Certificate Based Subscription Red Hat Subscription Management ( ...

  8. 黑马vue---21-22、总结

    黑马vue---21-22.总结 一.总结 一句话总结: · 在 VM 实例中,如果要访问 data 上的数据,或者要访问 methods 中的方法, 必须带 this · 在 v-for 要会使用 ...

  9. Exponentiation(求高精度幂)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 175340   Accepted: 42341 ...

  10. linux内核中有哪些子系统(框架)呢?

    注意: 分析用的linux内核版本为5.1.3 1. RTC子系统 2. Remote Processor子系统 3. Remote Processor Message子系统 4. SCSI子系统 5 ...