test_sprint3_integration.py•6.33 kB
"""
Sprint 3 整合測試
測試混合檢索和影響力分析的整合功能。
"""
import time
class TestSprint3Integration:
"""Sprint 3 整合測試類別"""
def test_performance_requirements(self):
"""測試性能要求"""
# 模擬性能測試
def simulate_search_performance():
start_time = time.time()
# 模擬搜索操作
time.sleep(0.1) # 模擬 100ms 操作
end_time = time.time()
return (end_time - start_time) * 1000 # 轉換為毫秒
# 執行性能測試
search_time = simulate_search_performance()
# 驗證 SLA
assert search_time < 500, f"Search took {search_time:.2f}ms, exceeds 500ms SLA"
def test_hybrid_search_workflow(self):
"""測試混合搜索工作流程"""
# 模擬混合搜索流程
def simulate_hybrid_search(query, top_k=10):
# 步驟1:向量搜索
vector_results = [
{"node_id": f"func_{i}", "similarity_score": 0.9 - i * 0.1}
for i in range(min(top_k // 2, 3))
]
# 步驟2:圖擴展
expanded_nodes = [
{"node_id": f"expanded_{i}", "distance": 1} for i in range(2)
]
# 步驟3:結果合併
total_results = len(vector_results) + len(expanded_nodes)
return {
"vector_results": vector_results,
"expanded_nodes": expanded_nodes,
"total_results": total_results,
"summary": f"Found {total_results} relevant code elements",
}
# 執行混合搜索
result = simulate_hybrid_search("authentication function", 10)
# 驗證結果
assert result["total_results"] > 0
assert len(result["vector_results"]) > 0
assert "authentication" in result["summary"] or "relevant" in result["summary"]
def test_impact_analysis_workflow(self):
"""測試影響力分析工作流程"""
# 模擬影響力分析流程
def simulate_impact_analysis(function_name):
# 步驟1:查找呼叫者
callers = [
{"caller_id": f"caller_{i}", "caller_name": f"caller_func_{i}"}
for i in range(3)
]
# 步驟2:查找依賴
dependencies = [
{"dep_id": f"dep_{i}", "dep_name": f"dep_func_{i}"} for i in range(2)
]
# 步驟3:計算風險
risk_score = min((len(callers) * 0.1 + len(dependencies) * 0.05), 1.0)
# 步驟4:確定風險等級
if risk_score >= 0.6:
risk_level = "HIGH"
elif risk_score >= 0.3:
risk_level = "MEDIUM"
else:
risk_level = "LOW"
return {
"function_name": function_name,
"callers_count": len(callers),
"dependencies_count": len(dependencies),
"risk_score": risk_score,
"risk_level": risk_level,
"summary": f"Function '{function_name}' has {len(callers)} callers and {len(dependencies)} dependencies. Risk level: {risk_level}",
}
# 執行影響力分析
result = simulate_impact_analysis("login")
# 驗證結果
assert result["function_name"] == "login"
assert result["callers_count"] >= 0
assert result["dependencies_count"] >= 0
assert result["risk_level"] in ["LOW", "MEDIUM", "HIGH", "CRITICAL"]
assert "login" in result["summary"]
def test_end_to_end_workflow(self):
"""測試端到端工作流程"""
# 場景:開發者想要修改某個函數
# function_to_modify = "authenticate_user"
# 步驟1:搜索相關函數
search_result = {
"relevant_functions": [
"authenticate_user",
"validate_credentials",
"check_permissions",
],
"search_time_ms": 150.0,
}
# 步驟2:分析影響
impact_result = {
"risk_level": "MEDIUM",
"affected_functions": 5,
"analysis_time_ms": 120.0,
}
# 步驟3:生成建議
recommendations = [
"Review all calling functions for potential breaking changes",
"Ensure backward compatibility for public interfaces",
"Perform thorough integration testing",
]
# 驗證端到端流程
assert len(search_result["relevant_functions"]) > 0
assert search_result["search_time_ms"] < 500
assert impact_result["analysis_time_ms"] < 500
assert len(recommendations) > 0
# 驗證總體性能
total_time = search_result["search_time_ms"] + impact_result["analysis_time_ms"]
assert total_time < 1000, f"Total workflow time {total_time}ms too slow"
def test_concurrent_operations(self):
"""測試並發操作"""
def simulate_concurrent_requests():
# 模擬多個並發請求
requests = [
{"type": "search", "query": f"query_{i}", "time_ms": 100 + i * 10}
for i in range(3)
]
requests.extend(
[
{"type": "impact", "function": f"func_{i}", "time_ms": 80 + i * 15}
for i in range(2)
]
)
# 模擬並發執行(實際上是順序執行,但驗證邏輯)
total_requests = len(requests)
successful_requests = total_requests # 假設全部成功
max_time = max(req["time_ms"] for req in requests)
return {
"total_requests": total_requests,
"successful_requests": successful_requests,
"max_time_ms": max_time,
"success_rate": (successful_requests / total_requests) * 100,
}
# 執行並發測試
result = simulate_concurrent_requests()
# 驗證並發性能
assert result["success_rate"] == 100.0
assert result["max_time_ms"] < 500
assert result["total_requests"] == result["successful_requests"]