261 lines
8.6 KiB
Rust
261 lines
8.6 KiB
Rust
use text_video_agent_client::apis::configuration::Configuration;
|
||
use text_video_agent_client::apis::{default_api, midjourney_api, llm_api, hedra20_api};
|
||
use std::time::Duration;
|
||
|
||
#[tokio::main]
|
||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||
// 创建支持 HTTPS 的客户端
|
||
let client = reqwest::Client::builder()
|
||
.timeout(std::time::Duration::from_secs(30))
|
||
.build()?;
|
||
|
||
// 创建配置
|
||
let config = Configuration {
|
||
base_path: "https://bowongai-dev--text-video-agent-fastapi-app.modal.run".to_string(),
|
||
user_agent: Some("text-video-agent-rust-client/1.0.6".to_string()),
|
||
client,
|
||
basic_auth: None,
|
||
oauth_access_token: None,
|
||
bearer_access_token: None,
|
||
api_key: None,
|
||
};
|
||
|
||
println!("🚀 文本视频智能体 API 综合测试");
|
||
println!("===============================");
|
||
println!("API 地址: {}", config.base_path);
|
||
println!();
|
||
|
||
let mut test_results = Vec::new();
|
||
|
||
// 1. 基础连接测试
|
||
println!("🔗 1. 基础连接测试");
|
||
println!("------------------");
|
||
|
||
match default_api::root_get(&config).await {
|
||
Ok(response) => {
|
||
println!("✅ 根路径连接成功: {}", response);
|
||
test_results.push(("根路径连接", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ 根路径连接失败: {:?}", e);
|
||
test_results.push(("根路径连接", false));
|
||
}
|
||
}
|
||
println!();
|
||
|
||
// 2. 健康检查测试
|
||
println!("🏥 2. 服务健康检查");
|
||
println!("------------------");
|
||
|
||
// Midjourney 健康检查
|
||
match midjourney_api::health_check_api_mj_health_get(&config).await {
|
||
Ok(response) => {
|
||
println!("✅ Midjourney 服务健康: {}", response);
|
||
test_results.push(("Midjourney 健康检查", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ Midjourney 服务异常: {:?}", e);
|
||
test_results.push(("Midjourney 健康检查", false));
|
||
}
|
||
}
|
||
println!();
|
||
|
||
// 3. LLM 功能测试
|
||
println!("🧠 3. 大语言模型功能测试");
|
||
println!("------------------------");
|
||
|
||
// 获取支持的模型
|
||
match llm_api::llm_supported_models(&config).await {
|
||
Ok(models) => {
|
||
println!("✅ 获取模型列表成功: {}", models);
|
||
test_results.push(("LLM 模型列表", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ 获取模型列表失败: {:?}", e);
|
||
test_results.push(("LLM 模型列表", false));
|
||
}
|
||
}
|
||
|
||
// 基础聊天测试
|
||
match llm_api::llm_chat(
|
||
&config,
|
||
"请用一句话介绍人工智能",
|
||
None,
|
||
Some(0.7),
|
||
Some(100),
|
||
Some(30.0),
|
||
).await {
|
||
Ok(response) => {
|
||
println!("✅ LLM 聊天成功: {}", response);
|
||
test_results.push(("LLM 聊天", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ LLM 聊天失败: {:?}", e);
|
||
test_results.push(("LLM 聊天", false));
|
||
}
|
||
}
|
||
|
||
// Gemini 聊天测试
|
||
match llm_api::invoke_gemini_ai_api_llm_google_chat_post(
|
||
&config,
|
||
"Hello, how are you?",
|
||
Some(30.0),
|
||
).await {
|
||
Ok(response) => {
|
||
println!("✅ Gemini 聊天成功: {}", response);
|
||
test_results.push(("Gemini 聊天", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ Gemini 聊天失败: {:?}", e);
|
||
test_results.push(("Gemini 聊天", false));
|
||
}
|
||
}
|
||
println!();
|
||
|
||
// 4. 图像生成测试
|
||
println!("🎨 4. 图像生成功能测试");
|
||
println!("----------------------");
|
||
|
||
// 提示词检查
|
||
let test_prompt = "a beautiful landscape";
|
||
match midjourney_api::prompt_check_api_mj_prompt_check_get(&config, test_prompt).await {
|
||
Ok(response) => {
|
||
println!("✅ 提示词检查成功: {}", response);
|
||
test_results.push(("提示词检查", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ 提示词检查失败: {:?}", e);
|
||
test_results.push(("提示词检查", false));
|
||
}
|
||
}
|
||
|
||
// 异步图像生成
|
||
match midjourney_api::async_gen_image_api_mj_async_generate_image_post(
|
||
&config,
|
||
"a simple test image, minimalist style",
|
||
None,
|
||
).await {
|
||
Ok(response) => {
|
||
println!("✅ 异步图像生成任务提交成功: {}", response);
|
||
test_results.push(("异步图像生成", true));
|
||
|
||
// 如果有任务ID,尝试查询状态
|
||
if let Some(task_id) = response.get("task_id").and_then(|v| v.as_str()) {
|
||
tokio::time::sleep(Duration::from_secs(5)).await;
|
||
|
||
match midjourney_api::async_query_status_api_mj_async_query_status_get(
|
||
&config,
|
||
task_id,
|
||
).await {
|
||
Ok(status) => {
|
||
println!("✅ 任务状态查询成功: {}", status);
|
||
test_results.push(("任务状态查询", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ 任务状态查询失败: {:?}", e);
|
||
test_results.push(("任务状态查询", false));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
Err(e) => {
|
||
println!("❌ 异步图像生成失败: {:?}", e);
|
||
test_results.push(("异步图像生成", false));
|
||
}
|
||
}
|
||
println!();
|
||
|
||
// 5. Hedra 功能测试
|
||
println!("💋 5. Hedra 唇形同步测试");
|
||
println!("------------------------");
|
||
|
||
// 注意:这里需要实际的图片和音频文件路径
|
||
// 由于是测试,我们只测试查询任务状态功能
|
||
match hedra20_api::query_task_status_api302_hedra_v2_task_status_get(
|
||
&config,
|
||
"test_task_id", // 测试任务ID
|
||
).await {
|
||
Ok(response) => {
|
||
println!("✅ Hedra 任务状态查询成功: {}", response);
|
||
test_results.push(("Hedra 状态查询", true));
|
||
}
|
||
Err(e) => {
|
||
println!("❌ Hedra 任务状态查询失败: {:?}", e);
|
||
test_results.push(("Hedra 状态查询", false));
|
||
}
|
||
}
|
||
println!();
|
||
|
||
// 6. 性能测试
|
||
println!("⚡ 6. 性能测试");
|
||
println!("-------------");
|
||
|
||
let start_time = std::time::Instant::now();
|
||
let mut successful_requests = 0;
|
||
let total_requests = 5;
|
||
|
||
for i in 1..=total_requests {
|
||
match llm_api::llm_chat(
|
||
&config,
|
||
&format!("这是第{}个测试请求", i),
|
||
None,
|
||
Some(0.5),
|
||
Some(50),
|
||
Some(10.0),
|
||
).await {
|
||
Ok(_) => {
|
||
successful_requests += 1;
|
||
print!("✅");
|
||
}
|
||
Err(_) => {
|
||
print!("❌");
|
||
}
|
||
}
|
||
std::io::Write::flush(&mut std::io::stdout()).unwrap();
|
||
tokio::time::sleep(Duration::from_millis(500)).await;
|
||
}
|
||
|
||
let elapsed = start_time.elapsed();
|
||
println!();
|
||
println!("📊 性能测试结果:");
|
||
println!(" - 总请求数: {}", total_requests);
|
||
println!(" - 成功请求数: {}", successful_requests);
|
||
println!(" - 成功率: {:.1}%", (successful_requests as f64 / total_requests as f64) * 100.0);
|
||
println!(" - 总耗时: {:.2}秒", elapsed.as_secs_f64());
|
||
println!(" - 平均响应时间: {:.2}秒", elapsed.as_secs_f64() / total_requests as f64);
|
||
|
||
test_results.push(("性能测试", successful_requests > total_requests / 2));
|
||
println!();
|
||
|
||
// 7. 测试结果汇总
|
||
println!("📋 7. 测试结果汇总");
|
||
println!("------------------");
|
||
|
||
let total_tests = test_results.len();
|
||
let passed_tests = test_results.iter().filter(|(_, passed)| *passed).count();
|
||
|
||
println!("测试项目详情:");
|
||
for (test_name, passed) in &test_results {
|
||
let status = if *passed { "✅ 通过" } else { "❌ 失败" };
|
||
println!(" - {}: {}", test_name, status);
|
||
}
|
||
|
||
println!();
|
||
println!("总体结果:");
|
||
println!(" - 总测试数: {}", total_tests);
|
||
println!(" - 通过测试数: {}", passed_tests);
|
||
println!(" - 通过率: {:.1}%", (passed_tests as f64 / total_tests as f64) * 100.0);
|
||
|
||
if passed_tests == total_tests {
|
||
println!("🎉 所有测试通过!API 功能正常。");
|
||
} else if passed_tests > total_tests / 2 {
|
||
println!("⚠️ 大部分测试通过,但有部分功能可能存在问题。");
|
||
} else {
|
||
println!("🚨 多数测试失败,API 可能存在严重问题。");
|
||
}
|
||
|
||
println!();
|
||
println!("🎯 综合测试完成!");
|
||
Ok(())
|
||
}
|