Files
meidaojia/test_hair.py
T
2026-01-03 21:49:32 +08:00

196 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import threading
import requests
import json
import base64
import time
import random
url = 'http://localhost:8801/api/swapHair/v1'
# url = 'https://693570664882181-http-8801.northwest1.gpugeek.com:8443/api/swapHair/v1'
# url = 'https://692502023221253-http-8801.northwest1.gpugeek.com:8443/api/swapHair/v1'
# url = 'https://692493464571909-http-8801.northwest1.gpugeek.com:8443/api/swapHair/v1'
headers = {'Content-Type': 'application/json'}
data = {
# "hair_id": "1907651680352395265",
# "hair_id": "1907651525024735234",
"hair_id": "1907651680352395265",
"task_id": "345564352345",
#"user_img_path": "https://cdn.meidaojia.com/ZoeFiles/user2_1_%E5%89%AF%E6%9C%AC.JPG",
# "user_img_path": "http://git.xiangsilian.com/imgs/test.jpg",
"user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_8.JPG",
"is_hr": "false",
"output_format": "base64"
}
# more_data = []
# more_data.append(data)
# data1 = {
# "hair_id": "1907651680352395265",
# "task_id": "2345623451234",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_8.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data1)
# data2 = {
# "hair_id": "1907651680352395265",
# "task_id": "3145645324",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_7.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data2)
# data3 = {
# "hair_id": "1907651680352395265",
# "task_id": "456412345",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_6.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data3)
# data4 = {
# "hair_id": "1907651680352395265",
# "task_id": "45623445",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_5.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data4)
# data5 = {
# "hair_id": "1907651680352395265",
# "task_id": "2345867435",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_4.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data5)
# data6 = {
# "hair_id": "1907651680352395265",
# "task_id": "86747535",
# "user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_3.JPG",
# "is_hr": "false",
# "output_format": "base64"
# }
# more_data.append(data6)
def image_to_base64(file_path, mime_type=None):
"""
将图片文件转换为带Base64前缀的Data URI字符串
参数:
file_path (str): 图片文件路径
mime_type (str): 可选,指定MIME类型。如果为None,则根据文件扩展名自动判断
返回:
str: 带Base64前缀的Data URI字符串
"""
# 如果没有指定MIME类型,根据文件扩展名推断
if mime_type is None:
extension = file_path.split('.')[-1].lower()
mime_types = {
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'png': 'image/png',
'gif': 'image/gif',
'webp': 'image/webp',
'bmp': 'image/bmp'
}
mime_type = mime_types.get(extension, 'application/octet-stream')
# 读取文件内容并编码为Base64
with open(file_path, 'rb') as image_file:
encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
# 组合成Data URI格式
return f"data:{mime_type};base64,{encoded_string}"
# img64_str = image_to_base64("testuser_8.JPG")
# img64_str = image_to_base64("aaa.jpg")
img64_str = image_to_base64("qwerqwe.jpg")
data['user_img_path'] = img64_str
# 存储所有请求的响应
responses = []
# 线程锁,防止多线程写入冲突
lock = threading.Lock()
send_index = 0
def send_request(start_time):
try:
sleep_time = start_time #random.uniform(0, 2) # 生成 [0, 2) 之间的随机浮点数
time.sleep(sleep_time)
global send_index
send_data = data #more_data[send_index]
# send_index = send_index + 1
# send_data['task_id'] = str(int(random.uniform(0, 10000000)))
response = requests.post(url, headers=headers, json=send_data)
with lock: # 加锁,防止多线程同时修改 responses
responses.append(response)
except Exception as e:
with lock:
responses.append({"error": str(e)})
# 创建并启动多个线程
threads = []
num_requests = 1 # 并发请求数量
time_start = time.time()
start_time = 0
for _ in range(num_requests):
# start_time = start_time + 1
start_time = 0 # random.uniform(0, 1)
t = threading.Thread(target=send_request, args=(start_time,))
t.start()
threads.append(t)
# 等待所有线程完成
for t in threads:
t.join()
end_time = time.time()
total_time = (end_time - time_start)
qps = num_requests/total_time
print(f"num_requests:{num_requests} total_time:{total_time} qps:{qps}")
import base64
import os
def save_base64_image(base64_str, filename):
"""
将 Base64 编码的图片字符串保存为本地 JPG 文件。
:param base64_str: Base64 编码的图片字符串(可能包含 data:image/jpeg;base64, 前缀)
:param filename: 保存的文件名(例如 'image.jpg'
"""
# 如果包含 data URL 前缀,去掉它
if base64_str.startswith("data:image"):
base64_str = base64_str.split(",", 1)[1]
try:
image_data = base64.b64decode(base64_str)
with open(filename, "wb") as f:
f.write(image_data)
print(f"图片已保存为 {filename}")
except Exception as e:
print(f"保存图片失败: {e}")
# 打印所有响应
for i, resp in enumerate(responses, 1):
print(f"请求 {i} 结果: {resp.status_code, resp.text[:128]}")
json_obj = json.loads(resp.text)
data_string = json_obj['data']
save_base64_image(data_string, f"response_{i}.jpg")