接口测试jmeter工具使用笔记。

一、jmeter安装

1、安装java

2、安装jmeter

(1)官网下载最新版zip包:http://jmeter.apache.org/download_jmeter.cgi
(2)解压下载的zip包到自定义路径即可,例如:D:\Program Files\jmeter

3、运行jmeter

(1)进入jmeter解压路径的\bin路径下,例如:D:\Program Files\jmeter\apache-jmeter-4.0\bin
(2)双击jmeter.bat即可运行jmeter。

4、安装插件

(1)下载 plugins-manager.jarhttp://www.jmeter-plugins.org/get/
(2)将下载的jar包放到jmeter路径的\lib\ext路径下,例如:D:\Program Files\jmeter\apache-jmeter-4.0\lib\ext
(3)启动jmeter,菜单栏【选项】会多出一个【Plugins Manager】的选项。
(4)点击 【Plugins Manager】选项打开jmeter插件管理。

  • Installed Plugins:显示已安装的插件。
  • Available Plugins:显示可安装的插件。
  • Upgrades:显示可以升级的插件。

(5)通过”勾选/取消勾选”插件,并点击右下角【Apply Changes and Restart JMeter】按钮来卸载、安装、升级插件。

二、jmeter基础原件

官方文档介绍

1、测试计划

Test Plan 是其它JMeter测试元件的容器,jmeter创建测试的所有内容是于基于一个计划的。
测试计划

除了测试计划下的元件还有两种控制器。
控制器

2、线程用户

Threads (Users)是一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。
线程用户

(1)thread group(线程组)

1) 名称:可以给线程组设置一个命名。
2) 注释:可以对线程组添加备注以标记。
3) 在取样器错误后要执行的动作:

  • 继续执行后续的。
  • 启动下一线程组循环。
  • 停止线程。
  • 停止测试。
  • 立刻停止测试。

4) 线程数:即用户数,一个虚拟用户占用一个进程或线程,需要多少用户并发,设置多少虚拟用户数在这里也就是设置多少个线程数。
5) Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为100,准备时长为10,那么需要10秒钟启动100个线程,也就是每秒钟启动10个线程。
6) 循环次数:每个线程发送请求的次数。

  • 如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000 。
  • 如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。

7) Delay Thread creation until needed:直到需要时延迟线程的创建。
8) 调度器:可以设置线程组启动的开始时间和结束时间。实践结论是配置调度器时,需要设置循环次数为永远,防止因循环次数不够而终止压测。

  • 启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时也当前时间也会覆盖它(但启动时间页面显示不会变)。
  • 结束时间:测试计划什么时候结束,持续时间会覆盖它。
  • 持续时间(秒):测试计划持续多长时间,会覆盖结束时间。
  • 启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。

3、配置元件

Config Element 用于提供对静态数据配置的支持。
配置元件

(1)CSV Data Set Config(csv数据文件设置)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名
4) File encoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8
5) Variable Names:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。如不填写,文件的第一行数据将被读取为变量名
6) Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键(\t)来区分列与列
7) Allow quoted data:True时,可以使用双引号来识别逗号或双引号(如数据文件中为 1,2,”3,”4”,5” ,则识别出的为A_1=1,B_1=2,C_1=3,”4”,5)
8) Recycle on EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为,可通过设置jmeter属性csvdataset.eofstring来改变该值。
9) Stop thread on EOF:Recycle on EOF设置为False,Stop thread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。
10) Sharing mode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开

  • All threads:文件在所有线程间共享
  • Current thread group: 每个文件会针对每个线程组打开一次
  • Current thread: 每个文件会针对每个线程单独打开
  • Identifier:所有线程共享相同的标识,共享相同的文件。如有4个线程组,测试人员可以使用一个通用ID,以便在两个或多个线程组之间共享文件。

4、监听器

Listener 是用来对测试结果数据进行处理和可视化展示的一系列元件。
监听器

