7. 质量与测试
7.1 提示词单元测试
测试框架
提示词单元测试用于验证Prompt模板的效果和质量。
测试框架设计
# 提示词测试框架示例
import pytest
from codegen.testing import PromptTester
class TestCodeGenerationPrompt:
def setup_method(self):
self.tester = PromptTester()
self.prompt_template = "code_generation_v1"
def test_simple_function_generation(self):
"""测试简单函数生成"""
result = self.tester.test(
template=self.prompt_template,
input_data={
"language": "python",
"requirement": "创建一个计算两数之和的函数"
},
expected_output={
"contains": ["def", "add", "return"],
"syntax_valid": True,
"executable": True
}
)
assert result.passed, result.message
def test_complex_class_generation(self):
"""测试复杂类生成"""
result = self.tester.test(
template=self.prompt_template,
input_data={
"language": "python",
"requirement": "创建一个用户管理类,包含增删改查方法"
},
expected_output={
"contains": ["class", "User", "def", "create", "delete", "update", "get"],
"syntax_valid": True,
"has_docstring": True
}
)
assert result.passed, result.message
测试指标
- 语法正确率:生成代码的语法正确率
- 功能正确率:生成代码的功能正确率
- 代码质量:代码质量评分
- 响应时间:模型响应时间
- 成本:模型调用成本
测试报告
{
"test_suite": "code_generation_prompt_v1",
"total_tests": 100,
"passed": 85,
"failed": 15,
"metrics": {
"syntax_accuracy": 0.92,
"function_accuracy": 0.85,
"quality_score": 0.88,
"avg_response_time": 1.2,
"avg_cost": 0.05
},
"failed_tests": [
{
"test_name": "test_complex_api_generation",
"reason": "生成的代码缺少错误处理",
"suggestion": "在Prompt中添加错误处理要求"
}
]
}
测试用例设计
测试用例分类
- 功能测试:测试Prompt是否能生成正确的功能代码
- 边界测试:测试边界情况和异常情况
- 质量测试:测试生成代码的质量
- 性能测试:测试响应时间和成本
- 兼容性测试:测试不同语言、框架的兼容性
测试用例示例
# 测试用例配置示例
test_cases:
- name: "simple_function"
description: "测试简单函数生成"
input:
language: "python"
requirement: "创建一个计算两数之和的函数"
expected:
syntax_valid: true
contains: ["def", "add", "return"]
executable: true
- name: "class_with_methods"
description: "测试带方法的类生成"
input:
language: "python"
requirement: "创建一个用户类,包含name和email属性,以及get_info方法"
expected:
syntax_valid: true
contains: ["class", "User", "def", "get_info"]
has_docstring: true
- name: "error_handling"
description: "测试错误处理代码生成"
input:
language: "python"
requirement: "创建一个文件读取函数,包含错误处理"
expected:
syntax_valid: true
contains: ["try", "except", "FileNotFoundError"]
error_handling: true
自动化测试
持续测试
- 每次提交测试:每次Prompt模板更新后自动运行测试
- 定期回归测试:定期运行完整测试套件
- A/B测试:新版本Prompt与旧版本对比测试
测试自动化流程
测试工具集成
- CI/CD集成:集成到CI/CD流程,自动测试
- 测试报告:自动生成测试报告
- 告警通知:测试失败时自动通知
7.2 端到端自动化
E2E测试流程
端到端测试验证整个代码生成流程的完整性。
测试场景
- 完整代码生成流程:从需求输入到代码生成的完整流程
- 代码审查流程:代码审查的完整流程
- 测试生成流程:测试生成的完整流程
- 多轮交互流程:多轮对话和代码修改流程
E2E测试示例
# E2E测试示例
import pytest
from codegen.e2e import E2ETester
class TestCodeGenerationE2E:
def setup_method(self):
self.tester = E2ETester()
self.project_id = "test_project_123"
def test_complete_code_generation_flow(self):
"""测试完整代码生成流程"""
# 1. 创建项目
project = self.tester.create_project(
name="Test Project",
language="python"
)
# 2. 生成代码
result = self.tester.generate_code(
project_id=project.id,
requirement="创建一个用户登录函数"
)
assert result.code is not None
assert result.quality_score > 0.8
# 3. 代码审查
review = self.tester.review_code(
project_id=project.id,
code=result.code
)
assert len(review.issues) == 0
# 4. 生成测试
tests = self.tester.generate_tests(
project_id=project.id,
code=result.code
)
assert len(tests.test_cases) > 0
# 5. 执行测试
test_result = self.tester.run_tests(
project_id=project.id,
code=result.code,
tests=tests
)
assert test_result.passed
# 6. 清理
self.tester.delete_project(project.id)
测试覆盖
功能覆盖
- 代码生成:覆盖各种代码生成场景
- 代码补全:覆盖各种代码补全场景
- 代码审查:覆盖各种代码审查场景
- 测试生成:覆盖各种测试生成场景
语言覆盖
- Python:Python代码生成和审查
- JavaScript/TypeScript:JavaScript/TypeScript代码生成和审查
- Java:Java代码生成和审查
- Go:Go代码生成和审查
场景覆盖
- 简单场景:简单函数、类生成
- 复杂场景:复杂业务逻辑、架构设计
- 边界场景:边界情况、异常处理
- 集成场景:多模块集成、API集成
持续集成
CI/CD流程
# GitHub Actions CI/CD配置示例
name: E2E Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
e2e-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest pytest-cov
- name: Run E2E tests
env:
CODEGEN_API_KEY: ${{ secrets.CODEGEN_API_KEY }}
run: |
pytest tests/e2e/ -v --cov=codegen --cov-report=html
- name: Upload coverage
uses: codecov/codecov-action@v3
with:
files: ./coverage.xml
测试报告
- 测试结果报告:详细的测试结果报告
- 覆盖率报告:代码覆盖率报告
- 性能报告:性能测试报告
- 质量报告:代码质量报告