init. project
This commit is contained in:
127
rag-web-ui/backend/tests/test_testing_pipeline.py
Normal file
127
rag-web-ui/backend/tests/test_testing_pipeline.py
Normal file
@@ -0,0 +1,127 @@
|
||||
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
|
||||
Reference in New Issue
Block a user