Java测试代理

一个自动化Java Maven项目测试工作流的工具,提供决策表测试生成、安全漏洞扫描、覆盖率分析和Git自动化功能。

  • by ALGeek01
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 ALGeek01/SE333_Final_Project

使用说明

Armin Tavassoli-SE333最终项目

具有决策表测试生成和安全扫描的测试代理

对于我的SE333最终项目,我构建了一个MCP(模型上下文协议)服务器,它有助于自动化Java Maven项目的测试工作流程。主要功能是基于决策表的测试生成和安全漏洞扫描,以及覆盖率分析和Git自动化工具。

这有什么作用

该代理提供了一些关键功能:

  1. 基于决策表的测试生成:通过分析方法逻辑和创建涵盖不同决策路径的测试矩阵来生成JUnit测试用例
  2. 安全漏洞扫描:扫描Java代码以查找常见的安全问题,如SQL注入、XSS、命令注入等。
  3. 覆盖率分析:查找缺少测试覆盖率的代码,并建议测试什么
  4. Git自动化:处理常见的Git工作流,如暂存、提交和创建PR

特性

覆盖工具

  • find_jacoco_path:查找JaCoCo覆盖率报告的位置(HTML、XML或exec文件)
  • missing_coverage:查看JaCoCo XML报告以查找未覆盖的代码并显示覆盖率统计数据

测试生成

  • generate_decision_table_tests:使用决策表创建JUnit测试。它
    • 查看方法签名和逻辑
    • 查找决策点(if/else、switch语句、三元运算符)
    • 构建一个包含以下内容的测试矩阵:
      • 空输入
      • 空输入
      • 有效输入
      • 边界条件
      • 边缘案例
      • 异常情况

安全扫描

  • scan_security_vulnerabilities:扫描Java源代码以查找:
    • SQL注入风险
    • 命令注入漏洞
    • 路径遍历问题
    • 硬编码的秘密/密码
    • 不安全的随机数生成
    • 反序列化风险
    • XSS漏洞
    • 每个发现都按严重程度(高、中、低)分类

Git工具

  • git_status:显示上演、未上演和未跟踪的内容
  • git_add_all:分阶段进行所有操作(跳过构建工件)
  • git_commit:创建包含覆盖率统计信息的提交
  • git_push:推送到远程仓库
  • git_pull_request:创建PR(需要GitHub CLI,也可以手动完成)

设置

你需要的

  • Python 3.12或更高版本
  • Node.js 18+(LTS版本效果最好)
  • VS代码与聊天视图
  • Java 11+和Maven 3.6+
  • Git和GitHub帐户
  • uv包管理器(在此处安装)

安装步骤

  1. 安装uv

    # macOS/Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Windows
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    
  2. 设置Python环境

    cd Armin_Tavassoli_SE333_Final_project
    uv init
    uv venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. 安装依赖项

    uv sync
    # Or if that doesn't work:
    uv add mcp fastmcp httpx pypdf python-dotenv
    
  4. 将VS代码连接到MCP服务器

    • 以HTTP模式启动服务器:
      python server.py
      
      服务器将于启动 http://localhost:8001/sse (如果未设置MCP_port,则为端口8000)
    • 备注:VS Code的HTTP MCP客户端与FastMCP的SSE传输存在已知的兼容性问题。对于VS Code,您可以:
      • 选项A(建议用于VS代码):通过设置使用stdio模式 MCP_USE_STDIO=true 并配置VS Code以使用本地进程(请参阅 .vscode/settings.json)
      • 选项B:使用HTTP模式-服务器根据需要在HTTP上运行,但VS Code可能存在连接问题。HTTP模式适用于其他MCP客户端或使用curl进行测试。
    • 在VS Code中,按 CTRL+SHIFT+P (或 CMD+SHIFT+P 在Mac上)并搜索“MCP:添加服务器”
    • 输入服务器URL: http://localhost:8001 (或 http://localhost:8000 如果使用默认端口)
    • 请将其命名为“SE333测试试剂”
    • 确保工具显示在聊天视图中
  5. 启用自动批准

    • 按 CTRL+SHIFT+P 然后搜索“聊天:设置”
    • 启用自动批准
    • 检查所有工具是否突出显示
  6. 设置Maven项目

    cd codebase
    mvn clean install
    mvn test jacoco:report
    

