《JMeter核心技术、性能测试与性能分析》是一本由清华大学出版社出版的图书,本书共分11章,内容包括认识JMeter、认识性能测试、初识JMeter元件、JMeter主要元件详细介绍、常见JMeter性能测试脚本编写案例、BeanShell、JMeter中如何编写自定义的取样器、性能分析、电商网站的秒杀系统性能测试与性能分析案例、JMeter性能测试的最佳实践、大模型辅助性能测试。最后还给出一个JMeter属性配置项的附录供读者参考。
1. GUI 界面语言设置
1.1. language :用于设置Jmeter界面的首选GUI语言,默认为language=en ,如果该属性配置被删除掉,那将会使用JVM虚拟机中的默认语言环境的语言。
1.2. locales.add:用于设置要添加到Jmeter界面中选项菜单下语言选择列表中的语言,比如可以设置locales.add=zu,Jmeter默认初始为en、fr、de、no、es、tr、ja、zh_CN、zh_TW、pl、pt_BR。
2. XML 解析
2.1. xpath.namespace.config:用于设置Jmeter中XML解析时xpath的namespace(XML命名空间)前缀的配置,比如ns=http://biz.aol.com/schema/2006-12-18
2.2. xpath2query.parser.cache.size:用于设置Jmeter中XML解析时用于存储已编译XPath查询的XPath2查询的缓存,默认为400。
3. SSL 配置
3.1. https.sessioncontext.shared:用于设置ssl配置中的ssl会话是否为多线程用户共享的,默认情况下为false,表示ssl会话在Jmeter多线程用户中是每个线程都会创建一个,不会进行共享,如果设置为true,那就所有的多线程用户会共用一个ssl会话。
3.2. https.default.protocol:用于设置ssl配置中的协议类型,默认为https.default.property=TLS。
3.3. https.socket.protocols:用于设置ssl配置中对socket要启用的协议列表,比如https.socket.protocols=SSLv2 SSLv3 TLSv1
3.4. https.cipherSuites:用于设置ssl配置中需要使用密码套件的子集,即以逗号分隔的SSL密码套件列表,可用于HTTPS连接,例如https.cipherSuites=TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
3.5. httpclient.reset_state_on_thread_group_iteration:用于设置Jmeter启动新的线程组迭代时重置HTTP的状态,默认为true表示关闭已打开的连接,并且重置SSL状态。
3.6. https.use.cached.ssl.context:用于设置Jmeter是否控制允许在每次迭代之间重用缓存的SSL上下文,默认值为:true,如果设置为false表示每次迭代时重置SSL上下文。
3.7. https.keyStoreStartIndex:用于设置密钥存储库的开始索引位置号,默认值为:0表示使用第一个。
3.8. https.keyStoreEndIndex:用于设置密钥存储库的结束索引位置号,默认值为:0。
4. 界面外观和风格配置
4.1. jmeter.laf.windows_10:用于设置Jmeter 界面展示的风格,比如
jmeter.laf.windows_10=javax.swing.plaf.metal.MetalLookAndFeel
jmeter.laf.windows=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
jmeter.laf.mac=System
jmeter.laf=System
4.2. jmeter.loggerpanel.display:用于设置Jmeter是否显示记录器面板,默认为false。
4.3. jmeter.loggerpanel.enable_when_closed:用于设置Jmeter是否启用LogViewer面板,这样即使在关闭时也能接收日志事件。
4.4. jmeter.loggerpanel.maxlength:用于设置LoggerPanel中保留的最大日志行数,0表示没有限制。
4.5. jmeter.gui.refresh_period:用于设置Jmeter处理侦听器事件的间隔时间(单位为毫秒),默认为500。
4.6. darklaf.decorations:用于设置使用Darklaf外观时是否启用自定义窗口,默认值为:false。
4.7. darklaf.unifiedMenuBar:用于设置使用Darklaf外观时,在Windows上是否启用统一菜单栏,默认为true。
5. 工具栏显示配置:
5.1. jmeter.toolbar.icons:用于设置Jmeter工具栏图标,默认为org/apache/jmeter/images/toolbar/icons-toolbar.properties
5.2. jmeter.toolbar:用于设置Jmeter界面工具栏列表,默认为new,open,close,save,save_as_testplan,|,cut,copy,paste,|,expand,collapse,toggle,|,test_start,test_stop,test_shutdown,|,test_start_remote_all,test_stop_remote_all,test_shutdown_remote_all,|,test_clear,test_clear_all,|,search,search_reset,|,function_helper,help
5.3. jmeter.toolbar.icons.size:用于设置Jmeter工具栏图标大小,可选尺寸有:22x22、32x32、48x48,在HiDPI模式的建议值为jmeter.toolbar.icons.size=48x48,默认为22x22。
5.4. jmeter.icons:用于定义Jmeter图标,比如jmeter.icons=org/apache/jmeter/images/icon_1.properties,默认值为org/apache/jmeter/images/icon.properties
5.5. jmeter.tree.icons.size:用于设置Jmeter菜单树的图标大小,可选尺寸有:19x19、24x24、32x32、48x48,默认为19x19,对于3200x1800这样的HiDPI屏幕,建议设置为:32x32。
5.6. jmeter.hidpi.mode:用于设置HiDPI模式,默认值为:false。
5.7. jmeter.hidpi.scale.factor:用于设置HiDPI缩放比例因子,默认值为:1.0。
5.8. not_in_menu:用于设置不在JMeter GUI界面中显示的组件,默认为:org.apache.jmeter.protocol.mongodb.sampler.MongoScriptSampler, org.apache.jmeter.protocol.mongodb.config.MongoSourceElement
5.9. undo.history.size:用于设置Jmeter撤消历史记录中的项目数,默认值为:0。
5.10. gui.quick_X用于设置Jmeter快捷键,其中X是快捷键,例如:
gui.quick_0=ThreadGroupGui
gui.quick_1=HttpTestSampleGui
gui.quick_2=RegexExtractorGui
gui.quick_3=AssertionGui
gui.quick_4=ConstantTimerGui
gui.quick_5=TestActionGui
gui.quick_6=JSR223PostProcessor
gui.quick_7=JSR223PreProcessor
gui.quick_8=DebugSampler
gui.quick_9=ViewResultsFullVisualizer
6. JMX 备份配置:
6.1. jmeter.gui.action.save.backup_on_save:用于设置Jmeter中当保存测试计划时是否启用测试计划的.jmx文件的自动备份,默认值为:true,表示已启用自动备份,启用后,在保存.jmx之前,它将被备份到jmeter.gui.action.save.backup_directory属性指向的目录(见下文)。备份文件名是在保存jmx文件后生成的。例如,保存test-plan.jmx文件时将在备份目录中创建一个test-plan-0000112.jmx,前提是最后创建的备份文件是test-plan-000011.jmx。
6.2. jmeter.gui.action.save.backup_directory:用于设置在Jmeter界面中保存测试计划时创建对应的JMX备份的备份目录路径。若未设置默认值,则将在JMeter基础安装的子目录中创建备份文件。如果已设置,但目录不存在,则将创建相应的目录。默认值为:${JMETER_HOME}/backups
6.3. jmeter.gui.action.save.keep_backup_max_hours:用于设置自动保存时间以来应保留的测试计划备份文件的最长时间(以小时为单位)。
6.4. 默认情况下,没有设置过期时间,这意味着将永远保留备份。默认值为:0。
6.5. jmeter.gui.action.save.keep_backup_max_count:用于设置应保留的最大测试计划的备份文件数。默认情况下默认值为:10,将保留10个备份。将其设置为零将导致备份不会被删除(除非keep_backup_max_hours设置为非零值)。
6.6. save_automatically_before_run:用于设置是否在开始运行测试计划之前启用.jmx文件的自动保存,默认值为:true,启用后,在运行之前,.jmx将被保存并备份到指定的目录。7. 远程主机和RMI 配置:
7.1. remote_hosts:用于设置Jmeter分布式运行时的远程主机列表,通常以逗号分隔,比如remote_hosts=localhost:1099,localhost:2010,默认值为127.0.0.1。
7.2. server_port:用于设置Jmeter分布式运行时服务器要使用的RMI端口(必须使用相同的端口启动rmiregistry),默认为1099。
7.3. client.rmi.localport:用于设置Jmeter分布式运行时RemoteSampleListenerImpl实现类和RemoteThreadsListenerImpl实现类使用的RMI端口的参数,默认值为0,表示端口为随机分配,如果设置为非0,将会用该值作为分布式运行时客户端引擎的本地端口号的基数。
7.4. client.tries:用于设置Jmeter分布式运行时客户端初始化远程连接充实的次数,默认值为1,代表只进行一次重试。
7.5. client.retries_delay:用于设置Jmeter分布式运行时客户端每次重试的间隔延迟时长,单位为毫秒。
7.6. client.continue_on_fail:用于设置Jmeter分布式运行时,客户端重试多次失败后,是否继续,默认为false,如果设置为true代表忽略失败的客户端节点并继续测试。
7.7. server.rmi.port:用于设置Jmeter分布式运行时访问服务器的端口,默认为1099。
7.8. server.rmi.localport:用于设置Jmeter分布式运行时设置的JMeter服务端的端口号。
7.9. server.rmi.create:用于设置是否JMeter服务端需要创建RMI注册表作为服务器进程的一部分,默认为true。
7.10. server.exitaftertest:用于设置Jmeter分布式运行时是否让JMeter在第一次测试后就退出,默认为true。
7.11. server.rmi.ssl.keystore.type:用于设置Jmeter分布式运行时RMI连接的安全密钥库类型,默认值为:JKS,这个值通常取决于使用的JVM虚拟机支持的安全密钥库类型,通常会支持JKS和PKCS12。
7.12. server.rmi.ssl.keystore.file:用于设置Jmeter分布式运行时包含私钥的密钥库文件的名字,默认为:rmi_Keystore.jks。
7.13. server.rmi.ssl.keystore.password:用于设置Jmeter分布式运行时Keystore密码,默认为changeit。
7.14. server.rmi.ssl.keystore.alias:用于设置Jmeter分布式运行时的密钥别名,默认为rmi。
7.15. server.rmi.ssl.truststore.type:用于设置Jmeter分布式运行时RMI连接安全的信任库类型,默认为server.rmi.ssl.keystore.type属性的值,即JKS。
7.16. server.rmi.ssl.truststore.file:用于设置Jmeter分布式运行时包含证书的密钥库的文件名,默认为server.rmi.ssl.Keystore.file属性的值,即rmi_Keystore.jks。
7.17. server.rmi.ssl.truststore.password:用于设置Jmeter分布式运行时信任存储的密码,默认为server.rmi.ssl.keystore.password属性的值,即changeit。
7.18. server.rmi.ssl.disable:用于设置Jmeter分布式运行时是否需要对rmi关闭ssl安全协议,默认为false。
8. 控制器配置:
8.1. includecontroller.prefix:用于设置IncludeController在生成文件名时使用的前缀,默认为空。
9. HTTP JAVA 配置:
9.1. http.java.sampler.retries:用于设置HTTP Java取样器放弃执行之前需要进行连接重试的次数,默认值为0,表示不会重试。
10. Apache HttpClient 通用配置:
10.1. http.post_add_content_type_if_missing:用于设置JMeter是否应该在POST请求中添加http header类型:application/x-www-form-urlencoded,默认值为:false。
10.2. httpclient.timeout:用于设置AJP 取样器中的socket超时时长,也可以通过http.socket.timeout属性来设置,单位为毫秒,默认为0,代表不会超时。
10.3. httpclient.version:用于设置http协议的版本,默认为1.1,或者使用http.property.version属性也可以进行设置。
10.4. httpclient.socket.http.cps:用于设置http请求时socket每秒传输的字符数以模拟慢速处理,默认值为0,表示无限制。
10.5. httpclient.socket.https.cps:用于设置https请求时socket每秒传输的字符数以模拟慢速处理,默认值为0,表示无限制。
10.6. httpclient.loopback:用于设置是否开启loopback(回环)协议,默认为true。
10.7. httpclient.localaddress:用于设置多宿主主机的本地主机地址。
10.8. http.proxyUser:用于设置http请求时的代理用户名。
10.9. http.proxyPass:用于设置http请求时的代理用户名对应的密码。
11. Kerberos 属性配置:
11.1. kerberos_jaas_application:用于设置Jmeter中kerberos配置中的应用程序模块的名称,默认值为Jmeter。
11.2. kerberos.spnego.strip_port:用于设置SPNEGO身份验证构建SPN之前,是否应从url中去除端口,默认值为true。
11.3. kerberos.spnego.use_canonical_host_name:用于设置是否应将用于构造SPN的主机名规范化以进行SPNEGO身份验证。
11.4. kerberos.spnego.delegate_cred:用于设置SPNEGO身份验证是否应使用凭据验证,默认值为false。
12. Apache HttpComponents HTTPClient (HTTPClient4 )配置:
12.1. hc.parameters.file:用于定义一个用于覆盖Apache HttpClient参数的属性文件,默认值为:hc.parameters。
12.2. httpclient4.auth.preemptive:用于设置httpclient4实现的HTTP取样器在BASIC身份验证时,是否需要优先发送授权header,默认为:true。
12.3. httpclient4.retrycount:用于设置httpclient4实现的HTTP取样器请求时重试的次数,默认值为:0。
12.4. httpclient4.request_sent_retry_enabled:用于设置httpclient4实现的HTTP取样器是否开启请求发送重试,通常会和httpclient4.retrycount属性一起使用。
12.5. httpclient4.idletimeout:用于设置httpclient4实现的HTTP取样器如果服务器不发送Keep-Alive超时header,则应用空闲连接超时的时长,单位为毫秒,默认值为:0,表示不超时。
12.6. httpclient4.validate_after_inactivity:用于设置httpclient4实现的HTTP取样器自上一次连接活跃以来需要经过多少时间返回请检查连接提示,单位为毫秒,默认值为4900。
12.7. httpclient4.time_to_live:用于设置httpclient4实现的HTTP取样器连接的存在时长,单位为毫秒,默认值为:60000。
12.8. httpclient4.deflate_relax_mode:用于设置httpclient4实现的HTTP取样器是否需要忽略某些应用程序可能发出的EOFException,以表示Deflated流的结束,默认值为false。
12.9. httpclient4.gzip_relax_mode:用于设置httpclient4实现的HTTP取样器是否需要忽略某些应用程序可能发出的EOFException,以表示GZipped流的结束,默认值为:false。
12.10. httpclient4.default_user_agent_disabled:用于设置httpclient4实现的HTTP取样器是否需要关闭默认的代理用户,如果为true。
13. HTTP 缓存管理配置:
13.1. cacheable_methods:用于设置HTTP取样器请求中可以缓存的方法列表,以空格或逗号分隔,默认为GET。
13.2. cache_manager.cached_resource_mode:用于设置HTTP取样器请求中缓存资源的模式,默认值为RETURN_N_AMPLE(不返回取样结果),可以支持RETURN_N_AMPLE、RETURN_CUSTOM_STATUS(返回自定义状态)、RETURN_200_CACHE(返回采样结果)。
13.3. RETURN_CUSTOM_STATUS.code:用于设置HTTP取样器请求中在cache_manager.cached_resource_mode属性设置为RETURN_CUSTOM_STATUS时要返回的响应代码。
13.4. RETURN_CUSTOM_STATUS.message:用于设置HTTP取样器请求中在cache_manager.cached_resource_mode属性设置为RETURN_CUSTOM_STATUS时要返回的响应消息。14. 结果文件配置:
14.1. jmeter.save.saveservice.output_format:用于设置保存结果数据时支持的格式,默认为csv,支持xml和csv两种。
14.2. jmeter.save.saveservice.assertion_results_failure_message:用于设置保存数据时是否需要保存断言结果为失败的信息,默认为true。
14.3. jmeter.save.saveservice.assertion_results:用于设置保存数据时,当保存断言结果时,断言结果如何取值,默认为none,同时也支持设置为first(保存第1条)和 all(保存所有)。
14.4. jmeter.save.saveservice.data_type:用于设置保存数据时是否需要保存data_type(数据类型)字段,默认为true。
14.5. jmeter.save.saveservice.label:用于设置保存数据时是否需要保存label字段,默认为true。
14.6. jmeter.save.saveservice.response_code:用于设置保存数据时是否需要保存response_code字段,默认为true。
14.7. jmeter.save.saveservice.response_data:用于设置保存数据时是否需要保存response_data字段,默认为false。
14.8. jmeter.save.saveservice.response_data.on_error:用于设置保存数据时当出现报错时,是否需要保存response_data字段,默认为false。
14.9. jmeter.save.saveservice.response_message:用于设置保存数据时是否需要保存response_message字段,默认为true。
14.10. jmeter.save.saveservice.successful:用于设置保存数据时是否需要保存successful字段,默认为true。
14.11. jmeter.save.saveservice.thread_name:用于设置保存数据时是否需要保存thread_name字段,默认为true。
14.12. jmeter.save.saveservice.time:用于设置保存数据时是否需要保存time字段,默认为true。
14.13. jmeter.save.saveservice.subresults:用于设置保存数据时是否需要保存subresults字段,默认为true。
14.14. jmeter.save.saveservice.assertions:用于设置保存数据时是否需要保存assertions字段,默认为true。
14.15. jmeter.save.saveservice.latency:用于设置保存数据时是否需要保存latency字段,默认为true。
14.16. jmeter.save.saveservice.connect_time:用于设置保存数据时是否需要保存connect_time字段,默认为false。
14.17. jmeter.save.saveservice.samplerData:用于设置保存数据时是否需要保存samplerData字段,默认为false。
14.18. jmeter.save.saveservice.responseHeaders:用于设置保存数据时是否需要保存responseHeaders字段,默认为false。
14.19. jmeter.save.saveservice.requestHeaders:用于设置保存数据时是否需要保存responseHeaders字段,默认为false。
14.20. jmeter.save.saveservice.encoding:用于设置保存数据时是否需要保存encoding字段,默认为false。
14.21. jmeter.save.saveservice.bytes:用于设置保存数据时是否需要保存bytes字段,默认为true。
14.22. jmeter.save.saveservice.url:用于设置保存数据时是否需要保存url字段,默认为false。
14.23. jmeter.save.saveservice.filename:用于设置保存数据时是否需要保存filename字段,默认为false。
14.24. jmeter.save.saveservice.hostname:用于设置保存数据时是否需要保存hostname字段,默认为false。
14.25. jmeter.save.saveservice.thread_counts:用于设置保存数据时是否需要保存thread_counts字段,默认为true。
14.26. jmeter.save.saveservice.sample_count:用于设置保存数据时是否需要保存sample_count字段,默认为false。
14.27. jmeter.save.saveservice.idle_time:用于设置保存数据时是否需要保存sample_count字段,默认为true。
14.28. jmeter.save.saveservice.timestamp_format:用于设置保存数据时需要设置的时间戳格式,默认为ms,支持none, ms或者一个具体的日期格式(比如yyyy/MM/dd HH:mm:ss.SSS)。
14.29. jmeter.save.saveservice.default_delimiter:用于设置保存数据时字段之间的分隔符,默认为逗号,比如可以重新设置为\t(表示以tab键进行分割)。
14.30. jmeter.save.saveservice.print_field_names:用于设置保存数据时是否输出字段名,通常适用于csv格式数据输出时用到,默认为true。
更多JMeter属性配置,请参考https://jmeter.apache.org/usermanual/properties_reference.html