128 lines
5.2 KiB
Python
128 lines
5.2 KiB
Python
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
|