如何使用

基本工作流程

  1. 检查覆盖范围

    • 使用 find_jacoco_path 查找报告
    • 使用 missing_coverage 查看未涵盖的内容
  2. 生成测试

    • 使用 generate_decision_table_tests 具有类名和方法名
    • 例子: generate_decision_table_tests(class_name="org.apache.commons.lang3.StringUtils", method_name="isEmpty")
  3. 扫描安全问题

    • 使用 scan_security_vulnerabilities 检查代码库
    • 从高严重性问题开始
  4. Git工作流

    • git_status → git_add_all → git_commit → git_push → git_pull_request

示例:生成测试

# In VS Code Chat:
generate_decision_table_tests(
    class_name="org.apache.commons.lang3.StringUtils",
    method_name="isEmpty",
    input_parameters='{"str": "String"}'
)

这将:

  1. 查看方法签名和代码
  2. 在逻辑中找到决策点
  3. 生成测试用例
  4. 为您提供可以保存的JUnit测试代码

示例:安全扫描

scan_security_vulnerabilities(
    class_name="org.apache.commons.lang3.StringUtils",
    severity="high"
)

您将返回JSON:

  • 发现了哪些漏洞
  • 它们在哪里(文件和行)
  • 它们有多严重
  • 代码片段
  • 如何修复它们

项目结构

Armin_Tavassoli_SE333_Final_project/
├── codebase/                     # Apache Commons Lang3 Maven project
│   ├── pom.xml                   # Maven config with JaCoCo
│   ├── src/
│   │   ├── main/java/            # Source code
│   │   └── test/java/            # Test code
│   └── target/
│       └── site/jacoco/          # Coverage reports
├── .github/
│   └── prompts/
│       └── tester.prompt.md     # Agent prompt config
├── server.py                     # MCP server code
├── pyproject.toml                # Python dependencies
├── README.md                     # This file
├── demo/                         # Demo materials
│   └── final_presentation.mp4   # Video (if applicable)
├── report/                       # Written report
│   └── reflection.pdf           # LaTeX reflection report
└── docs/                         # Extra docs

工具参考

find_jacoco_path

查找JaCoCo覆盖率报告在Maven项目中的位置。

输入:无

退货:报告文件的路径,如果尚未生成报告,则显示错误消息

示例:

find_jacoco_path()

缺失_平均值

查看JaCoCo XML报告以查找测试未涵盖的代码。

输入:

  • class_name (可选):要检查的特定类

退货:JSON格式:

  • 覆盖率摘要(行、分支、方法、类)
  • 低覆盖率班级列表
  • 关于测试内容的建议

示例:

missing_coverage(class_name="org.apache.commons.lang3.StringUtils")

生成决策表测试

使用决策表生成JUnit测试用例。

输入:

  • class_name (必填):完整类名,如 org.apache.commons.lang3.StringUtils
  • method_name (必填):测试方法
  • input_parameters (可选):描述参数的JSON

退货:字符串形式的JUnit测试代码

示例:

generate_decision_table_tests(
    class_name="org.apache.commons.lang3.StringUtils",
    method_name="isEmpty"
)

扫描安全漏洞

扫描Java代码是否存在安全问题。

输入:

  • class_name (可选):要扫描的特定类
  • severity (可选):按“全部”、“高”、“中等”或“低”筛选

退货:JSON格式:

  • 漏洞总数
  • 按严重程度细分
  • 每个的详细信息:
    • 文件和行号
    • 漏洞类型
    • 严重性
    • 描述
    • 代码片段
    • 如何修复它

示例:

scan_security_vulnerabilities(severity="high")

Git工具

git_status

显示哪些文件已暂存、未暂存或未跟踪。

git_add_all

分阶段进行所有更改(构建工件除外)。

git_comit(消息)

创建一个commit。该消息将包括覆盖率统计数据(如果可用)。

