JMeter学习笔记(全篇)

一、Jmeter简介

1.Jmeter的目录结构

  1. /bin 目录(常用文件介绍)
  2. examples:目录下包含Jmeter使用实例
  3. ApacheJMeter.jar:JMeter源码包
  4. jmeter.bat:windows下启动文件
  5. jmeter.sh:Linux下启动文件
  6. jmeter.log:Jmeter运行日志文件
  7. jmeter.properties:Jmeter配置文件
  8. jmeter-server.bat:windows下启动负载生成器服务文件
  9. jmeter-server:Linux下启动负载生成器文件
  10. /docs目录——Jmeter帮助文档
  11. /extras目录——提供了对Ant的支持文件,可也用于持续集成
  12. /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
  13. /licenses目录——软件许可文件,不用管
  14. /printable_docs目录——Jmeter用户手册

2、Jmeter线程组基本操作 

2.1 线程组是什么

进程: 一个正在执行的程序对应一个进程
线程: 一个进程有多个执行线程
线程组: 按照线程性质对线程分组
三者关系: 一个进程有多个线程组,一个线程组有多个线程
测试计划—线程组—线程组属性中的线程数
并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致
顺序执行:按照线程的启动顺序挨个执行
默认情况下,线程组中的线程是并发执行
每一个线程都要执行组内的http请求
设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组)
线程组用来模拟用户的并发访问

