文章目录
1. 前言
对于开发来说,在功能开发完成后做自测的时候,多一个选择。使用工具可以提高生产力!!!
对于测试来说,复习一下…0.0 (毕竟只是的个后端er,如一下内容有错误的地方,欢迎指出)
注:以下内容的环境均基于:jmeter5 + jdk1.8 + win10
接下来大概流程
2. 简介
百科介绍 : 是Apache组织开发的基于Java的压力测试工具,巴拉巴拉、、、
官网介绍 :The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.
2.1 特点
- 能够对http、ftp服务器进行压力和性能测试,也可以通过jdbc对各种数据库进行同样的测试
- 多平台支持,win、mac、linux都可以运行
- 支持脚本录制,可以生成丰富的测试报告
- 开源的、免费的、可拓展(有兴趣的可以自定义jmeter功能)
2.2 基本概念
- 点击这里 ——> 脑图连接
3. 安装配置
- 下载JDK1.8,因为Jmeter运行需要依赖jre。正常流程,是要配置JDK环境变量。
- 下载解压Jmeter5.0, 目前最新的Jmeter5需要配合jdk8+的版本。配置Jmeter环境变量,教程点这。
3.1 关于设置默认中文
3.2 关于设置内存大小(内存溢出)
4. 实操演示
4.1 脚本录制
…
4.2 测试计划执行
…
4.3 测试报告导出
导出命令:jmeter -n -t "cmt - 100.jmx" -l resutl.csv -e -o report
参数说明:
- -n: 非GUI模式执行JMeter
- -t: 执行测试文件所在的位置
- -l: 指定生成测试结果的保存文件,jtl文件格式
- -e: 测试结束后,生成测试报告
- -o: 指定测试报告的存放位置
- 导出注意点:重新导出前要删除原来已经导出的目录与文件,否则会报错
5.分布式部署
在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能。
5.1 原理
- Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
- 执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
- 执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
5.2 部署
5.2.1. 关于slave机部署
在slave服务器上解压安装jmeter。
修改配置如下三个地方:
以管理员身份运行“jmeter-server.bat”
现在salve机器启动好了,等待master调用、、、(多台slave的话,就重复以上步骤)
5.2.2. 关于master部署
在master服务器上解压安装jmeter。
修改以下配置:
启动master上的jmeter:
启动成功过的效果:
5.3 注意点事项
- 如果master上有csv脚本文件,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
- 调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以master自身的任务也很重,建议单独用一台机器作为mater。
- 每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。确保每台服务器上没有安装虚拟机,如果有可以禁用对应的虚拟机网络连接(不然有可能会出现一些调用的问题)。
6. 踩坑记录
问题描述:各种配置都没问题,但是通过master启动分布式执行测试计划后,salve上的命令面板执行得很慢(过了大概快一分钟,才starting…然后过了N分钟才finished),并且master始终没接收到slave执行计划的结果信息。
解决过程:开始以为是执行计划线程太多了100*100,然后把线程组的配置改成10 * 1。依然很慢,然后打开jmeter-server.log日志文件查看,发现slave一直试图连接一个陌生的IP“192.168.56.1”,但是连接不上报错了。
最终原因:后面反应过来,在master上我有安装了虚拟机。而slave一直尝试的这个ip就是master机器上虚拟机的网卡、、、、、所以在吧master上的虚拟网卡禁用掉。就可以畅快运行了。
问题来了: 为什么会这样???为什么slave会请求master所在机器上的虚拟机IP????
7. 补充
Q:关于分布式部署时候,master&slave的配置修改中 “server.rmi.ssl.disable=true”的修改,啥意思?为什么要改?
A:参考 官方资料,开始部署的时候只是发现如果不改为“true”会报如下错误:
如果认真看的话,会发现错误信息提示的关于keystore找不到之类的,结合官方资料如下
大概意思是指jmeter自4.0开始默认传输机制将使用SSL。SSL需要密钥和证书才能工作。必须自己创建这些密钥(出于安全考虑)。
这里报错的信息原因是:我们要使用jmeter的分布式功能,但是没生成密钥对!!!网上的解决问题的原因是简单粗暴的改配置禁用掉!!!(很多都没有说明原因)
Q:关于分布式部署下,如果master主机上安装了虚拟机,会导致master无法接收slave的执行结果?为什么slave会请求master所在机器上的虚拟机IP?
A:部署配置过程中并不需要在slave配置连接master的信息,可能需要看下jmeter的远程通信机制。暂时未找到真正原因,先放着… 回头看能不能补上