JMeter性能测试最佳实践指南
- 最佳实践
16.1 始终使用最新版JMeter JMeter性能持续优化,建议使用最新版本。请定期查看更新日志了解新特性。避免使用早于最新版本三个版本的旧版。
16.2 合理配置线程数 线程数受硬件性能和测试计划设计双重影响。服务器响应速度越快,JMeter负载压力越大。不当的线程配置会导致"协调缺失"问题,产生错误结果。大规模压测建议采用分布式模式运行多个非GUI实例。使用JavaTest取样器可评估本地平台性能。
16.3 Cookie管理器放置位置 参考《构建Web测试》文档获取详细信息。
16.4 授权管理器放置位置 参考《构建高级Web测试》文档获取详细信息。
16.5 使用HTTP(S)测试脚本录制器 通过HTTP(S)测试脚本录制器配置录制参数。建议过滤非必要请求,如图片资源。可通过正则表达式定义包含模式(如"..jsp")或排除模式(如"..gif")。录制完成后需验证录制内容准确性。
16.6 用户变量配置 针对不同用户/线程需不同值的场景(如唯一登录),可通过CSV数据集实现。创建包含用户名密码的文本文件,配置CSV数据集元素,使用${USER}和${PASS}替换请求参数。
16.7 降低资源消耗
- 非GUI模式运行:jmeter -n -t test.jmx -l test.jtl
- 减少监听器使用
- 脚本调试阶段使用结果查看器
- 通过循环控制器复用取样器
- 避免使用功能性模式
- 优先使用CSV输出格式
- 精确保存所需数据
- 控制断言使用频率
- 采用高性能脚本语言(参见JSR223章节)
16.8 BeanShell服务端 BeanShell支持作为服务端运行,可通过telnet/http访问。注意:此功能无安全防护,仅在防火墙保护下启用。配置示例如下:
beanshell.server.port=9000
beanshell.server.file=../extras/startup.bsh
16.9 BeanShell脚本编写 自JMeter 3.1起推荐使用JSR223测试元素替代BeanShell。变量共享可通过"bsh.shared"命名空间实现。测试脚本可单独运行:
java -cp bsh-xxx.jar bsh.Interpreter file.bsh
16.10 Groovy/Jexl3脚本开发 使用JSR223取样器配合Groovy脚本可提升性能。脚本变量调用示例: ${__groovy(${RANDOM_NAME})}
16.11 参数化测试 通过属性文件管理测试参数,如定义LOOPS=${__P(loops,10)}。启动命令行参数: jmeter ... -Jloops=12 ...
16.12 JSR223元素 推荐使用实现Compilable接口的语言(如Groovy)。注意缓存编译脚本,避免使用${varName}变量。
16.13 线程间变量共享 线程变量默认隔离,可通过属性或bsh.shared命名空间实现跨线程共享。
16.14 属性管理 修改JMeter属性时,请修改user.properties而非jmeter.properties文件。新版本迁移时可简化操作。
16.15 已弃用元素 已弃用组件将在后续版本移除,建议及时迁移至推荐方案。