JMeter & JDK 下载、安装、配置(windows 10)
1. 启动
- 打开JMeter文件夹,bin文件→jmeter.bat(Windows执行文件)文件,就可以启动jmeter了
- tips:为了后续使用方便,可右击jmeter.bat,发送桌面快捷方式
- tips:为了后续使用方便,可右击jmeter.bat,发送桌面快捷方式
JMeter组件:
- 测试计划
- Threads(Users)
- 逻辑控制器
- 配置元件
- 定时器
- 前置处理器
- sample(采样器)
- 后置处理器
- 断言
- 监听器
组件名 | 作用 | 用法示例 |
---|---|---|
测试计划 | 用来描述一个测试,包含与本次测试相关的所有功能 | ![]() |
Threads(Users) | 线程组是用来执行测试的用户 | |
逻辑控制器 | 设置条件对其子节点组件的执行做控制 | if控制器、Switch Controller、While Controller、循环控制器等 |
配置元件 | 提供静态数据的配置(比如http请求的默认值、数据库连接配置) | 用户定义的变量、HTTP信息头管理器,JDBC Connection Configuration等 |
定时器 | 用于请求间设置等待时间 | 固定定时器、高斯随机定时器、Uniform Random Timer等 |
前置处理器 | 请求发送前做一些预处理(例:先请求sql获取数据,运用程序将数据加密) | BeanShell PreProcessor、JDBC Preprocessor、HTTP URL重写修饰符等 |
sample(采样器) | 用于向服务器发送请求(如http、数据库请求等) | HTTP请求、JDBC Request、TCP采样器、Java请求等 |
后置处理器 | 请求得到响应后,对响应数据做处理(如:提取数据存到变量,以供后续接口使用等) | BeanShell PostProcessor、JDBC Postprocessor、正则表达式提取器等 |
断言 | 验证接口的返回是否符合预期 | 响应断言、BeanShell 断言 |
监听器 | 对测试结果数据进行可视化展示 | 查看结果树、聚合报告、断言结果 |
组件作用域及执行:
- 组件执行顺序:
配置元件 -> 前置处理器 -> 定时器 -> 采样器 -> 后置处理器 -> 断言 -> 监听器 - 组件作用域靠测试计划的树型结构的父子关系确定,规则如下:
- 采样器:不存在作用域问题
- 逻辑控制器:只对其子节点的采样器和逻辑控制器起作用
- 其他组件:
a. 如果父节点是采样器,则只对其父子节点起作用
如果父节点不是采样器,则作用域是父节点下的所有后代节点。
2. 新建测试计划(test plan)
-
测试计划(test plan):用于描述一个测试,包含本次测试所有相关功能
-
启动JMeter,默认有一个测试计划,修改测试计划名称,尽量使其变得有意义,容易看懂
3. 新建一个线程组 threads(users)
-
右击测试计划 - Add - Threads - Thread Group,线程组是用来执行测试的用户
-
线程数设置为1,方便演示
-
Setup thread group:
一种特殊类型的线程,可用于执行预测试操作。即执行测试前进行定期线程组的执行 -
Teardown thread group:
一种特殊类型的线程,可用于执行测试后动作。即执行测试结束后执行定期的线程组 -
以上两个线程组,举个例子:loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块,与其对应
-
Thread group:
通常添加使用的线程,一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户
4. 添加http信息头管理器
- 右击线程组 - Add - Config Element - HTTP Header Manager
- http信息头管理器添加好之后,需要填入信息头的名称以及对应的值,例:
- 解释一下为什么添加http信息头管理器:
JMeter不是浏览器,其行为并不和浏览器完全一致。这些JMeter提供的配置元件中的HTTP属性管理器用于尽可能模拟浏览器行为,在HTTP协议层上发送给被测应用http请求。
-
HTTP Request Defaults(请求默认值)
用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口、协议等
-
HTTP Authorization Manager(授权管理器)
用于设置自动对一些需要NTLM验证的页面进行认证和登录
-
HTTP Cache Manager
用于模拟浏览器的Cache行为。为Test Plan增加该属性管理器后,Test Plan运行过程中会使用Last-Modified、ETag和Expired等决定是否从Cache中获取相应的元素
-
HTTP Cookie Manager(cookie管理器)
用于管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie
同时,用户也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求
-
HTTP Header Manager(信息头管理器)
用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent
访问某些有防盗链的页面时需要正确的Refer…这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
5. 添加Sampler(取样器)→ http请求
-
取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler
-
右击线程组 - Add - Sampler - HTTP Request
-
按照截图所示,填入测试的服务器地址、端口、所用的协议、方法、路径、参数
关于http请求的的属性参数说明:
-
名称:用于标识一个sample。建议使用一个有意义的名称
-
注释:对于测试没任何影响,仅用来记录用户可读的注释信息
-
服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如www.baidu.com
-
端口号:目标服务器的端口号,默认值为80,可不填
-
协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http
-
方法:发送http请求的方法: http协议几种数据传输方式
-
Content encoding:内容的编码方式(ContentType=application/json;charset=utf-8)
-
路径:目标的URL路径(不包括服务器地址和端口)
-
自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面
-
Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)
-
Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用
-
Parameters、Body Data以及Files Upload的区别:
-
parameter是指函数定义中参数,而argument指的是函数调用时的实际参数
-
简略描述为:parameter=形参(formal parameter), argument=实参(actual parameter)
-
在不很严格的情况下,现在二者可以混用,一般用argument,而parameter则比较少用
-
While defining method, variables passed in the method are called parameters.
-
当定义方法时,传递到方法中的变量称为参数.
-
While using those methods, values passed to those variables are called arguments.
-
当调用方法时,传给变量的值称为引数.(有时argument被翻译为“引数“)
4、Body Data指的是实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里
5、Files Upload指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML
进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载
-
6. 添加监视器(Listener)
-
监视器:对测试结果进行处理和可视化展示的一系列组件,常用的有图形结果、查看结果树、聚合报告等
-
添加好监视器,点击运行,开始测试
-
如上,测试结束后,如果我们的请求成功发送给服务器,那么结果树里面的模拟请求会显示为绿色,可以通过取样器结果里面的响应状态码信息来判断
-
也可以点击请求模块,查看我们发送的请求
-
里面有我们发送的请求的方法、协议、地址以及实体主体数据,以及数据类型,大小,发送时间,客户端版本等信息
-
响应数据:里面包含服务器返回给我们的响应数据实体,如下图