JMeter以非GUI模式执行压力测试


为什么要使用非GUI模式执行压力测试呢?

  1. 图形化界面消耗更多资源,CPU和内存
  2. 图形化界面不支持大型的负载测试和性能测试
  3. 命令行测试支持持续集成,例如放到Jenkins这样的CI工具上

相关参数

-h:帮助,打印出有用的信息并退出
-n:以非GUI形式运行Jmeter
-t:Jmeter脚本路径
-l:输出结果路径,如果没有该文件就自动创建,可以生成csv或者jtl文件
-r:远程执行,启动远程服务
-H:代理主机,设置Jmeter使用的代理主机
-P:代理端口,设置Jmeter使用的代理主机的端口号
-e:在脚本运行结束后生成html报告
-o:保存html报告的地址,此文件夹中必须为空
-J:传递动态参数搭配, 在脚本中需要配合__P函数取值,如:-Jthreads=100 脚本取值为: ${__P(`threads,1)}`

开发一个JMeter插件(CsvWriterPostProcessor)

虽然JMeter自带的插件基本能满足大多数场景,但有时候也需要自定义一些插件来实现。网上的JMeter的插件开发文档稀少,通过本人的一些尝试,总结了一些JMeter插件开发相关的经验。

JMeter的核心组件

  • Timer 定时器,用于配置每次sampling之间的等待时间。
  • Sampler 取样器,如果是其他的协议需要实现其他协议的Sampler。
  • ConfigElement 配置组件,主要用于定义前置配置。如数据库连接,csv输入数据集等。
  • Assertion 断言,验证Sampler的结果是否符合预期。
  • PostProcessor 后置处理器,一般用于对Sampler结果进行二次加工。
  • Visualizer 将sampler的结果进行可视化展示。
  • Controller 对sampler进行逻辑控制。
  • SampleListener 监听器,一般用于保存sampler的结果等耗费时间的操作。

    JMeter插件加载机制

通过阅读JMeter源码发现,它的加载插件机制是相当简单的,扫描扩展下的的所有实现了JMeterGUIComponent和TestBean接口的类,然后进行初始化。

1
2
3
ClassFinder.findClassesThatExtend(
JMeterUtils.getSearchPaths(),
new Class[] {JMeterGUIComponent.class, TestBean.class }

所以只要确保插件的jar包在扩展路径下即可,默认路径是: JMETER_HOME/lib/ext

使用JMeter录制性能测试脚本

JMeter是一个开源的基于Java的性能测试工具,使用起来真的是即”方便”又”强大”

新建线程组

用于存放录制结果

新建代理服务器

  1. 测试计划->新建非测试原件->HTTP代理服务器
  2. TestPlan Creation 将目标控制器设置为:测试计划>线程组 (录制后的请求信息将加到此线程组中来)
  3. Requests Filtering 请求过滤,排除无关的请求,具体配置如下:

包含模式:只录制指定主机的请求

1
.+(itkeeping\.com).+

排除模式:排除静态请求

1
(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff|woff2)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×