性能测试时jmeter的keepalive设置

勾选keepalive,请求方会和被测服务器建立长连接,而不勾选则意味着是短连接。但建立长连接后,这会占用压力机(请求方)的端口,同时也会占用被测服务器的端口,而我们的端口是有限的,因此这可能会成为性能瓶颈。

 

解决方法:

  1. 不勾选keepalve(暂时延缓了出现端口不够用的情况)
  2. 修改系统的端口访问相关配置(根本解决方法)
### JMeter 在 Mac 上的性能测试教程 JMeter 是一款基于 Java 的开源工具,能够跨平台运行,包括 macOS。在 macOS 上使用 JMeter 进行性能测试的过程与在其他操作系统上基本一致,但需要特别注意安装和配置步骤。 #### 安装 JMeter 1. **下载 JMeter** 访问 [Apache JMeter 官方网站](https://jmeter.apache.org/) 下载最新版本的 JMeter(通常为 `.zip` 格式)。 2. **安装 Java 环境** 确保系统中已安装 Java 运行环境(JRE 或 JDK)。可以通过终端命令 `java -version` 检查是否已安装 Java。若未安装,可以从 [Oracle 官网](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) 下载并安装 JDK。 3. **解压 JMeter 压缩包** 解压下载的 `.zip` 文件,并将解压后的文件夹移动到合适的位置,例如 `/Applications/JMeter`。 4. **启动 JMeter** 打开终端,进入 JMeter 的 `bin` 目录: ```bash cd /Applications/JMeter/bin ``` 然后执行以下命令启动 JMeter: ```bash ./jmeter.sh ``` #### 创建第一个测试计划 1. **添加线程组** 在 JMeter 主界面中,右键点击“Test Plan”,选择 `Add > Threads (Users) > Thread Group`。线程组用于定义并发用户的数量、启动间以及循环次数。 2. **添加取样器** 右键点击线程组,选择 `Add > Sampler > HTTP Request`。在弹出的窗口中填写目标服务器的地址、端口号、请求路径等信息。例如,测试一个 Web 服务,可以设置协议为 `http`,服务器名称或 IP 为 `example.com`,端口为 `80`,请求路径为 `/api/test`。 3. **添加监听器** 右键点击线程组,选择 `Add > Listener > View Results Tree` 或 `Summary Report`。这些监听器可以帮助查看每个请求的结果和整体性能指标,如响应间、吞吐量等。 4. **运行测试** 点击工具栏上的绿色启动按钮(▶️),开始执行测试计划。可以在监听器中实查看测试结果。 5. **分析结果** 使用 `Summary Report` 监听器可以快速获取关键性能指标,如平均响应间、最小/最大响应间、吞吐量等。通过这些数据,可以评估系统的性能表现,并识别潜在瓶颈。 #### 高级功能与插件 JMeter 提供了丰富的插件生态系统,用户可以通过安装额外插件来扩展其功能。例如,[JMeter Plugins](https://jmeter-plugins.org/) 提供了许多增强型组件,如更复杂的断言、图形化报告生成器等。要安装插件,首先需要下载插件管理器(Plugins Manager),然后将其放入 JMeter 的 `lib/ext` 目录下,重新启动 JMeter 后即可通过菜单项 `Options > Plugins Manager` 来浏览和安装插件[^1]。 #### 示例脚本 下面是一个简单的 HTTP 请求测试脚本示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Example Test Plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">10</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <longProp name="ThreadGroup.start_time">1697856000000</longProp> <longProp name="ThreadGroup.end_time">1697856000000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">example.com</stringProp> <stringProp name="HTTPSampler.port">80</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> <stringProp name="HTTPSampler.path">/api/test</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> <stringProp name="HTTPSampler.connect_timeout"></stringProp> <stringProp name="HTTPSampler.response_timeout"></stringProp> </HTTPSamplerProxy> <hashTree> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <value class="org.apache.jmeter.visualizers.Visualizer" /> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <value class="org.apache.jmeter.visualizers.SummaryReport" /> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> </hashTree> </hashTree> </hashTree> </hashTree> </jmeterTestPlan> ``` 该 XML 脚本定义了一个包含 10 个并发用户的测试计划,向 `http://example.com/api/test` 发起 GET 请求,并记录结果到“View Results Tree”和“Summary Report”中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值