(1)View Results in Table(察看结果树)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 所有数据写入一个文件:提供结果保存功能。保存信息可勾选配置。
4) Text下拉列表:用来显示不同的取样器请求,默认Text方式显示。
5) 取样器结果:显示取样器运行结果。
6) 请求:显示请求表单内容,不同取样器会有不同显示格式。
7) 响应数据:显示服务器响应数据,同时还提供查询功能。

(2)Aggregate Report(聚合报告)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 所有数据写入一个文件:提供结果保存功能。保存信息可勾选配置。
4) Label: 请求的名称,就是我们在进行测试的httprequest sampler的名称
5) Samples: 总共发给服务器的请求数量
6) Average: 单个请求的平均响应时间,单位是毫秒
7) Median: 50%的请求的响应时间
8) 90%Line: 90%的请求的响应时间
9) 95%Line: 95%的请求的响应时间
10) 99%Line: 99%的请求的响应时间
11) Min: 最小的响应时间
12) Max: 最大的响应时间
13) Error%: 错误率=错误的请求的数量/请求的总数
14) Throughput: 吞吐量即表示每秒完成的请求数
15) Received KB/sec: 每秒从服务器端接收到的数据量
16) Sent KB/Sec: 每秒从发送到服务器端的数据量

5、定时器

Timer 用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。
定时器

(1)Constant Timer(固定定时器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 线程延迟(毫秒):让每个线程在请求之前按相同的指定时间停顿。需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。

6、前置处理器

Pre Processors 用于在实际的请求发出之前对即将发出的请求进行特殊处理。
前置处理器

(1)User Parameters(用户参数)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 每次迭代更新一次:如果选中该选项,则参数的值在每个迭代中保持不变,在新的迭代开始时取下一个值。如果取消该选项,则参数值在每个在其作用域内的sampler发出请求时取下一个可用值。
4) 添加变量
5) 添加用户
6) 删除变量
7) 删除用户
8) UP:向上移动
9) down: 向下移动

7、后置处理器

Post Processors 用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。
后置处理器

(1)JSON Extractor(json提取器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Apply to:Sampler可能会产生子Sampler,这里需要选择从哪个Sampler中进行提取。

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
  • Main sample only:仅作用于父节点的取样器
  • Sub-samples only:仅作用于子节点的取样器
  • JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

4) Variable Names:变量名。例如:status
5) JSON Path Expressions: Json提取表达式。例如:$.status
6) Match No. (0 for Random):当提取有多个结果值时,选择需要的值保存到变量中,默认值为0

  • 0:随机一个
  • -1:全部值,使用_N 方式保存(N从1开始),比如status_1,status_2…
  • X: 自然数,比如1,返回第X个值(如果X大于返回值的数量,结果会不能获取,最终返回设置的默认值)

7) Compute concatenation var:如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值。Match No. (0 for Random)需要为-1才有效,不然只能匹配到一个值了。
8) Default Value: 缺省值

8、断言

Assertions 断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点。
断言

(1)Response Assertion(响应断言)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Apply to:Sampler可能会产生子Sampler,这里需要选择从哪个Sampler中进行提取。

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
  • Main sample only:仅作用于父节点的取样器
  • Sub-samples only:仅作用于子节点的取样器
  • JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

4)要测试的响应字段:要检查的项。

  • 响应报文
  • Documeng(text):测试文件
  • URL样本
  • 响应代码
  • 响应信息
  • Response Headers:响应头部
  • Ignore status:忽略返回的响应报文状态码

5) 模式匹配规则:

  • 包括:返回结果包括你指定的内容
  • 匹配:(好像跟Equals查不多,弄不明白有什么区别)
  • Equals:返回结果与你指定结果一致
  • Substring:返回结果是指定结果的字串
  • 否:不进行匹配

6) 要测试的模式:即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理

9、测试片段

Test Fragment 是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
测试片段

