mixvideo-v2/cargos/text-video-agent-rust-sdk/examples/comprehensive_test.rs

261 lines
8.6 KiB
Rust
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.

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(())
}