Apache Jmeter 是Apache组织开发的基于Java的压力测试工工具
Jmeter 可用于对服务器,网络或对象模拟巨大的负载,来自
不同压力类别下测试他们的强度和分析整体性能。另外,Jmeter 能够对应用程序做功能/回归性测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性Jmeter允许使用正则表达式创建断言。
能够对http 和ftp 服务器进行压力测试和性能测试,也可以对任何数据库进行同样的测试( 通过JDBC )
完全的可移植性和100% 的纯java
完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。
各种负载统计表和可链接的计时器可供选择。
数据分析和可视化插件提供了很好的可扩展性以及个性化
具有提供动态输入到测试的功能。
第一种Badboy录制(推荐使用,仅支持Windows)
1.Badboy简介:
说简单点,badboy 就是一个浏览器模拟工具,具有录制及回放功能,还可以进行调试。我们可以用它来做自动化测试,因为它有捕获表单数据的功能,我们也可以用它来对web页面做诊断,诊断系统反应快慢,响应数据大小,当然了这些不是我们使用Badboy的重点,我们关注的是Badboy 的录制功能。
Badboy录制的脚本可以直接导出jmx格式,jmx 正是Jmeter 脚本保存的格式,jmx 实际上是一个XML格式的文件。
Bodboy 的录制方式有两种,一种是Request 方式,一种是Navigation 方式。
这两种方式的区别是:
request:模仿浏览器发送表单信息到服务器,每一个资源都将作为请求发送。
Navigation: 记录用户的鼠标动作,类似于著名的自动化测试工具QTP,回放时模拟一个点击。
基于Jmeter 脚本的要求,我们需要选用request的方式来录制,这些请求将会以jmx的格式保存下来,从而我们才可以导入Jmeter中进行复用。
2.录制
第一步:打开Badboy 工具,打开栏目上的红色圆圈按钮,在地址栏输入被测试项目的地址
第二步:录制完成后,点击工具旁边的黑色按钮,结束录制,选择文件—》Export to Jmeter
第三步:打开Jmeter 工具,选择文件-——》“打开” 选择刚才保存的文件(.jmx 类型) 将文件导入进来了。
第二种方式:代理
步骤:
第一步:创建一个线程组(右键点击“测试计划”—> 添加----> 线程组)
第二步:在非测试元件中添加HTTP代理服务器
代理服务器的端口,默认8888 ,可自行修改,但不要与其他端口冲突
目标控制器:录制脚本存放的位置,可选项为测试计划中的线程组(根据实际情况选择即可)
分组:对请求进行分组。“分组” 的概念是将一批请求汇总分组,可以把url 的请求理解为组
分组的可选项如下:
第三步:设置IE浏览器为代理服务器
具体操作如下:
IE----> internet 属性-----> "连接“-----> "局域网设置“(端口需要和jmeter填写的端口保持一致)
第四步:回到jmeter在刚才的页面上点击启动按钮
第五步:打开IE浏览器访问待测项目的地址,Jmeter会自动记录你IE 所访问的页面。
第一步:录制脚本
第二步:选中搜索框中的query ,点击tools 工具,下面有一个Add Assertion for Selectionm, 然后会看到脚本区多了一行
第三步:点击全部回放按钮进行回放
最后一步:点击回放即可
第一步:odbc 安装与配置
第二步:点击Tools ,选择Data Source
如果前面配置好odbc 这一步就会看到你的配置
第二步:data source 放到脚本最前端
3.Badboy 中跑并发
点击Tools选择Run Background Threads
Number of Thread :并发数
Clear cookies each iteration :每次运行之前清理cookies
Stagger time:每次运行的间隔时间
5.Badboy 中的Report
点击View Report 选择Summary Repopt 可以看到报告
6.Badboy 中打断点
选中相应的请求右键选择选择Toggle Break Point
一. 测试步骤
Http 请求设置说明:
场景设置(在线程组中设置)
线程数:虚拟用户数
Ramp-up 时间:设置虚拟用户数在多长时间内全部启动,如果线程数为20,时间为10,就是每秒钟启动2个线程。
循环次数:每个线程发送请求的次数,如果线程数为20,循环次数为100,那么每个线程发送100次请求,总请求数为100*20=2000 如果勾选了“永远” 那么线程会一直运行下去。
调度器:可以灵活的设置运行时间等。
案例一:
测试20个用户访问某网站 在QPS达到30 的平均响应时间
QPS: 每秒查询率,是一台服务器每秒能处理的查询次数。
第二步:添加HTTP请求
第三步:设置QPS的值
Jmeter 提供了一个非常有用的定时器:称为Constant Throughput Timer (常数吞吐量定时器)该定时器可以很方便地控制给给取样器发送请求的吞吐量
这个下面还有5个选项
只有此线程:控制每个线程的吞吐量,选择该选项总的吞吐量等于目标吞吐量* 线程数
所有活动线程:选择该选项设置的目标吞吐量将分配到每个活跃的线程上,每个活跃线程在上一次运行结束后等待合理的时间再次运行,活跃线程指同一时刻同时运行的线程都会。
所有活动线程(共享)):与所有活动线程基本相同,唯一不同的是每个的活跃线程都会在在=上一次运行结束后等待合理的时间再次运行
当前线程组中的所有活动线程:设置的目标吞吐量将分配到当前线程组的每一个活跃的线程上,当测试计划中只有一个线程组时,该选项与所有活动线程选项的效果相同。
当前线程组中的所有活动线程(共享):和当前线程组中的所有活动线程 基本相同,唯一不同的是:每个活跃线程都会在都会在所有活跃线程的上一次运行运行结束后
等待合理的时间再次运行
1.Jmeter 元件的作用域
2.Jmeter 元件的执行顺序
如果在统一作用域范围内有多个同一类型的元件,则这些元件按照他们在测试计划中上下顺序依次执行。
第一种方式:
线程组–>前置处理其–>用户参数
输入变量名称和变量值
在请求中使用将需要参数化的地方用参数名称代替
第二种方式:
配置元件–>CSV Data Set Config
把参数化的文件地址写入
参数文件的格式如下:
参数文件配置好后我们同样需求在请求中将需要参数化的地方用参数名进行替换。
工具—>函数助手对话框
选择random ,输入最大值,最小值,点击生成
最后把自动生成的函数字符串复制到需要参数化的地方即可
定时器—>Synchronzing
步骤:
其他断言功能:
断言持续时间:就是你给你的请求填写一个预期的响应时间,在预期响应时间呢,断言成功,否则失败
下载插件:点我下载
下载这两个:
首先将JmeterPluging.jar 包复制到Jmeter lib 目录下的ext 目录下 然后重新启动
Jmeter 将Server-Anent 目录下的文件复制到我们的测试服务器上,然后打开点击Server.bat 他的默认端口是4444
第一步:创建一个线程组
第一步:准备一个有数据的表的数据库
第二步:在测试面板点击浏览按钮把你的JDBC驱动添加进来,
jdbc 驱动下载地址:下载地址:点我下载
mysql-connector-java-5.1.7-bin.jar
下一步:设置JDBC的连接配置
下一步:添加JDBC请求
下一步添加断言,并添加断言结果(同上)
下一步:添加查看结果树,添加报告
最后一步:运行即可
背景:由于Jmeter 本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至为引起Java 内存溢出的错误,要解决这个问题,可以使用分布式测试,运行多台机器所谓的Anent 来分担Jmeter 自身的压力,并借此来获得更多得并发用户数。
操作步骤:
1.安装Jmeter并确定其中一台作为控制机,其他机器作为Agent,然后运行所有Agent上的Jmeter-Server.bat 文件 假设我们使用两台机器192.168.0.11 和192.168.0.12 作为Agent(Agent 上必须装上jdk 并设置好环境变量)
2.在 控制机 Jmeter home 的bin目录下 编辑jmeter.properties 文件修改remote_host 为192.168.0.11:1099,192.168.0.12:1099 其中1099 为端口号
3.启动控制机上的jmeter.bat ,选择菜单中的Remote run 中的agent 来运行即可
常见问题:
1.Jmeter 需要与jdk的版本一致