2.2.创建线程组

  • 线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  • 准备时长(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
  • 循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
  • 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
  • 持续时间(秒):测试持续时间,会覆盖结束时间
  • 启动延迟(秒):测试延迟启动时间,会覆盖启动时间
  • 启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
  • 结束时间:测试结束时间,持续时间会覆盖它。

2.3 创建http请求 

2.4.指定请求域名,请求路径

一个HTTP请求有着许多的配置参数,下面将详细介绍:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
路径:目标URL路径(不包括服务器地址和端口)


2.5. 设置对应的查看内容

二、Jmeter主要组件介绍

1、测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2、线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
3、取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
5、逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
6、断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
7、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
8、 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
9、前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

三、Jmeter的关联用到了哪些方法去实现

  1. 接口的响应结果通常为 html 和 Json 格式的数据,主要会用到正则提取器、Json 提取器、Xpath 器以及边界值提取器,还有 beanshell 来进行数据的提取。
  2. 对于 html 这种响应结果我们通常会用正则或者是 Xpath 来进行数据的提取;对于 Json 格式的数据通常会用 Json 提取器。

四、Jmeter参数化有哪几种方法

        1、可以通过函数助手来实现参数化,比如说像 _RandomString 这种随机函数。

        2、通过 CSV 读取文档数据实现参数化。

        3、通过配置元件、用户定义的变量来实现参数化。

        4、通过前置处理器中的用户参数也可以实现参数化。

五、用户定义的变量和用户参数的区别

  1. 用户定义的变量,在启动运行时获取一次值,在运行过程中,不再动态获取值(不管设置多少个线程数或者循环多少次,都只获取一次值,不会变)
  2. 用户参数在启动时获取一次值,在运行过程中,每次使用该参数都会动态获取一次值。 

六、如何用Jmeter做性能测试

        1、我们先要做需求的分析,你要确定你们的这个产品的功能以及架构,还有我们的这个用户的这个分布的一个情况,通过这些,你能制定你的这个测试目标。

        2、你就要开始搭建这个测试环境,因为我们的这个性能测试环境和功能测试环境、自动化测试环境是不能共用的,这是要独立搭建我们的测试环境的。

        3、根据我们的这个接口来写我们的这个接口的脚本。

        4、要对我们刚才写好的这个脚本来进行性能的转换,在这个里面要注意特别重要的一个点就是要加上性能场景的设计。

        5、去搭建我们的监控平台,因为监控平台它是对整个过程的一些数据来进行一个监控与收集的,只有收集的这些数据你才能做接下来的第6步。

        6、性能分析,分析的时候,我们要先从硬件、网络、配置,之后再来做我们的这个应用的一个分析,你不能说一上来就做应用分析,那你是分析任何问题你都分析不出来的。

        7、我们要把整个这个过程所产生的所有的数据收集,最终整理成为一份报告来提交给我们的领导,那这个才是我们领导层所需要的整个过程的一份测试报告。

七、JMeter脚本编写

7.1、添加线程组

(右键点击“测试计划” -> “添加” -> “Threads(Users)” -> “线程组”)    

 这里可以配置线程组名称,线程数,准备时长(Ramp-Up Period(in seconds))循环次数,调度器等参数:

线程组参数详解:
1. 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
2. Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
3. 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
4. Delay Thread creation until needed:直到需要时延迟线程的创建。
5. 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
结束时间:测试结束时间,持续时间会覆盖它。

因为接口调试需要,我们暂时均使用默认设置,待后面真正执行性能测试时再回来配置。

7.2、添加HTTP请求

(右键点击“线程组” -> “添加” -> “取样器” -> “HTTP请求”)

 对于我们的接口jmeter_百度搜索性能测试,可以参考下图填写:

Http请求主要参数详解:

  1. Web服务器
    协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
    服务器名称或IP :HTTP请求发送的目标服务器名称或IP
    端口号:目标服务器的端口号,默认值为80
    2.Http请求
    方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
    路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
    Content encoding :编码方式,默认为ISO-8859-1编码,这里配置为utf-8
  2. 同请求一起发送参数
    在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”

7.3 添加察看结果树

右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”

这时,我们运行Http请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索返回结果页面标题为”jmeter性能测试_百度搜索“。

 7.4、 添加用户自定义变量

我们可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”:

新增一个参数wd,存放搜索词:

 并在Http请求中使用该参数,格式为:${wd}

7.5、增加断言 

右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

 我们校验返回的文本中是否包含搜索词,添加参数${wd}到要测试的模式中:

7.6 添加断言结果 

右键点击“HTTP请求” -> “添加”-> “监听器” -> “断言结果”

这时,我们再运行一次就可以看到断言结果成功或失败了 

7.7 添加聚合报告

右键点击“线程组” -> “添加” -> “监听器” -> “聚合报告”,用以存放性能测试报告

 

这样,我们就完成了一个完整Http接口的JMeter性能测试脚本编写。

八、执行性能测试

8.1 配置线程组

点击线程组,配置本次性能测试相关参数:线程数,循环次数,持续时间等,这里我们配置并发用户数为10,持续时间为60s。

8.2 执行测试

点击绿色小箭头按钮即可启动测试,测试之前需要点击小扫把按钮清除之前的调试结果。

分析测试报告

待性能测试执行完成后,打开聚合报告可以看到:

聚合报告参数详解:
        1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
        2. #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
        3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
        4. Median:中位数,也就是 50% 用户的响应时间
        5. 90% Line:90% 用户的响应时间
        6. Min:最小响应时间
        7. Max:最大响应时间
        8. Error%:错误率——错误请求数/请求总数
        9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
        10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

至此,我们使用JMeter完成了一个完整的Http接口性能测试流程,从脚本编写,执行到最终结果分析。

九、如何用Jmeter录制脚本

        1、在测试计划里添加线程组(右键点击“测试计划” -> “添加” -> “Threads(Users)” -> “线程组”)

        2、在测试计划里添加非测试元件的 HTTP 代理服务器

        3、配置代理服务器,端口可以设置成8888,把目标控制器选成测试计划>线程组,这样做的目的是录制的脚本直接生成在线程组下面,然后设置Requests Filtering(请求过滤器),若想排除一些我们不需要的东西,则可以点击添加建议排除,但这个也只能排除大部分的,小部分的还是排除不了

        4、启动代理服务器

        5、打开浏览器,对浏览器进行设置,设置对应的代理信息,地址:127.0.0.1,端口:8888,保存

        6、访问网站,如 百度一下,你就知道

        7、查看线程组,可看到下面录制的脚本在增加

        8、添加监听器,察看结果树

        9、运行,看录制的脚本能否运行成功

        10、把不是网站的脚本禁用,看运行是否还能成功

        11、运行成功之后删除禁用的那些脚本

十、Get和Post的区别

        1、get 在 url 里传参,post 在 bady 里传参

        2、get 长度限制(浏览器限制),post 传参长度没有限制

        3、post 相比较 get 安全高

十一、Jmeter和SoapUI接口测试有什么区别

        1、它们的用例组织方式是不一样的,Jmeter 来说比较扁平,而 SoapUI 它最上层是工作空间,工作空间下面每一个会有一个项目,然后项目下面又可以添加多个TestSuite(测试套件)这种

        2、在支持的接口类型和测试类型上面,Jmeter 和 SoapUI 工具差不太多,它们都可以支持 Soap 和 Rest 接口,也都可以进行接口的压力测试和功能测试

        3、在流程控制方面,Jmeter 可以由 switch 控制器等一系列控制器和 beanshall 脚本进行一个流程控制,而 SoapUI 它一般可以用 Conditional Goto 以及 Groovy 脚本来进行一个流程控制

        4、在断言方面,Jmeter 它的一个测试计划、线程组还有取样器都可以添加断言,SoapUI 每一个 request 可以添加断言

        5、在脚本扩展能力,Jmeter 主要支持 Java,而 SoapUI 主要支持 Groovy

十二、Jmeter和Postman接口测试有什么区别

        1、它们的用例组织方式是不一样的,像 Jmeter 它的用例组织方式就比较扁平化,它没有测试集合和空间的一个概念,直接就是 TestPlan,而 Postman 它比较轻量级,主要是针对的是单个 http 请求  。

        2、它们支持的接口类型以及测试类型也是有不一样的,Jmeter 相对来说比较强大一些,它可以支持 Rest 风格的接口,还有 Soap 类型的接口,以及它可以去测试接口测试功能,以及测试一个性能测试,而 Postman 它只支持 Rest 风格的接口,而且也基本上做的比较多的是功能测试

        3、在流程控制上面它们也是不太一样的,比如说 Jmeter 它是通过像 switch 控制器等一系列控制器以及像 beanshall 脚本来实现一个流程控制的,而 Postman 通过 JavaScript 来进行一个流程控制

        4、它们两个在脚本结果解析和展示以及在断言还有一些功能扩展性也是有很多的区别的

十三、你是如何开展项目的性能测试的

  1. 测试准备,我们先要去了解需求,熟悉业务,确定咱们的这个性能的指标(指标要非常清晰的确定下来),然后准备我们的测试方案、测试用例、测试模型、预估工作量等等为后期做好准备。
  2. 环境搭建,因为性能测试是需要独立的测试环境,所以我们需要独立的搭建应用环境、数据库环境还有网络,另外还有一个性能的监控环境。
  3. 脚本开发,环境搭建好了之后开始写脚本,写脚本要根据不同的一个协议来选择不同的工具。写好脚本之后就要进行一个调试,调试通过了之后,然后把它转化为性能的脚本(非常重要)。
  4. 测试执行,我们根据前期写好的这些测试用例或者测试模型来设计不同的性能的场景来运行。在这个运行过程中,要使用性能的监控来监控运行过程中的数据,有了这些数据才能做后面的性能分析。
  5. 结果分析,通过监控,我们可以做一些初步的分析,分析硬件的、分析这个应用的,然后还有各种反复的调优反复的定位,最终发现你这个问题,能调优的自己调优,不能调优的要提交缺陷,然后还要提交测试报告。

十四、测试用例与测试脚本的区别

  1. 测试用例和测试脚本是完全两个不一样的概念的东西。
  2. 测试用例是为了测试的执行而编写的一个关于测试的输入输出以及执行的步骤,还有测试环境、执行结果和预期结果这么一个文档的集合,它是我们测试执行的一个非常重要的依据。
  3. 测试脚本是我们为了达到某一些特定的需求而编写的,比如说我要做自动化测试要编写自动化的脚本,要去做性能测试要编写性能脚本等等,但一般来说,我们的测试脚本也会对应的一个测试用例。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daniel Hao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值