OwlFocus

JMeter 压力测试CSV参数化

概述

JMeter 的主要测试组件总结如下:

  1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
  2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
  3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。
  4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
  5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
  6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
  7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
  8. 定时器负责定义请求之间的延迟间隔。

常用测试

最简单的Web测试计划只需要三个 JMeter 的测试元件,如下图:

简单测试

其中:

  • 在线程组中定义线程数、产生线程发生的时间和测试循环次数。
  • 在http请求中定义服务器、端口、协议和方法、请求路径等。
  • 表格监听器负责收集和显示结果。

添加一个测试计划

添加线程组

点击测试计划,右键选择添加菜单项,选择子菜单Threads(Users),点击线程组,如下图:
添加线程组

配置线程组参数

名称:测试接口名称

线程属性

  • 线程数:模拟的用户数量
  • Ramp-up Period(in seconds):达到指定线程数所需要的时间。举例:线程数设置为50,此处设置为5,那么每秒启动的线程数 = 线程数50/5 = 10
  • 循环次数:选中“永远”,则一直循环下去。
    线程组

添加HTTP信息头管理器

点击线程组(产品列表),右键添加》配置元件 》 “HTTP信息头管理器”。如下图:
线程组
在面板中“信息头存储在信息头管理器中”添加一组http头部信息
名称:Content-Type
值:application/json
线程组

添加HTTP请求

点击线程组(产品列表),右键添加》Sampler 》 “HTTP请求”。如下图:
线程组
在Basic面板中配置参数
服务器名称或IP:应用ip地址
端口号:应用端口号
Http请求方法:选择相应的请求方式,如POST请求。
路径:请求地址
参数:在Parameters或者Body Data中添加请求参数。
线程组

结果分析

Summary Report

点击HTTP请求,右键添加》监听器》Summary Report。如下图:
Summary
Summary
做性能测试时,Summary Report可用于分析请求吞吐量、平均响应时间、最长响应时间等信息。例如只有一个(产品列表)接口的请求,那么在Summary Report中,会显示一行数据,共有10个字段,含义分别如下。

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

察看结果树

点击HTTP请求,右键添加》监听器》察看结果树。如下图:
Summary
Summary

用察看结果树,可以观察每个请求的请求、响应返回信息。

  • 取样器结果:显示的是取样器相关参数(客户端参数与响应参数)
  • 请求:发送请求的具体值
  • 响应数据:服务端返回的相应参数

    图形结果

    点击HTTP请求,右键添加》监听器》察看结果树。如下图:
    Summary
    Summary
    统计结果:
  • 样本数目:发出去的请求总数
  • 最新样本:最近一个Request的响应时间
  • 平均:所有Request响应时间的平均值
  • 偏离:所有Request响应时间的标准差
  • 吞吐量:单位时间内(一般是1分钟)处理Request的个数
  • 中值:所有Request响应时间的中间值

使用CSV Data Set Config参数化方法

点击产品列表,右键添加》配置元件》CSV Data Set Config。如下图:
Summary
Summary

面板说明

  • Filename:填写文件路径和文件名称。可以指保存信息的文件目录,可以相对或者绝对路径。如果文件放在jmeter的bin目录下,直接写文件名称就可以。
  • File Encoding:文件编码,默认为ANSI。
  • Variable names:参数名称(有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符使用下面的“memberId,pagerno”中定义的。
  • Delimitet:定义分隔符,用于分隔文件中的参数,及上述Variable Names中定义的参数名称。
  • Allow Quoated data: True –设置文件中的参数值都必须用引用引起来,False则不需要。
  • Recycle on EOF:到了文件尾处,是否循环读取参数。注:程序从CSV Data Set Config文件中,每次读取一行,每次读取的参数仅供一个线程使用(类似Loadrunner里面的参数唯一值功能),如果线程数超过文本的记录行数,那么可以选择 True (从头再次读取)。
  • Stop thread on EOF:到了文件尾处,是否停止线程。
    当Recycle on EOF 选择true时,Stop threadon EOF选择true和false无任何意义,通俗的讲,在前面控制了不停的循环读取,后面再来让stop或run没有任何意义
    当Recycle on EOF 选择false时,Stop threadon EOF选择true,线程4个,参数3个,那么只会请求3次
    当Recycle on EOF 选择false时,Stop thread on EOF选择false,线程4个,参数3个,那么会请求4次,但第4次没有参数可取,不让循环,所以第4次请求错误
  • Sharing Mode: 设置是否线程共享。

    新建csv文件

  • 1、新建一个orderlist.csv文件,按需要将参数填写在一列中。(不需要写变量名称,直接写变量值)内容如下:
    Summary
  • 2、在Configure the CSV Data Source中配置Filename属性,即参数文件路径。

    参数化

  • 格式:${argue_name} 的方式引用Variable name

回到HTTP请求面板,在Body Data配置请求参数(也可在路径中配置参数:&memberId=${memberId})。修改参数配置如下:
非常参数化:

1
{"memberId":"3395","pagerno":1,"pagerrows":15,"channel":"","ltitle":"","ptype":"","topic":"","province":"","city":""}

引用CSV Data Set Config,参数化参数:

1
{"memberId":"${memberId}","pagerno":${pagerno},"pagerrows":15,"channel":"","ltitle":"","ptype":"","topic":"","province":"","city":""}

验证请求参数

  • 1、选择产品列表,右键点击Start,启动测试脚本,如下图:

Summary

  • 2、回到察看结果树面板,查询请求参数是否替换成csv脚本中参数。
    Summary

基础知识

  • 1、吞吐量:是指在没有帧丢失的情况下,设备能够接受的最大速率。
  • 2、存储的最小单位是字节Byte,对于存储单位,有以下几个单位,GB、MB和KB,那么这三者之间的换算关系是:1GB=1024MB,1MB=1024KB,1KB=1024Bytes。
    Bit :“位”,称为bit,也就是比特,有的时候也称为位。一个字节为8位二进制表示。
    Byte:“字节”,一个字节就是8比特。
  • 3、Mbps (million bits per second 兆位/秒) 代表每秒传输1,000,000比特。该缩写用来描述数据传输速度。例如:4Mbps=每秒钟传输4M比特。
    数据传输速率的单位,字母b(bit)是比特和字母 B (Byte)是字节。
  • 4、吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps.先让我们来看两者对应的英语,吞吐量:throughput ; 带宽: Max net bitrate 。当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数。我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。
  • 5、方差和标准差都是用来描述一组数据的波动性的(集中还是分散),标准差的平方就是方差。方差越大,数据的波动越大。

参考

使用 JMeter 完成常用的压力测试

JMeter 聚合报告之 90% Line 参数说明

Jmeter中的几个重要测试指标释义

Jmeter基础