1、把iperf3加入系统变量,这样执行iperf3的时候不需要指定到iperf3的路径下;
按以下步骤设置系统变量
如果没有把iperf3加入系统变量,则给脚本指定iperf3所在的路径。
2、iperf3 server端:
#coding=utf-8
import subprocess
import time
def run_iperf3_server():
# 启动iperf3服务器
iperf_server = subprocess.Popen(['iperf3', '-s'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return iperf_server
def stop_process(process):
# 终止给定的进程
process.terminate()
# 示例:在本地启动iperf3服务器和客户端,然后关闭它们
if __name__ == "__main__":
# 启动iperf3服务器
iperf_server = run_iperf3_server()
print(u"iperf3服务器已启动")
# 等待2秒以确保服务器启动
time.sleep(125)
# 关闭iperf3服务器
stop_process(iperf_server)
print(u"iperf3服务器已关闭")
3、iperf3 client端:
#coding=utf-8
import subprocess
import signal
import os
import time
def run_iperf3_client(server_ip, parallel_streams, test_duration):
# 构建iperf3客户端命令
command = [
'iperf3', '-c', server_ip,
'-P', str(parallel_streams),
'-t', str(test_duration)
]
# 启动iperf3客户端进程
try:
iperf_client = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return iperf_client
except OSError, e:
print u"Execution failed:", e
return None
if __name__ == "__main__":
# 设置参数
server_ip = '127.0.0.1' # 将其更改为实际的iperf服务器IP地址
parallel_streams = 4 # 并行流数量
test_duration = 20 # 测试持续时间(秒)
output_file = 'C:\\Users\\admin\\Desktop\\iperf_output.txt' # 输出文件名
try:
# 启动iperf3客户端
print u"启动iperf3客户端..."
iperf_client = run_iperf3_client(server_ip, parallel_streams, test_duration)
if iperf_client is not None:
# 等待客户机完成测试
out, err = iperf_client.communicate()
with open(output_file, 'w') as f:
if out:
f.write(out.decode('utf-8'))
if err:
f.write(err.decode('utf-8'))
print u"iperf3 客户端输出已保存到" + output_file
# 获取并打印客户端输出
print u"iperf3 客户端输出:\n" + out.decode('utf-8')
if err:
print u"iperf3 客户端错误输出:\n" + err.decode('utf-8')
else:
print u"iperf3 客户端启动失败"
except Exception, e:
print u"An error occurred:", e
4、多服务端
iperf3 server
#coding=utf-8
import subprocess
import time
def start_iperf3_server(port):
command = [
'iperf3', '-s', '-p', str(port)
]
try:
server_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return server_process
except OSError as e:
print u"Failed to start iperf3 server on port {port}: {e}"
return None
if __name__ == "__main__":
server_ports = [5201, 5202, 5203] # 要启动的iperf3服务器端口,可以根据需要添加更多端口
server_processes = []
# 启动多个iperf3服务器实例
for port in server_ports:
print u"Starting iperf3 server on port " + unicode(port)
process = start_iperf3_server(port)
if process is not None:
server_processes.append(process)
print u"iperf3 server started on port" + unicode(port)
# 保持主进程运行,以便iperf3服务器保持活动状态
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print u"Shutting down iperf3 servers..."
# 终止所有iperf3服务器实例
for process in server_processes:
process.terminate()
process.wait()
print u"All iperf3 servers have been shut down."
iperf client 启用多个。
#coding=utf-8
import subprocess
import signal
import os
import time
def run_iperf3_client(server_ip,port,parallel_streams, test_duration):
# 构建iperf3客户端命令
command = [
'iperf3', '-c', server_ip,
'-p', str(port),
'-P', str(parallel_streams),
'-t', str(test_duration)
]
# 启动iperf3客户端进程
try:
iperf_client = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return iperf_client
except OSError, e:
print u"Execution failed:", e
return None
if __name__ == "__main__":
# 设置参数
server_ip = '127.0.0.1' # 将其更改为实际的iperf服务器IP地址
parallel_streams = 4 # 并行流数量
test_duration = 20 # 测试持续时间(秒)
port = '5203' #端口
#output_file = 'C:\\Users\\admin\\Desktop\\iperf_output.txt' # 输出文件名
try:
# 启动iperf3客户端
print u"启动iperf3客户端..."
iperf_client = run_iperf3_client(server_ip,port,parallel_streams, test_duration)
if iperf_client is not None:
# 等待客户机完成测试
out, err = iperf_client.communicate()
now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time())) #获取当前的时间
filename = 'Throughput-' + port + '-' + now + '-iperf.txt'
with open(filename, 'w') as f:
if out:
f.write(out.decode('utf-8'))
if err:
f.write(err.decode('utf-8'))
print u"iperf3 客户端输出已保存到" + filename
# 获取并打印客户端输出
print u"iperf3 客户端输出:\n" + out.decode('utf-8')
if err:
print u"iperf3 客户端错误输出:\n" + err.decode('utf-8')
else:
print u"iperf3 客户端启动失败"
except Exception, e:
print u"An error occurred:", e