Files
rag_agent/rag-web-ui/backend/tests/test_testing_pipeline.py

128 lines
5.2 KiB
Python
Raw Normal View History

2026-04-13 11:34:23 +08:00
from app.services.testing_pipeline.pipeline import run_testing_pipeline
from app.services.testing_pipeline.rules import REQUIREMENT_TYPES
def test_requirement_types_cover_all_docx_types() -> None:
expected_types = {
"功能测试",
"性能测试",
"外部接口测试",
"人机交互界面测试",
"强度测试",
"余量测试",
"可靠性测试",
"安全性测试",
"恢复性测试",
"边界测试",
"安装性测试",
"互操作性测试",
"敏感性测试",
"测试充分性要求",
}
assert set(REQUIREMENT_TYPES) == expected_types
def test_identify_requirement_type_for_interface_requirement() -> None:
result = run_testing_pipeline(
user_requirement_text="请针对外部接口的入参格式、出参内容和异常返回进行测试分解",
debug=True,
use_model_generation=False,
)
assert result["requirement_type"] == "外部接口测试"
assert len(result["test_items"]["normal"]) > 0
assert len(result["test_items"]["abnormal"]) > 0
def test_unknown_type_fallback_still_generates_content() -> None:
result = run_testing_pipeline(
user_requirement_text="请给我一份跨域的综合验证策略,重点关注体系化和可追溯性。",
debug=True,
use_model_generation=False,
)
normal_item_ids = [item["id"] for item in result["test_items"]["normal"]]
abnormal_item_ids = [item["id"] for item in result["test_items"]["abnormal"]]
normal_case_item_ids = [case["item_id"] for case in result["test_cases"]["normal"]]
abnormal_case_item_ids = [case["item_id"] for case in result["test_cases"]["abnormal"]]
assert result["requirement_type"] in {"未知类型", "功能测试", "边界测试", "性能测试"}
assert len(result["test_items"]["normal"]) > 0
assert len(result["test_items"]["abnormal"]) > 0
assert set(normal_item_ids).issubset(set(normal_case_item_ids))
assert set(abnormal_item_ids).issubset(set(abnormal_case_item_ids))
def test_output_mapping_and_formatting() -> None:
result = run_testing_pipeline(
user_requirement_text="系统需要验证边界值、非法输入和状态转换端点处理能力",
debug=True,
use_model_generation=False,
)
normal_item_ids = {item["id"] for item in result["test_items"]["normal"]}
normal_case_item_ids = [case["item_id"] for case in result["test_cases"]["normal"]]
normal_case_ids = [case["id"] for case in result["test_cases"]["normal"]]
normal_expected_ids = [expected["id"] for expected in result["expected_results"]["normal"]]
placeholders = {case["expected_result_placeholder"] for case in result["test_cases"]["normal"]}
step_lengths = [len(case["operation_steps"]) for case in result["test_cases"]["normal"]]
item_case_counts = {item_id: 0 for item_id in normal_item_ids}
for item_id in normal_case_item_ids:
if item_id in item_case_counts:
item_case_counts[item_id] += 1
step_names = [log["step_name"] for log in result["step_logs"][:3]]
assert set(normal_case_item_ids).issubset(normal_item_ids)
assert normal_item_ids.issubset(set(normal_case_item_ids))
assert normal_expected_ids == normal_case_ids
assert all(case_id.startswith(f"{item_id}-C") for case_id, item_id in zip(normal_case_ids, normal_case_item_ids))
assert all(length >= 5 for length in step_lengths)
assert any(count >= 2 for count in item_case_counts.values())
assert placeholders.issubset(
{
"{{return_value}}",
"{{state_change}}",
"{{error_message}}",
"{{data_persistence}}",
"{{ui_display}}",
}
)
assert step_names == [
"identify-requirement-type",
"decompose-test-items",
"generate-test-cases",
]
assert "**测试项**" in result["formatted_output"]
assert "\n\n**正常测试**" in result["formatted_output"]
assert "\n\n**异常测试**" in result["formatted_output"]
assert "**测试用例**" in result["formatted_output"]
assert "**预期成果**" in result["formatted_output"]
def test_identify_adequacy_requirement_type() -> None:
result = run_testing_pipeline(
user_requirement_text="请根据测试充分性要求检查需求覆盖率、语句覆盖率和分支覆盖率是否达到100%",
debug=True,
use_model_generation=False,
)
assert result["requirement_type"] == "测试充分性要求"
assert len(result["test_items"]["normal"]) > 0
assert len(result["test_items"]["abnormal"]) > 0
def test_output_should_not_repeat_raw_requirement_context() -> None:
result = run_testing_pipeline(
user_requirement_text=(
"为以下需求生成测试用例根据作战需求对电场综合防护设备的静电场防护进行启停8控制"
"轴频电场防护出航即开启,同时对外加电流阴极保护设备进行远程控制"
),
debug=True,
use_model_generation=False,
)
formatted = result["formatted_output"]
assert "需求上下文" not in formatted
assert "为以下需求生成测试用例" not in formatted
assert "启停8控制" in formatted