JMeter - Cannot start. localhost is a loopback address.

本文提供Apache JMeter分布式测试的具体步骤,包括如何在从属系统上运行jmeter-server.bat(在unix上为jmeter-server),如何在主控台系统中设置jmeter.properties文件,以及如何解决在Linux下执行jmeter-server时遇到的'localhost is a loopback address'错误,并通过使用nohup命令实现后台执行。同时,提供了检查JMeter是否成功启动的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMeter 官方解读:http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf

**********************

Step-by-Step
1. On the slave systems, go to jmeter/bin directory and execute jmeter-server.bat (jmeter-server on 
unix). 

         On windows, you should see a dos window appear with “jre\[version]\bin\rmiregistry.exe”. 
If this doesn't happen, it means either the environment settings are not right, or there are 
multiple JRE installed on the system. Note: [version] would be the jre version installed on the 
system.
          1. Open jmeter-server.bat in a text editor
          2. go to line 44 and find “:setCP”
          3. edit “START rmiregistry” to the full path. Example: “START  C:\<JAVA_HOME>\jre\bin\rmiregistry”


2. On master system acting as the console, open windows explorer and go to jmeter/bin directory
3. open jmeter.properties in a text editor
4. edit the line “remote_hosts=127.0.0.1”
5. add the IP address. For example, if I have jmeter server running on 192.168.0.10, 11, 12, 13, and 
14, the entry would like like this:
remote_hosts=192.168.0.10,192.168.0.11,192.168.0.12,192.168.0.13,192.168.0.14
6. Start jmeter.
7. Open the test plan you want to use

**************************

Jmeter - Linux 下面执行jmeter-server的时候出现:An error occurred: Cannot start. localhost is a loopback address.错误

[root@localhost bin]# ./jmeter-server

Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.0.1:39150](local),objID:[-3126fe29:14300b1102e:-7fff, -4078314045196249121]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost is a loopback address.

An error occurred: Cannot start. localhost is a loopback address.

解决方法如下: In latest version, you can run your script with:指定本地IP

./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.237.129

Created remote object: UnicastServerRef [liveRef: [endpoint:[192.168.237.129:47673](local),objID:[-7946c75b:14300b3330a:-7fff, -616947588795269019]]]

这样就可以在 本地的Master里面看到远程启动了:




******************************************************************************************

Linux下面用nohup命令**** + &,后台执行,启用server

***********************************************************************************

[root@localhost bin]# nohup ./jmeter-server -Djava.rmi.server.hostname=192.168.237.129 &

[1] 11124
[root@localhost bin]# nohup: appending output to “nohup.out”

***********************************************************************************

下面命令查看 jmeter,确定jmeter启动成功~~

***********************************************************************************

