菜单

测试

相关源文件

本文档为希望测试 AutoGPT 系统或为项目贡献新测试的开发人员提供指导。它涵盖了 AutoGPT 不同组件所使用的测试方法、框架和技术。

有关 CI/CD 工作流程的信息,请参阅 CI/CD 工作流程。有关贡献流程的详细信息,请参阅 贡献

测试方法概述

AutoGPT 在其组件中采用了全面的测试策略,包括现代平台和经典实现。测试对于确保可靠性至关重要,尤其是在处理复杂的 AI 代理行为和与外部服务的集成时。

测试方法包括:

  • 单元测试:单独测试各个组件
  • 集成测试:测试组件之间的交互
  • 端到端测试:测试完整的工作流程
  • 回归测试:确保修复不会破坏现有功能
  • 基准测试:衡量代理性能指标

来源:.gitmodules

测试结构

AutoGPT 的测试架构遵循存储库的主要组件结构,并根据正在测试的系统组织测试。

图表:测试组织

来源:.gitmodules

测试框架和工具

AutoGPT 根据被测组件使用不同的测试框架。

图表:测试框架

来源:.gitmodules

经典 AutoGPT 测试

经典 AutoGPT 系统具有成熟的测试模式,尤其是在 Forge 组件方面。

用于测试的 VCR Cassettes

Forge 组件使用 VCR Cassettes 来记录和回放测试中的 HTTP 交互。这使得测试无需实际进行外部 API 调用即可运行,从而提高了测试的速度和可靠性。

测试 Cassettes 存储在另一个存储库中,该存储库作为子模块链接到 classic/forge/tests/vcr_cassettes,从而保持主存储库的大小可控。

来源:.gitmodules

平台测试

前端测试

Agent Builder 平台的前端组件使用 Jest 和 React Testing Library 进行测试。测试侧重于组件渲染、用户交互和状态管理。

组件测试通常验证:

  • UI 元素的正确渲染
  • 用户交互的正确处理
  • 正确的状态更新
  • 与其他组件的集成

后端测试

后端测试侧重于 API 端点、数据处理以及与外部服务的集成。关键领域包括:

  1. REST API 端点:测试请求验证、响应格式化、身份验证和授权
  2. 图执行:测试执行引擎处理代理图的能力
  3. 块系统:测试单个块及其与执行引擎的集成
  4. LLM 集成:测试与外部 LLM 提供商的交互

模拟外部服务

由于 AutoGPT 与各种外部服务(尤其是 LLM 提供商)进行交互,因此适当的模拟对于可靠的测试至关重要。

编写新测试

单元测试指南

编写 AutoGPT 组件的单元测试时:

  1. 专注于测试单个功能单元
  2. 使用描述性的测试名称来说明正在测试的内容
  3. 遵循 Arrange-Act-Assert 模式
  4. 模拟外部依赖项
  5. 保持测试独立和幂等

示例测试结构

def test_component_specific_behavior():
    # Arrange: Set up test prerequisites
    test_input = "sample input"
    expected_output = "expected result"
    
    # Act: Execute the functionality being tested
    actual_result = component_function(test_input)
    
    # Assert: Verify the output matches expectations
    assert actual_result == expected_output

运行测试

测试可以在开发过程中本地运行,也可以作为 CI 管道的一部分运行。

本地测试执行

对于基于 Python 的组件(后端、经典 AutoGPT)

pytest path/to/tests

对于基于 JavaScript 的组件(前端)

npm test

CI 测试执行

在创建或更新拉取请求时,测试会自动作为 CI/CD 管道的一部分运行。CI 系统会运行完整的测试套件,以确保所有组件协同工作正常。

基准测试作为测试

基准测试系统作为一种专门的测试形式,专注于衡量代理的性能和行为。基准测试有助于识别功能回归并验证改进。

基准测试中跟踪的关键指标包括:

  • 任务完成成功率
  • 完成时间
  • 资源使用情况(tokens、API 调用)
  • 输出质量

有关基准测试系统的更多详细信息,请参阅 Benchmark

结论

测试是 AutoGPT 开发过程的关键部分。通过遵循本文档中概述的测试实践,贡献者可以确保他们的更改能够保持或提高系统的稳定性和功能性。

在为 AutoGPT 贡献新功能、错误修复或改进时,请务必包含适当的测试来验证更改。这有助于维护代码库的整体质量并防止回归。