2.1 Jmeter简介
JMeter 是一款开源桌面应用软件,可用来模拟用户负载来完成性能测试工作。JMeter 的功能在版本升级的过程中已经十分强大,现在多数互联网公司都在使用JMeter 来完成产品或者项目的性能测试工作。因为开源所以更具扩展性,能够胜任更多的工作具有更多的可能性。可以不夸张地说,JMeter 是使用率最高的性能测试工具之一,也是当前最好的最全面的性能测试工具之一,企业能够更低成本地使用JMeter 进行性能测试构建工作
JMeter官网:
https://jmeter.apache.org/
2.2 Jmeter安装及配置
JMeter官网:
https://jmeter.apache.org/usermanual/get-started.html
2.2.1 JDK安装
由于Jmeter是基于java开发,首先需要下载安装JDK :JMeter支持到Java 8以上
- 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
- 选择JAVA SE 8u231,点击 JDK -> download
- 选择对应的版本下载即可
- 安装下载的JDK
- 配置系统环境变量
- Mac/Linux
$ vi .bash_profile #配置系统环境变量 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
PATH= P A T H : {PATH}: PATH:{JAVA_HOME}/bin: A N D R O I D H O M E / p l a t f o r m − t o o l s / : {ANDROID_HOME}/platform-tools/: ANDROIDHOME/platform−tools/:{ANDROID_HOME}/tools/
* Windows
*
### 2.2.2 Jmeter安装
1. 官网下载地址:http://jmeter.apache.org/download_jmeter.cgi
2. 下载最新版本即可,按照操作系统选择对应的包(Windows下载.zip,MAC/Linux下载.tgz)
3. 下载完成后解压包
4. 双击JMeter解压路径中bin下面的jmeter.bat(Windows)/jmeter(Linux/mac)即可
**注意:**
在jmeter窗口打开的同时会有如上的命令行窗口,不要关闭哦,不然jmeter窗口也就关闭了
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e06f0795e97944b8b6269575d5c12a10.png)
### 2.2.3 Jmeter目录结构介绍
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/41b0467623a14870b0154bb3b77b3ddd.png)
**Bin**:其中放置了各项配置文件(比如日志设置、JVM设置等)、启动文件(JMeter启动快捷方式,报告生成快捷方式,Heap Dump快捷方式等)、启动jar包、示例脚本等。
**Docs**:放置了JMeter API离线帮助文档,Web方式。
**Extras**:JMeter辅助功能,提供与Ant、Jenkins集成的可能性,我们可以利用Ant与Jenkins来构建性能测试自动化构架。Ant可以利用xsl脚本把XML格式的测试结果以HTML方式展示结果
**Lib**:JMeter组件以jar包的形式放置在lib/ext目录下,如果我们要扩展JMeter组件,扩展后的jar包即放在此目录(图3-20),JMeter启动时会加载此目录下的jar包。JMeter依赖的一些基础包放在lib根目录下,比如我们扩展了Java请求,这个扩展是为了完成我们特定的任务,而这个特定的任务程序需要依赖其他的jar包,那么这些jar包就放置在lib根目录下。JMeter支持运行Junit测试类,其测试包“放在lib/junit目录下面”
**licenses**:JMeter licenses相关声明信息放在此文件夹,全部是文本文件,对测试没有任何实际意义,可以忽略。”
**printable_docs**:JMeter的离线帮助文件放置目录,是我们学习JMeter的绝好向导。”
**LICENSE**:License说明文件。
**NOTICE**:版权声明。
**README**:JMeter简明介绍。
**备注:**
* 如果启动过程中屏幕一闪而过多半是启动不成功,请检查你的JAVA_HOME配置是否正确。
* 如果启动完成后能够进入这个界面且在图3-23界面的处显示0代表正常启动了,如果非0,代表加载组件出错了,即加载lib/ext目录下的jar包出错了,往往是我们扩展JMeter功能时出错,错误原因通常是依赖的jar包缺失。
**配置:**
* **考虑到中文乱码问题,修改配置文件中的编码集**
* ```
jmeter.properties
修改sampleresult.default.encoding=UTF-8
2.2.4 JMeter工作区介绍
-
目录树
- 存放测试设计过程中使用到的元件;
- 执行过程中默认从根节点开始顺序遍历树上的元件。
- 工作台也可以用来存放元件,但其中的元件不会被执行,所以我们可以用它来做备份。
-
测试计划编辑区域
JMeter测试脚本根节点,每一个测试脚本都是一个测试计划,名称可以自己定义
-
用户定义的变量
- 定义整个测试计划共用的全局变量,这些变量对多个线程组有效
- 设置用户全局变量,也在“用户定义的变量”中定义
-
线程组的运行设置
-
独立运行每个线程组
如果一个测试计划中有多个线程组,设置此项可以生效。不设置时每个线程组同时运行。
-
“Run teardown Thread Groups after shutdown of main threads”等。
关闭主线程后运行teardown 程序来正常关闭线程组(运行的线程本次迭代完成后关闭)。
-
函数测试模式
- 在调试脚本的过程中我们可能需要获取服务器返回的详细信息就可以选择此项 - 此项记录较多的数据会影响测试效率,所以在执行性能测试时请关闭此项
-
还可以在此添加测试计划依赖的jar包,比如JDBC方式连接数据库的驱动
-
- 把测试需要依赖的jar包或包所在的目录加入类路径 - 建议大家把依赖的jar包添加到%JMETER_HOME%\lib目录下。 - %JMETER_HOME%来代表JMeter的安装目录(需要配置)
-
-
-
区域是菜单栏,图标是菜单快捷方式
快捷菜单功能从左到右依次: - 新建测试计划 - 选择测试计划模板 创建一个新的测试计划 - 选择已经存在的测试计划并打开 - 关闭当前脚本 - 保存测试计划 - 另存测试计划 - 删除选定的元件:如果元件是父节点,那么其子节点元件也一同被删除 - 复制选定的元件及子元件 - 粘贴复制的元件及子元件 - 展开目录树 - 收起目录树 - 禁用或者启用元件,禁用元件的子元件也会被禁用 - 本机开始运行当前测试计划,按线程组的设置来启动 - 立即开始在本机运行当前测试计划 - 停止运行状态的测试计划,当前线程执行完成后停止 - 停止运行测试计划,立即终止,类似于杀进程 - 开启远程运行测试计划 - 停止运行远程测试计划,当前线程执行完成后停止 - 停止运行远程测试计划,类似于[…] - 清除所有元件的响应数据,包括日志 - 查找 - 清除查找 - 函数助手对话框:这些函数在做参数化时会用到 - 帮助文档快捷方式
2.4 接口测试脚本开发
元件:如果不作特殊说明,后面出现的元件代表JMeter 工具菜单中的一个子菜单(功能),比如HTTP 请求、事务控制器、响应断言等,就是一个元件。
组件:一组元件的集合(一个或多个),比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但它们被归类到逻辑控制器中,逻辑控制器就是组件
2.4.1 项目介绍
- 项目名称:XX商城
- 项目访问地址[ http://xxx.xxx.xxx.xxx]
- 接口介绍:详细见接口文档
2.4.2 第一个HTTP请求
测试接口信息
-
接口名称
- 获取商品信息
-
接口测试地址
- ${url}/categories/115/skus/?page=1&page_size=5
-
步骤
-
创建线程组
-
取样器HTTP请求
- 添加HTTP请求
-
HTTP请求配置
- 接口信息:${url}/categories/115/skus/
-
运行及查看结果
-
添加查看结果树
-
运行
-
-
2.4.3 线程组参数详解
1. setUp 线程组
- 用于执行测试前操作的线程组。
- 线程的行为和正常的线程组元件没有什么区别,唯一不同的是会在线程组之
前
执行。
2. tearDown 线程组
- 用于执行测试后操作的线程组。
- 线程的行为和正常的线程组元件没有什么区别,唯一不同的是会在线程组之
后
执行。
3. thread group(线程组)
- 这个就是我们添加的运行的线程
- 线程组中的
线程数
可以理解成模拟出来的虚拟用户
- 线程组中线程数量在测试执行的过程中是不会改变的
-
线程数
-
虚拟用户数
-
一个虚拟用户占用一个进程或线程
-
设置多少虚拟用户数在这里也就是设置多少个线程数
-
假设线程数为100,那么就相当于模拟100个用户
-
-
Ramp-Up 时间(秒)
-
准备时长
-
设置的虚拟用户数需要多长时间全部启动
-
如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
-
每个线程的执行时间间隔,如果为0那么就相当于是并发的意思
-
-
循环次数
- 执行的次数:每个线程发送请求的次数
- 如果线程数为10,循环次数为100,那么每个线程发送100次请求
- 总请求数为10*100=1000
- 永远:就是一直执行,不停止
- 如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本
- 延迟创建线程直到需要
- 直到需要时延迟线程的创建
- 调度器
- 设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
- 持续时间(秒):测试持续时间,会覆盖结束时间
- 启动延迟(秒):测试延迟启动时间,会覆盖启动时间
- 启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它
- 结束时间:测试结束时间,持续时间会覆盖它
2.4.4 取样器HTTP
-
Web服务器
- 协议:填入http
- 指定Http请求的主机地址,不需要加上
http://
,JMeter自动会加上 - 普通Web服务端口号默认是80,邮箱端口一般是443,126邮箱也用此端口号
-
HTTP请求
- 方法
- 下拉列表中有很多选项,其中我们常用的是Post与Get
- Get提交请求时会把参数暴露在浏览器地址栏,且长度有限制
- Post提交请求没有长度限制,用户一般也看不到提交的内容,较get方式安全
- 路径
- 除去主机地址部分的访问链接,我们这里是/categories/115/skus/
- 内容编码
- 大多数指定成UTF-8格式
- 自动重定向:HttpClient接收到请求后,如果请求中包含重定向请求,HttpClient是可以自动跳转的,但是只针对Get与Head请求,勾选此项则“跟随重定向”失效;自动重定向可以自动转向到最终目标页面,但是JMeter是不记录重定向过程内容的,比如在察看结果树中是无法找到重定向过程内容的(A重定向到B,此时只记录B的内容不记录A的内容,A的响应内容我们暂且叫过程内容),如果此时你要做关联,那就比较遗憾了,你无法关联到。
- 跟随重定向:Http Request 取样器的默认选项,当响应Code是3 xx时(比如301是重定向),自动跳转到目标地址。与自动重定向不同,JMeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,所以你可以对响应的内容做关联。
- Use KeepAlive:对应Http响应头中的Connection:Keep-Alive,默认选中
- Use multipart/form-data for POST
- 当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,比如我们可以用它做文件上传;这个属性是与方法POST绑定的。
- Browser-compatible headers
- 浏览器兼容模式,如果您使用Use multipart/form-data for POST建议勾选此项
- Timeouts:指定超时时间,单位是毫秒;Connect指定连接超时时间”“Response指定响应超时时间。
- 方法
- 参数
- 请求一起发送参数
- 可以把要发送的参数(就是表单域)与值填到此域
- Get方法也适用
- Post方法中传值方式key=value格式也适用
- 请求一起发送参数
- 消息体数据
- Post方法son格式数据编写区域
2.4.5 登录测试用例
步骤
-
1、编写登录http请求
-
2、增加HTTP信息头管理器
-
内容
-
名称:Content-Type
值 :application/json;charset=utf-8
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0097060d95724a378892d1b6ab19d765.png)
-
-
3、HTTP请求默认值
-
把重复的内容分离出来,只需要定义一次
-
步骤:
-
添加HTTP请求默认值
-
添加->配置元件->HTTP请求默认值
-
-
配置HTTP请求默认值
-
服务器名称或IP填写:192.168.1.111,端口号:8080
-
-
HTTP请求删除上面填写的2项
- 运行及查看结果
-
-