使用JMeter过程中的心得

1,541 阅读6分钟

JMeter介绍、安装

  • Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
  • 下载地址jmeter.apache.org/download_jm…
  • 解压缩后打开bin目录,双击jmeter.bat即可运行,软件界面如图所示

JMeter基本构成

  • 测试计划:也就是描述我们本次测试的所有功能啦,我们可以在计划下添加多个线程组
  • 线程组:顾名思义,就是一组线程,其实也就是一个虚拟的用户组了,我们进行并发测试不就是模拟很多同学同时在线对我们网站发起请求吗,这里线程组就可以想象成同时段所有用户的集合,而每个线程则是具体的某个虚拟用户啦,注意这里包含了三种线程组 thread group: 这个就是我们通常添加运行的线程组啦 setUp Thread Group: 特殊类型线程组,可以用于执行预测试操作,线程行为完全像是一个正常线程组件,不同的是这些类型的线程组在执行测试前进行定期线程组的执行,既测试开始前的初始化化工作 tearDown Thread Group: 特殊类型线程组,可用于执行测试后动作,这些线程在执行线程结束后执行定期的线程组
  • 取样器:测试脚本的基础单元,用它想服务器发送一个请求,采样器会在超时前等待响应
  • 逻辑控制器: 控制测试脚本执行顺序,让测试安装用户期望的顺序和逻辑执行
  • 前置处理器:在请求发送之前对即将发送的请求做一些处理
  • 后置处理器:对采样器发出请求得到的响应做处理
  • 断言:用来验证服务器返回值和我们期望的值是否相同
  • 定时器:保存JMeter测试脚本时间相关信息
  • 配置元件:设置一些脚本信息,比如cookie, 请求头之类的
  • 监听器:顾名思义用来监听收集测试结果信息的

使用JMeter测试http请求

这里我们将创建一个简单的测试计划,来模拟Web请求测试,在这里我们模拟10个用户并发的访问,具体步骤如下

  • 添加线程组元件,并添加并发用户,选中测试计划,右键新建线程组 如图:
    解释一下线程组中各个参数的含义:线程数既线程组中需要并发的线程数;Ramp_Up时间既JMeter 启动并发用户的时间间隔,比如我们这里设置为1那么启动10个线程的时间间隔为0.1秒(1/10),也可以理解为在1秒内启动10个并发线程,注意如果我们将值设置为0,那么则代表10个线程一起启动; 循环次数:代表循环测试多少次,如果设置为1就是测试一次就结束
  • 添加http请求默认值
    如图根据你的需求填写相应的值即可,此处不再赘述
  • 添加http信息头管理器
    有的网站可能会有反爬策略,或者需要特定的请求头信息,我们可以通过添加头信息管理器,来设置http请求头
  • 添加Cookie支持 通常大部分网站都支持Cookie,要添加对Cookie的支持只需要添加一个Cookie管理器即可,如图:
  • 添加Http请求
  • 添加监听器查看测试结果
    我一般会添加聚合报告、图形结果、查看结果树三个监听器,你可以根据自己的需求添加 这样一个简单的http测试就完成了,我们点击运行即可
  • 聚合报告 聚合报告会为测试中的每一个不同采样,在表格中创建一行进行统计,对于每一个采样它都会统计服务器响应信息,提供请求数、Average、Median、Min、Max、error等统计值,注意响应时长都根据毫秒为单位。如图所示我们对每个列进行分析
  • Lable:采样标签
  • Samples: 标签名相同的采样数
  • Average: 采样响应的平均时间
  • Median: 采样响应结果的中间值,也就意味着一半的采样响应时间不会超过这个值,另一半采样响应时间不会比他少,个人认为和平均响应时间差不多
  • 90 Line: 90%采样响应时间,也就是90%的采样时间不会超过该值,其他响应时间不会比该值少
  • Min: 标签相同的采样,最小的响应时长
  • Max: 标签相同的采样,最长的响应时长
  • Error: 采样发送错误比例
  • Throughput: 吞吐量在单位时间内通过的采样数
  • KB/SEC: 以每秒KB来衡量吞吐量
  • 图形结果 图形结果将所收集的采样信息绘制到了一个图形中。如图
    在底部有各项统计信息,黑色代表采样响应时长,蓝色代表响应平均时长,红色代表当前采样响应时长标准差,绿色代表当前吞吐量(单位毫秒)
  • 查看结果树
    查看结果树会以树的形式来显示所有的采样结果,测试人员可以用它来查看任何采样结果,我们还可以看到获取响应所耗费的时间以及响应码

使用JMeter压测数据库

  • 添加测试计划
    注意这里我将测试需要的驱动添加到了ClassPath,本测试使用mysql
  • 新建线程组
  • 新建JDBC连接配置

Variable name Bound to pool:连接池的名称,这个值应该在整个测试计划唯一,以便JDBC采样器区分不同的连接

DataBase URL:数据库驱动连接串

JDBC Driver class: 数据库驱动名称

Username: 数据库用户名

Password: 数据库密码

  • 新建JDBC请求
    Variable name Bound to pool 填写我们设置的连接池名,添加SQL语句,你也可以通过Query Type设置要执行的SQL类型
  • 添加监听器查看结果

使用JMeter测试WebSocket请求

  • 添加WebSocket插件

JMeter不会原生支持WebSocket测试所以我们需要添加插件来完成,我们可以在插件官网进行下载 jmeter-plugins.org/(国内访问较慢)

将文件夹中以上几个包放到JMeter安装目录下的bin目录
将ext目录下的包放到bin目录下的ext目录下

  • 添加线程组

  • 添加取样器

  • 添加监听器 由于步骤和http测试雷同,这里就不在赘述了,值得注意的是有的我们websocket可能需要先建立连接,然后发送请求,所以我们可以添加多个取样器,这样就可以依次执行了

总结

总的来说JMeter测试简单易学,可能会有同学不清楚如何抓请求,我们其实可以通过chrome开发者模式查看,或者使用Badboy录制工具来进行录制,在使用JMeter过程中出现很多错误,这时候不要急,我们可以通过查看结果树中的取样器结果查找失败原因,多试验,多总结问题往往也会迎刃而解。