git_push(远程,分支)

将提交推送到远程仓库。

git_pull_request(基础、标题、正文)

创建拉取请求。您需要安装GitHub CLI,也可以手动创建。

故障排除

服务器无法启动

如果 python server.py 失败:

  1. 检查Python版本: python --version (需要3.12+)
  2. 确保已安装依赖项: uv sync
  3. 检查虚拟环境是否已激活
  4. 查看端口8000是否已在使用中

找不到JaCoCo报告

如果 find_jacoco_path 表示未找到报告:

  1. 先运行测试: cd codebase && mvn clean test
  2. 生成报告: mvn jacoco:report
  3. 检查目录是否存在: ls codebase/target/site/jacoco/

VS代码无法连接

如果聊天中没有显示工具:

  1. 确保服务器确实在运行(检查终端)
  2. 在VS代码设置中仔细检查服务器URL
  3. 尝试重新启动VS代码
  4. 确保启用了自动批准
  5. 检查服务器日志是否有任何错误

测试生成失败

如果 generate_decision_table_tests 给出错误:

  1. 确保类名是完全限定的(例如。, org.apache.commons.lang3.StringUtils)
  2. 检查方法名称拼写是否正确
  3. 验证源文件是否存在于 codebase/src/main/java/
  4. 确保文件可读

安全扫描未发现任何内容

如果 scan_security_vulnerabilities 返回空结果:

  1. 如果代码实际上是安全的,这可能没问题
  2. 尝试扫描特定类: scan_security_vulnerabilities(class_name="...")
  3. 尝试 severity="all" 看到一切
  4. 确保Java文件在 codebase/src/main/java/

Git命令失败

如果Git工具返回错误:

  1. 确保Git已初始化: git status
  2. 检查您的Git凭据是否已设置
  3. 对于 git_pull_request:安装GitHub CLI(gh)或手动创建PR
  4. 确保您具有对存储库的写访问权限

开发说明

添加新工具

如果要添加新的MCP工具:

  1. 使用创建函数 @mcp.tool() 装饰器
  2. 写一个好的文档字符串
  3. 将工具名称添加到列表中 tester.prompt.md
  4. 更新此自述文件

测试

要测试代理:

  1. 启动服务器: python server.py
  2. 在VS Code Chat中,逐一尝试每个工具
  3. 检查输出是否正确
  4. 尝试一些无效输入以测试错误处理

跟踪结果

覆盖指标

要跟踪覆盖率的提高,请使用JaCoCo报告。运行后 mvn test jacoco:report,您可以:

  1. 查看HTML报告:打开 codebase/target/site/jacoco/index.html 在浏览器中
  2. 使用MCP工具:
    • find_jacoco_path 查找报告
    • missing_coverage 获取详细统计数据

报告显示:

  • 线路覆盖率
  • 分行覆盖率
  • 方法覆盖率
  • 班级覆盖率

用于演示:通过以下方式比较承保前后:

  • 运行初始覆盖范围: cd codebase && mvn clean test jacoco:report
  • 使用代理生成测试
  • 再次运行覆盖范围: mvn test jacoco:report
  • 比较指标

信息系统安全度量

跟踪安全改进:

  • 发现的漏洞总数(使用 scan_security_vulnerabilities)
  • 按严重程度细分(高/中/低)
  • 修复进度
  • 受影响的文件

Git提交历史记录

如果你使用Git自动化工具,你可以通过提交历史记录来跟踪改进:

  • 每个提交都包括覆盖率统计数据
  • 查看提交消息以查看随时间推移的进度
  • 使用 git log 查看改进时间表

未来想法

稍后我想补充几点:

  • 与突变检测(PIT)的整合
  • 支持Java以外的其他语言
  • 更好的测试用例优先级
  • 自动化测试重构
  • CI/CD集成
  • 实时覆盖监控
  • 更高级的安全模式检测

许可证

这是我在德保罗大学的SE333课程项目。

代码库(Apache Commons Lang3)使用Apache许可证2.0。

联系

学生:阿明·塔瓦索利
课程:SE333-软件代理
机构:德保罗大学