(1)Test Fragment(测试片段)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。

10、非测试元件

Non-Test Elements 提供http镜像服务、http代理服务、属性显示等功能。
非测试元件

1)Property Display(属性显示)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) System:系统变量。
4) Jmeter Properties:jmeter变量。

11、取样器

Sampler 是测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。
取样器

(1)HTTP Sampler(HTTP取样器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http.
4) 服务器名称或IP:http请求发送的目标服务器名称或者IP地址。
5) 端口号:目标服务器的端口号,默认值为80,可不填
6) 方法:发送http请求的方法

  • GET:向特定的资源发出请求。
  • POST:向指定资源提交数据进行处理请求。
  • HEAD:获得报文首部
  • PUT:向指定资源位置上传其最新内容。
  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。
  • TRACE:追踪路径,回显服务器收到的请求,主要用于测试或诊断。
  • DELETE:请求服务器删除Request-URI所标识的资源。
  • PATCH:实体中包含一个表,表中说明与该URI所表示的原内容的区别。

7) 路径:目标的URL路径(不包括服务器地址和端口)
8) Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)
9) 自动重定向:发出的http请求得到响应是301/302,jmeter会重定向到新的界面
10) 跟随重定向:响应Code是3XX时,自动跳转至目标地址。JMeter会记录重定向过程中的所有请求响应。
11) Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)。
12) Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时使用。
13) browser-compatible headers:浏览器兼容请求头。
14) Parameters:xx=xx&xxx=xx格式的参数为GET或者POST请求中,url中带的参数值。

  • Encode?:参数有“=”、“&”、“?”等特殊符号时选择。
  • Include Equals:自动添加参数名和值之间的等号。

15) Body Data:json格式的是POST请求中的参数
16) Files Upload:发出HTTP请求并获得响应的HTML文件内容后还对该HTML进行Parse,并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
17) Implementation:执行

  • Java:使用的http是使用的JAVA JVM提供的方法,有相关的限制。
  • HttpClient4:使用Apache HttpClient 4.1部件
  • 空白:使用HTTP默认请求中的配置或jmeter.properties中jmeter.httpsample中的配置

18) Timeouts:超时

  • Connect:连接
  • Response:响应

19) Embedded Resources from HTML Files:解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等)

  • 从HTML文件获取所有内含的资源
  • Parallel downloads.Number:并行下载.数量
  • URLs must match:URL需匹配

20) Source address:IP欺骗,指定请求要用到的本地地址(参数化)。
21) Proxy Server:代理相关设置

  • 服务器名称或IP
  • 端口号
  • 用户名
  • 密码

22)Save response as MD5 hash?:在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。

12、逻辑控制器

Logic Controller 用来控制采样器的执行顺序。分为两类:一种是控制采样器的逻辑执行顺序,如Loop Controller、If Controller等;一种是对采样器进行分组,方便控制的,如Throughput Controller、Transaction Controller等。
逻辑控制器

(1)Loop Controller(循环控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Loop Count:循环次数
4) Forever:永远循环

(2)ForEach Controller(遍历循环控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 输入变量前缀:在其中输入需要遍历的用户参数(User Parameter)
4) Start index for loop(exclusive):循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
5) End index for loop(inclusive):循环指数结束(包含)→ 遍历查询的变量范围,结束的值
6) 输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,格式为${输出变量名}
7) Add””before number:输入变量名称中是否使用“”进行间隔

