#!/bin/bash ############################################################################### # CN-CLIP 服务测试脚本 # # 用途: # 测试 CN-CLIP 服务的文本和图像编码功能(使用 gRPC 协议) # # 使用方法: # ./scripts/test_cnclip_service.sh [PORT] # # 参数: # PORT: 服务端口(默认:51000) # ############################################################################### set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 默认端口 PORT=${1:-51000} GRPC_URL="grpc://localhost:${PORT}" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}CN-CLIP 服务测试${NC}" echo -e "${BLUE}========================================${NC}" echo "" echo -e "服务地址: ${GRPC_URL} (gRPC 协议)" echo "" # 检查 clip_client 是否安装 if ! python3 -c "from clip_client import Client" 2>/dev/null; then echo -e "${RED}错误: clip_client 未安装${NC}" echo -e "${YELLOW}请运行: pip install clip-client${NC}" exit 1 fi # 使用 Python 客户端测试(因为服务使用 gRPC 协议) python3 << PYTHON_EOF import sys import numpy as np from clip_client import Client def test_encoding(client, test_name, inputs): print(f"\n{test_name}...") try: result = client.encode(inputs) if isinstance(result, np.ndarray): print(f"✓ 成功! 形状: {result.shape}") print(f" 输入数量: {len(inputs)}") print(f" 输出维度: {result.shape[1]}") # 显示每个 embedding 的维度和前20个数字 for i in range(min(len(inputs), result.shape[0])): emb = result[i] first_20 = emb[:20].tolist() print(f" Embedding[{i}] 维度: {len(emb)}") print(f" 前20个数字: {first_20}") return True else: print(f"✗ 失败: 返回类型错误: {type(result)}") return False except Exception as e: print(f"✗ 失败: {e}") import traceback traceback.print_exc() return False # 测试 port = "${PORT}" client = Client(f'grpc://localhost:{port}') results = [] # 测试1: 文本编码 results.append(test_encoding( client, "测试1: 编码文本", ['这是一个测试文本', '另一个测试文本'] )) # 测试2: 图像编码 results.append(test_encoding( client, "测试2: 编码图像(远程 URL)", ['https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg'] )) # 测试3: 混合编码 results.append(test_encoding( client, "测试3: 混合编码(文本和图像)", ['这是一段文本', 'https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg'] )) # 汇总 print("\n" + "="*50) print("测试结果汇总") print("="*50) print(f"总测试数: {len(results)}") print(f"通过: {sum(results)}") print(f"失败: {len(results) - sum(results)}") if all(results): print("\n✓ 所有测试通过!") sys.exit(0) else: print("\n✗ 部分测试失败") sys.exit(1) PYTHON_EOF TEST_RESULT=$? if [ $TEST_RESULT -eq 0 ]; then echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}✓ 所有测试通过!${NC}" echo -e "${GREEN}========================================${NC}" else echo "" echo -e "${RED}========================================${NC}" echo -e "${RED}✗ 部分测试失败${NC}" echo -e "${RED}========================================${NC}" exit 1 fi