Jmeter 核心组件执行优先级:测试计划>>>线程组>>>配置元件>>>前置处理器>>>定时器>>>取样器>>>后置处理器>>>断言>>>监听器
逻辑控制器 结合取样器实现一些复杂的逻辑 配置元件 配置信息,用于设置一些默认值以供后续范围内的组件使用 前置处理器 在请求之前的工作,主要包括参数的设定和传递 定制器 负责在请求质检的延迟间隔。固定、高斯、随机 取样器 向服务器发送请求的最小单元 后置处理器 在请求之后的工作,比如判断、参数关联、逻辑处理等,为业务逻辑中的重要环节 断言 提供成功与否的判断机制,通常用于检查取样器的结果是否正确 监听器 提供结果检查机制,用于查看、检查、汇总、分析取样结果
一、线程(用户)
1.1线程组
右击测试计划 >>> 添加 >>> 线程(用户) >>> 线程组 线程属性 线程数 等同于模拟的用户数量,一个用户占用一个线程,模拟多少用户就是多少线程;
Ramp-Up时间(秒) 线程加速时间,设置多长时间内启动全部线程;
例如线程数100,时间设定10s,则10s加载100个线程,每秒启动的线程数为10;
循环次数 如果填具体的数值,就是循环对应的次数,例如线程数为200,循环次数为10,则总请求数为200*10=2000;
如果勾选“永远”,则一直执行下去,直到手动停止运行脚本;
1.2setUP线程组
1.3tearDown线程组
二、配置文件
2.1、CSV 数据文件设置(CSV Data Set Config)
CSV能够读取外部csv文件中的数据并生成变量,被JMeter脚本引用,从而实现参数化。
1、txt文件
username,password
lucy,111111
mark,222222
lily,333333
2、编辑csv数据文件
右键–>添加–>配置元件–>CSV Data Set Config 设置csv数据文件 文件名 支持csv,txt,dat三种格式,填写文件路径
文件编码 编码格式,与所选文件编码格式保持一致/utf-8 变量名称(西文逗号间隔) 多个变量,用英语的逗号隔开;username,password 3、将变量名称编辑到HTTP请求处,HTTP值处添加CSV数据设置处变量名称,格式为:${username}、${password};
2.2、HTTP信息头管理器
右键 >>> 添加 >>> 配置元件 >>> HTTP信息头管理器 Content-Type application/json(json格式必须添加HTTP信息头管理器) cookie token User-Agent
2.3、HTTP Cookie管理器(HTTP Cookie Manager)
HTTP请求的返回结果里包含一个cookie,那么HTTP Cookie管理器会自动将该cookie保存起来,而且后期所有的对该网站的请求都使用同一个cookie;
2.4、HTTP请求默认值
管理公用的HTTP请求配置数据;
一个线程下可以同时存在多个http请求,可以把公共参数,提取到HTTP请求默认值组件中,比如:协议、IP、端口号、编码等;然后在每个http请求的配置元件中,编辑自己独有的信息即可;
右键 >>> 添加 >>> 配置元件 >>> HTTP 请求默认值 基本 web服务器 协议:https 服务器名称或IP: 端口号:443 HTTP请求 请求方式: 路径: 内容编码:utf-8 参数 消息体数据 文件上传 参数传递格式:application/x-www-form-urlencoded
参数传递格式:application/json 一般 POST 使用;参数长度无限制
参数传递格式:multipart/x-www-form-data
2.5、计数器(Counter)
在迭代过程中增加计数器,一般用于统计和模拟序列等
右键 >>> 添加 >>> 配置元件 >>> 计数器 计数器 starting value 给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器 递增 每次迭代后,给计数器增加的值 最大值 计数器的最大值 Number format 可选格式,比如000 引用名称 (Reference Name) : 用于控制在其它元素中引用该值,形式:$(reference_name}
三、定时器
3.1、同步定时器(Synchronized Timer)
一、集合点
集合点是测试脚本中的一个标记,当每个虚拟用户执行到标记处时,会停留在标记处等待其他的虚拟用户,当达到预期设置的并发数时,标记处的所有用户同时启动执行后续的请求;
集合点会产生瞬间高并发,但是也会降低平均压力。所以在压测过程中,如果有要求瞬间高并发的业务,就需要使用集合点,比如抢购,秒杀之类的业务
可以在某一逻辑点模拟创建最大负载量进行测试;Synchronizing Timer 的技术原理是通过在某一点阻塞线程,直到 X 个线程被阻塞,然后同时释放
右键 >>> 添加 >>> 定时器 >>> 同步定时器(Synchronized Timer) 模拟用户组的数量 0表示执行所有线程组
超时时间 设置0表示一直等待
四、取样器
4.1HTTP请求(HTTP Request)
右键 >>> 添加 >>> 取样器 >>> HTTP请求(HTTP Request) 基本 web服务器 协议:https 服务器名称或IP: 端口号:443 HTTP请求 请求方式: 路径:URL 内容编码:utf-8 参数
消息体数据
文件上传 参数传递格式:application/x-www-form-urlencoded 参数传递格式:application/json 一般 POST 使用;参数长度无限制
参数传递格式:multipart/x-www-form-data 文件名称 参数名称 MIME类型 请求 URL 中添加参数,函数定义中参数,而argument指的是函数调用时的实际参数,简略描述为:parameter=形参(formal parameter) 消息体数据(Body Data): 实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里(一般 POST 使用;参数长度无限制) 从 HTML 文件获取所有有内含的资源:被选中时,发出 HTTP 请求并获得响应的 HTML 文件内容后还对该 HTML(可以上传文件,对文件进行性能测试)
五、后置处理器
5.1、正则表达式提取器(Regular Expression Extractor)
接口需要关联时,可以通过正则表达式提取所需要的值
右键 >>> 添加 >>> 后置处理器 >>> 正则表达式提取器(Regular Expression Extractor) Name of created variable
请求要引用的变量名称,如填写 result_num Regular Expression
万能正则表达式 "id":"(.+?)"
Template 对应正则表达式的组号,从1开始;比如:$n$ 表示取对应到表达式中的第n个括号 Match No. (0 for Random 0 代表随机取值
-1匹配所有
n取第几个匹配值,比如:取1表示报文中的第1个对象匹配,取2表示报文中的第2个对象匹配
Default Value 如果参数没有取得到值,那默认给一个值让它取
5.2、JSON提取器(JSON Extractor)
数据关联,
可以通过JsonPath提取所需要的值,功能非常强大(注意取样器返回必须为 Json);底层采用jackson实现;
右键 >>> 添加 >>> 后置处理器 >>> JSON提取器(JSON Extractor) Name of created variable 请求要引用的变量名称,如填写 result_num;
自定义,多个变量用分号分隔
JSON Path expressions
$..字段名 (JSON path表达式) Match No. (0 for Random) 0 代表随机取值
n取第几个匹配值
-1匹配所有;
比如:取1表示报文中的第1个对象匹配,取2表示报文中的第2个对象匹配
Compute concatenation var (suffix _ALL) 如果找到许多结果,则插件将使用’,‘分隔符将它们连接起来,并将其存储在名为 _ALL的var中 Default Value 如果参数没有取得到值,那默认给一个值让它取
六、断言
6.1、响应断言(Response Assertion)
当响应中有明显的业务标志时,我们可以采用该断言器检测响应报文返回的特征值,进而判断在业务上是否确定;使用频率非常高,大部分场景均可以使用该断言器。
右键 >>> 添加 >>> 断言 >>> 响应断言(Response Assertion) 测试字段(Field to Test) 响应文本(Text Response) 从服务器返回的响应文本Response Body 响应代码(Response Code) Response code,如200 响应消息(Response Message) Response message,如success 响应头(Response Headers) Response headers,如 Set-Cookie 头 请求头(Request Headers)
请求的请求——Request Headers) URL样本(URL Sample) 请求的地址:Request Body 中的地址) 请求数据(Request Data)
请求的请求——Request Body 模式匹配规则(Pattern Matching Rules)
包括(Contains) 响应内容包括匹配的内容,支持正则表达式 匹配(Matches) 响应内容完全匹配需要匹配的内容,支持正则表达式 Equals 响应内容要完全等于需要匹配的内容,需要匹配的内容是字符串,不支持正则表达式 Substring 响应内容包含指定结果的字串,不支持正则字符串 否(Not) 不进行匹配
6.2、JSON断言(JSON Assertion)
可以对 Jmeter 取样器的响应消息以 JSON 方式进行检查;检测响应报文返回的特征值,进而判断取样器在业务上是否正确;
右键 >>> 添加 >>> 断言 >>> JSON断言(JSON Assertion) Assert JSON Path exists 用于断言的JSON元素的路径(JSONPath);检测JSONPath是否存在;使用XPATH语法书写,如$.code Additionally assert value
勾选,验证根据JSONPath提取值是否预期 Match as regular expression 勾选,预期值可以使用正则表达式表示
Expected Value 预期值;支持脚本语言写法;如0 Expect null
若验证提取的值为null,则勾选此项;
验证null值,还是需要勾选“Additionally assert value”,否则验证的是JSONPath能否找到路径;
预期值不填表示空字符,与null不等价
Invert assertion (will fail if above conditions met): 若勾选,表示对断言结果取反
七、监听器
7.1、查看结果树(View Results Tree)
7.2、汇总报告(Summary Report)
7.3、聚合报告(Aggregate Report)
可以查看事务或者取样器在某个时间范围内执行的汇总结果
右键 >>> 添加 >>> 监听器 >>> 聚合报告(Aggregate Report) Label
样本 平均值 中位数 90% 百分位 95% 百分位 99% 百分位 最小值 最大值 异常 % 吞吐量 接收 KB/sec 发送 KB/sec HTTP请求取样器名称 总共发给服务器的请求数量 平均响应时间 50%的用户响应时间不超过这个值 90%的用户响应时间不超过这个值 95%的用户响应时间不超过这个值 99%的用户响应时间不超过这个值 最小响应时间 最大响应时间 异常百分比(错误请求数量/请求总数) 每秒取样器执行的数量,相当于 TPS 每秒接收的千字节数 每秒发送的千字节数
八、逻辑控制器
8.1、IF 控制器(If Controller)
IF控制器:可以控制其下面的子/后代元素是否执行;如果为 true 则执行;如果为 false 则都不执行
右键 >>> 添加 >>> 逻辑控制器 >>> IF 控制器(If Controller)
Interpret Condition as Variable Expression? 默认勾选项,将条件解释为变量表达式:${__jexl3(条件)}
8.2、循环控制器(Loop Controller)
可以对部分逻辑按常量进行循环迭代
右键 >>> 添加 >>> 逻辑控制器 >>> 循环控制器(Loop Controller) 循环次数
8.3、仅一次控制器(Once Only Controller)
可以让控制器内部的逻辑只执行一次;单次的范围是针对某一个线程,无论线程外面迭代多少次或者里面循环多少次,均只执行一次;单次控制器一般可用于登陆,全局参数设置这种只执行一次的逻辑控制;
右键 >>> 添加 >>> 逻辑控制器 >>> 仅一次控制器(Once Only Controller)
九、函数助手
9.1、Random函数
Tools–>函数助手对话框–>选择一个功能–>_Random | ||
函数参数 | ||
名称 | 值 | |
一个范围内的最小值 | 1 | |
一个范围内允许的最大值 | 100 | |
拷贝并粘贴函数字符串 | ${__Random(1,100,)} | 生成 |
9.2、RandomString随机字符串
9.3、CSVRead
9.4、time
${__time(,)}:获取当前13位时间戳(当前时间的毫秒数),默认精确到毫秒级别, 如1650356704900等;
9.5、UUID
${__UUID}生成永不重复的字符串,格式类似8e9464d2-4561-453e-8005-ad0a44507640;