(3)Switch Controller(转换控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Switch value:控制器具体赋值的value值字段。当Value为空时,默认执行第1个子节点元素。

  • 第一种:是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
  • 第二种:是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。

(4)While Controller(while条件控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Condition(function or variable):条件(函数或变量)。需要注意的是:条件是评估两次,一次取样前,一次随机取样。里面可填入判断依据的条件,可能的条件值有:

  • 空白:最后一个示例循环失败时退出循环。
  • 最后一个值:最后一个示例循环失败时退出循环。 如果之前的最后一个示例只是循环失败,不进入循环。
  • 否则:退出时(或不输入)循环条件等于字符串“ 假 ”

(5)If Controller(IF控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Condition(default javascript)(条件(默认JavaScript)):使用JavaScript的函数或变量进行评估判断条件为真或假
4) interpret condition as variable expression(条件解释为变量表达式):如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript
5) evaluate for all children(对所有子条件执行):如果勾选该项,则该controller在没一个子节点执行时执行一次;

(6)Module Controller(模块控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Find target element(寻找目标元素):寻找测试计划中需要特定测试的元素,模块;也可理解为该控制器可以控制已经封装好的模块元素。

(7)Simple Controller(简单控制器)

1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。

三、原件作用域和顺序

1、元件的作用域

jmeter中共有8类可被执行的元件(test plan和thread group不属于元件)。
其中:sampler(取样器)是不与其他元件发生交互的作用的元件,Logic Controller(逻辑控制器)只对其子节点的sampler有效,而其他元件需要与sampler等元件交互。

1)Config Elements(配置元件):影响其范围内的所有元件
2)Pre-porcessors(前置处理器):在其作用范围内的每一个sampler元件之前执行
3)Timer(定时器):对其作用范围内的每一个sampler有效
4)Post-porcessors(后置处理器):在其作用范围内的每一个sampler元件之后执行
5)Assirtions(断言):对其作用范围内的每一个sampler元件执行后的结果执行校验
6)Listener(监听器):收集其作用范围内的每一个sampler元件的信息并且呈现出来

在jmeter中,元件的作用域是靠test plan的树形结构中元件的父子关系来确定的,其原则如下:

1) sampler(取样器)不与其他元件相互作用,因此不存在作用域问题
2) Logic Controller(逻辑控制器)只对其子节点中的sampler和Logic Controller作用
3) 除sampler和Logic Controller外的其他元件,如果是某个sampler的子节点,则该元件仅对其父节点作用
4) 除sampler和Logic Controller外的其他元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后带节点(包括子节点,子节点的子节点等)

2、元件的执行顺序

在同一作用域范围内,test plan中的元件按照以下顺序执行:

1) Config Elements(配置元件)
2) Pre-porcessors(前置处理器)
3) Timer(定时器)
4) Sampler(取样器)
5) Post-porcessors(后置处理器)(除非Sampler得到的返回结果为空)
6) Assirtions(断言)(除非Sampler得到的返回结果为空)
7) Listener(监听器)(除非Sampler得到的返回结果为空)

PS:Pre-porcessors、Post-porcessors和Assirtions等元件仅对Sampler作用,如在它们作用域内没有任何Sampler,则不会被执行;如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在test plan中的上下顺序依次执行。

四、jmeter运行模式

1、GUI模式
GUI打开已有的jmx文件,点击启动按钮运行 。

2、命令行模式
(1)依赖:
配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)。
如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行。

(2)命令:
jmeter -n -t <testplan filename> -l <listener filename>

  • -h 帮助 -> 打印出有用的信息并退出
  • -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
  • -t 测试文件 -> 要运行的 JMeter 测试脚本文件
  • -l jtl文件 -> 记录结果的文件
  • -r 远程执行 -> 启动远程服务
  • -H 代理主机 -> 设置 JMeter 使用的代理主机
  • -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
  • -j 日志文件->设置JMeter日志文件的名称

(3)实例:

1
JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

(4)执行步骤:
jmeter默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:\tools\apache-jmeter-4.0\bin 目录下执行以上命令,jmeter会去该目录下寻找test.jmx脚本并把执行结果放在该目录。
如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉jmeter。

持续更新…

最后更新: 2018年05月11日 14:58

原始链接: http://pythonfood.github.io/2018/04/01/接口测试-jmeter/

× 多少都行~
打赏二维码