Jmeter优点:开源免费、体积小,Loadrunner优点:支持用户量多,报表精度高、支持IP欺骗
由于Jmeter开源免费,与LR功能基本一致,所以在公司中一般选择Jmeter进行性能测试
Jmeter目录结构:
bin目录:存放可执行文件和配置文件
printable-docs:存放用户手册
lib目录:Jmeter运行时依赖的Jar包
docs目录:存放Jmeter 接口文档
Jmeter的元件和组件
元件类型:
线程组:模拟用户
取样器:发送请求
前置处理器:在取样器之前执行,对请求中的参数进行预处理(例如:赋值) —— 相当于
postman的前置请求
后置处理器:在取样器之后执行,对响应中的结果进行处理(例如:提交响应字段)—— 相
当于postman的test
定时器:等待sleep
监听器:日志、查看结果
配置元件:定义参数
断言:对于结果进行检查
测试片段:类似于定义的类,不单独运行,只供其他脚本调用
元件的执行顺序:
写脚本的顺序:定义参数 —— 对请求参数进行赋值 —— 发送请求 —— 收响应 —— 提取响
应中的字段 —— 断言响应中的字段 —— 观察运行结果
元件执行顺序:配置元件 —— 前置处理器 —— 取样器 —— 后置处理器 —— 断言 —— 监听器
如果一个作用域下,有多个相同的元件时(例如:多个取样器),按照从上到下的顺序执行
Jmeter基本组成
线程组
分类:普通线程组(可以并行或者串行执行)、setup线程组(先执行)、teardown线程组(后执行)
参数:
线程数、ranm-up time、运行次数、运行时间、延迟时间
HTTP请求
参数:协议、域名/IP、端口、请求方法、URL路径、编码格式、参数
查看结果树
Jmeter参数化
用户定义的变量:每个用户每次读取的变量值都完全相同
用户参数:不同用户读取的变量值不同,但是同一用户在多次循环时读取的变量值是一致的
CSV数据文件:不同用户读取的变量值不同,同一用户在多次循环时读取的变量值也不同
函数:每次执行读取的变量值都不同,不需要提前定义数据(适用于对数量值无明确要求,只要求不同)
配置:
设置:每种不同
引用:${参数名}
断言
响应断言
使用范围:HTTP消息的任何格式的响应
参数配置
需要断言的字段:文本内容、响应码、响应头、请求URL、请求头、请求体
断言的方式:等于/包含、非、或、和
需要断言的数据(预期结果)
Json断言
使用范围:响应消息为JSON格式的响应
参数配置:
JSON路径:$.开头
需要断言的数据(预期结果)
断言持续时间
使用范围:对请求的响应时间进行断言
参数配置:
预期响应时间(单位:ms):当时间响应时间超过该值时会报错
关联
线程组内的关联(通过后置处理器实现):
正则表达式提取器
使用范围:适用于任何格式的响应数据
参数配置:
参数名:提取出来的数据要保存的变量名
正则表达式:左边界(.*?)右边界
模板:$1$(代表提取正则表达式中第1个括号的内容)
值:-1(返回全部的值),n(返回列表中第n个匹配上的值)
引用:
在后续请求中引用提取器中定义的参数名:${参数名}
xpath提取器
使用范围:适用于HTML格式的响应数据
参数配置:
参数名:提取出的数据要保存的变量名
xpath路径:定位某个页面元素的路径
值:-1(返回全部的值),n(返回列表中第n个匹配上的值)
引用:
在后续请求中引用提取器中定义的参数名:${参数名}
JSON提取器
使用范围:适用于JSON格式的响应数据
参数配置:
参数名:提取出的数据要保存的变量名
JSON路径:定义到JSON字符串中某个值的路径
引用:
在后续请求中引用提取器中定义的参数名:${参数名}