[root@localhost bin]# ps axu | grep jmeter
root     11124  0.0  0.1   4820  1036 pts/1    S    21:20   0:00 /bin/sh ./jmeter-server -Djava.rmi.server.hostname=192.168.237.129
root     11126  0.0  0.0   4820  1028 pts/1    S    21:20   0:00 /bin/sh ./jmeter -Dserver_port=1099 -s -j jmeter-server.log -Djava.rmi.server.hostname=192.168.237.129
root     11128  6.6  2.7 741152 28260 pts/1    Sl   21:20   0:00 java -server -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:MaxTenuringThreshold=2 -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+CMSClassUnloadingEnabled -jar ./ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log -Djava.rmi.server.hostname=192.168.237.129
root     11149  0.0  0.0   4260   680 pts/1    R+   21:21   0:00 grep jmeter
<think>嗯,用户之前问过关于JMeter测试报告显示每次请求结果的问题,现在又接着问如何用Python自动化执行JMeter命令生成CSV和报告。看起来用户可能是在做自动化测试集成,需要把JMeter的执行和报告生成整合到Python脚本中,可能是为了CI/CD流程或者定时任务。 首先,我需要确认用户的需求是什么。他们可能希望用Python脚本代替手动执行命令行命令,这样可以在自动化测试流程中更方便。用户给出的命令是jmeter -n -t test.jmx -l results.csv && jmeter -g results.csv -o report/,所以需要把这个命令用Python来执行,并且处理可能的错误。 接下来,我要考虑如何用Python执行外部命令。常用的方法有os.system、subprocess模块。但subprocess更灵活,可以获取输出和错误信息,处理返回码,所以推荐用subprocess.run或者subprocess.Popen。 然后,需要处理命令的顺序执行,即第二个命令在第一个成功后执行。在Shell中可以用&&,但在Python中需要检查第一个命令的返回码是否为0,然后决定是否执行第二个。这可以通过subprocess的check参数或者手动检查返回码来实现。 另外,用户可能需要错误处理,比如命令执行失败时的异常捕获,日志记录,以及生成报告后的后续处理,比如压缩报告或者发送通知。这部分可能需要进一步扩展,但根据用户当前的命令,可能暂时不需要,但最好在示例中体现出来,供用户参考。 还要考虑路径问题,比如test.jmx、results.csv和report目录的位置是否在脚本当前目录,或者是否需要指定绝对路径。在示例中可能需要提醒用户注意路径的正确性,或者使用变量来管理路径。 然后,示例代码的结构应该是:执行第一个JMeter命令,检查是否成功,成功则执行第二个生成报告的命令。使用subprocess模块,设置shell=True(注意安全性问题,但用户给出的命令里有&&,可能需要shell来解析),或者分开执行两个命令,并检查各自的返回码。 同时,需要处理可能出现的异常,比如JMeter不在系统路径中,或者test.jmx文件不存在,这时候subprocess会抛出CalledProcessError,需要进行捕获并提示用户。 最后,用户可能希望脚本能够输出执行日志,记录每个步骤的结果,方便调试和查看执行情况。所以在示例代码中加入打印语句或者日志模块的使用会更好。 总结下来,回答需要包括以下几个部分: 1. 使用subprocess模块执行命令,推荐subprocess.run。 2. 分步执行两个JMeter命令,并检查每个步骤的成功与否。 3. 错误处理,捕获异常并提供提示信息。 4. 路径处理,确保脚本能找到JMeter和测试计划文件。 5. 可能的扩展点,如日志记录、后续处理等。 可能需要提醒用户注意JMeter的环境变量是否配置正确,或者在脚本中指定JMeter的绝对路径,避免因环境问题导致命令执行失败。此外,生成的报告目录需要为空,否则JMeter会报错,所以可能需要添加删除现有报告目录的逻辑。 现在,根据这些思路,整理出一个结构清晰的回答,分步骤说明如何用Python实现自动化执行JMeter命令并生成报告,同时包含代码示例和注意事项。</think>以下是使用Python实现JMeter自动化测试及报告生成的完整解决方案: --- ### 一、基础执行脚本 ```python import subprocess import shutil # 路径配置 JMETER_PATH = "jmeter" # 如果未配置环境变量,需指定绝对路径如:"/opt/jmeter/bin/jmeter" TEST_PLAN = "test.jmx" RESULTS_CSV = "results.csv" REPORT_DIR = "report/" def run_jmeter(): try: # 清理历史报告目录 shutil.rmtree(REPORT_DIR, ignore_errors=True) # 执行压测命令 cmd_run = f"{JMETER_PATH} -n -t {TEST_PLAN} -l {RESULTS_CSV}" print(f"执行压测命令: {cmd_run}") subprocess.run(cmd_run, check=True, shell=True) # 生成HTML报告 cmd_report = f"{JMETER_PATH} -g {RESULTS_CSV} -o {REPORT_DIR}" print(f"生成报告命令: {cmd_report}") subprocess.run(cmd_report, check=True, shell=True) print("自动化测试执行完成") return True except subprocess.CalledProcessError as e: print(f"命令执行失败,错误码:{e.returncode}") print(f"错误输出:{e.output}") return False if __name__ == "__main__": run_jmeter() ``` --- ### 二、增强功能实现 #### 1. 执行时间统计 ```python import time def run_jmeter(): start_time = time.time() # ...原有代码... duration = time.time() - start_time print(f"总耗时:{duration:.2f}秒") ``` #### 2. 邮件通知 ```python import smtplib from email.mime.text import MIMEText def send_email(status): msg = MIMEText(f"JMeter测试执行状态:{'成功' if status else '失败'}") msg['Subject'] = '自动化测试通知' msg['From'] = 'sender@example.com' msg['To'] = 'receiver@example.com' with smtplib.SMTP('smtp.example.com', 587) as server: server.starttls() server.login('user', 'password') server.send_message(msg) ``` --- ### 三、关键参数配置 通过字典管理所有配置项: ```python CONFIG = { "jmeter_path": "/usr/local/bin/jmeter", "test_plan": "stress_test.jmx", "result_file": "results_$(date +%s).csv", # 时间戳防覆盖 "report_dir": "reports/latest/", "java_opts": "-Xms2g -Xmx4g" # JVM内存设置 } ``` --- ### 四、异常处理优化 ```python try: # ...执行命令... except FileNotFoundError: print("错误:JMeter路径配置错误") except PermissionError: print("错误:无文件写入权限") except KeyboardInterrupt: print("用户手动终止操作") except Exception as e: print(f"未捕获异常:{str(e)}") ``` --- ### 五、跨平台兼容方案 使用`platform`模块自动适配路径: ```python import platform def get_jmeter_path(): system = platform.system() if system == "Windows": return "C:\\jmeter\\bin\\jmeter.bat" elif system == "Linux": return "/opt/jmeter/bin/jmeter" elif system == "Darwin": return "/usr/local/Cellar/jmeter/5.4.1/bin/jmeter" else: raise OSError("Unsupported operating system") ``` --- ### 六、最佳实践建议 1. **日志记录** 添加日志记录功能: ```python import logging logging.basicConfig( filename='jmeter_auto.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) ``` 2. **性能监控** 集成资源监控: ```python import psutil def monitor_system(): print(f"CPU使用率:{psutil.cpu_percent()}%") print(f"内存使用:{psutil.virtual_memory().percent}%") ``` 3. **自动清理** 设置结果文件保留策略: ```python def cleanup(max_files=5): files = sorted(os.listdir(), key=os.path.getctime) for f in files[:-max_files]: if f.startswith("results_") and f.endswith(".csv"): os.remove(f) ``` --- ### 七、完整调用示例 ```python if __name__ == "__main__": if run_jmeter(): send_email(True) cleanup() print("查看报告:", os.path.abspath(REPORT_DIR)) else: send_email(False) print("执行失败,请检查日志") ``` --- 通过以上方案可以实现: - 完整的JMeter测试自动化流程 - 执行状态实时监控 - 跨平台兼容性 - 异常处理与通知机制 - 历史数据管理 建议根据实际需求选择功能模块组合使用,生产环境建议增加Docker容器化部署方案以提高环境一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值