MeterSphere开发者手册:后端服务模块代码结构解析

MeterSphere开发者手册:后端服务模块代码结构解析

【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台,为软件质量保驾护航。搞测试,就选 MeterSphere! 【免费下载链接】metersphere 项目地址: https://gitcode.com/gh_mirrors/me/metersphere

1. 后端整体架构概览

MeterSphere后端采用模块化架构设计,基于Spring Boot微服务思想组织代码结构,整体分为三大核心层级:

mermaid

核心目录说明

  • app/: 应用入口与配置中心
  • framework/: 核心框架模块(SDK、插件体系、AI引擎等)
  • services/: 业务服务模块(按功能领域划分)

2. 服务层模块划分

服务层采用领域驱动设计,按业务功能划分为8个独立模块,每个模块可独立打包部署:

模块名称功能职责核心依赖
api-testAPI测试用例管理与执行metersphere-sdk、ai-engine
case-management功能测试用例管理metersphere-domain、easyexcel
project-management项目与团队管理system-setting、ldap-client
dashboard测试数据可视化echarts-core、data-visualization
bug-management缺陷跟踪与管理issue-tracking-sdk
test-plan测试计划与报告report-engine、template-engine
system-setting系统配置中心config-server、security-core

2.1 模块间依赖关系

mermaid

3. 核心服务模块详解

3.1 API测试模块(api-test)

3.1.1 代码组织结构
api-test/
├── src/main/java/io/metersphere/apitest/
│   ├── controller/    # REST接口层
│   ├── service/       # 业务逻辑层
│   ├── model/         # 数据模型
│   │   ├── dto/       # 数据传输对象
│   │   └── request/   # 请求参数对象
│   ├── repository/    # 数据访问层
│   └── processor/     # 测试执行处理器
└── src/main/resources/
    ├── mybatis/       # MyBatis映射文件
    └── apiGeneratorConfig.xml  # 代码生成配置
3.1.2 核心业务模型

通过代码定义分析,该模块核心处理以下实体:

// API测试用例定义
public class ApiDefinitionDTO {
    private String id;
    private String projectId;
    private String name;
    private String method;  // GET/POST/PUT/DELETE
    private String path;
    private List<MsHeader> headers;
    private Body body;      // 请求体对象
    private List<Assertion> assertions;  // 断言集合
}

// 测试场景参数配置
public class ApiScenarioParamConfig {
    private String scenarioId;
    private EnvironmentInfoDTO envConfig;  // 环境配置
    private CsvVariable csvVariable;       // CSV变量
    private List<MsProcessorConfig> processors;  // 前置/后置处理器
}

3.2 用例管理模块(case-management)

3.2.1 功能特色

该模块专注于功能测试用例的全生命周期管理,提供:

  • 用例脑图可视化编辑
  • 批量导入导出(Excel格式)
  • 用例评审流程
  • 自定义字段扩展
3.2.2 数据导入导出核心类
// Excel数据处理工厂类
public class FunctionalCaseExcelDataFactory {
    // 根据本地化信息获取对应Excel处理器
    public FunctionalCaseExcelData getFunctionalCaseExcelDataLocal() {
        String language = LocaleContextHolder.getLocale().getLanguage();
        if ("en".equals(language)) {
            return new FunctionalCaseExcelDataUs();
        } else if ("zh".equals(language)) {
            return new FunctionalCaseExcelDataCn();
        }
        // 其他语言处理...
    }
}

3.3 测试计划模块(test-plan)

3.3.1 核心业务流程

mermaid

3.3.2 关键指标计算
public class TestPlanCalculationDTO {
    private Set<String> passedTestPlanIds = new HashSet<>();
    private Set<String> notPassedTestPlanIds = new HashSet<>();
    
    public void addPassedTestPlanId(String testPlanId) {
        passedTestPlanIds.add(testPlanId);
    }
    
    public double getPassRate() {
        int total = passedTestPlanIds.size() + notPassedTestPlanIds.size();
        if (total == 0) return 0;
        return (double) passedTestPlanIds.size() / total * 100;
    }
}

4. 框架层核心组件

4.1 SDK模块(metersphere-sdk)

提供基础API与工具类:

  • HTTP客户端封装
  • 数据校验框架
  • 通用DTO基类
  • 异常处理机制

关键依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-core-jakarta</artifactId>
</dependency>

4.2 插件平台(framework/plugin)

采用SPI机制实现插件扩展:

  • 测试报告导出插件
  • 第三方系统集成插件
  • 自定义断言插件

插件开发规范:

public interface TestReportPlugin {
    // 生成报告
    Report generate(ReportData data);
    
    // 支持的格式
    String[] getSupportedFormats();
    
    // 插件元信息
    PluginMetadata getMetadata();
}

5. 数据库访问层设计

采用MyBatis-Plus作为ORM框架,按模块组织Mapper接口:

src/main/java/io/metersphere/
├── api/test/mapper/
├── case/mapper/
├── plan/mapper/
└── project/mapper/

代码生成配置示例:

<generatorConfiguration>
    <context id="MySQL" targetRuntime="MyBatis3">
        <plugin type="com.baomidou.mybatisplus.generator.plugin.MyBatisPlusPlugin"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/metersphere"
                        userId="root" password="password"/>
        <javaModelGenerator targetPackage="io.metersphere.api.test.model"/>
        <sqlMapGenerator targetPackage="mapper.api.test"/>
        <javaClientGenerator targetPackage="io.metersphere.api.test.mapper" type="XMLMAPPER"/>
        <table tableName="api_test_case"/>
    </context>
</generatorConfiguration>

6. 服务集成与扩展

6.1 跨模块服务调用

采用Spring Cloud OpenFeign实现服务间通信:

@FeignClient(name = "case-management-service")
public interface CaseManagementClient {
    @GetMapping("/case/{caseId}")
    Result<FunctionalCaseDTO> getCaseDetail(@PathVariable("caseId") String caseId);
    
    @PostMapping("/case/batch")
    Result<List<FunctionalCaseDTO>> batchGetCases(@RequestBody List<String> caseIds);
}

6.2 扩展点设计

系统预留多处扩展点,支持业务定制:

  1. 自定义变量处理器
public interface VariableProcessor {
    String process(String variableKey, Map<String, Object> context);
    int getOrder();  // 执行优先级
}
  1. 测试数据生成器
public interface TestDataGenerator {
    Object generate(FieldConfig config);
    String getType();  // 支持的数据类型
}

7. 开发规范与最佳实践

7.1 代码分层原则

mermaid

7.2 API接口设计规范

  • URL命名:使用名词复数形式,如/api/cases
  • 请求方法:遵循RESTful规范
  • 版本控制:在URL中包含版本号,如/api/v2/plans
  • 分页参数:统一使用pageNumpageSize
  • 响应格式:
{
  "success": true,
  "data": {},
  "message": "操作成功",
  "code": 200,
  "timestamp": 1620000000000
}

8. 总结与展望

MeterSphere后端架构通过模块化设计实现了:

  • 业务功能解耦
  • 团队并行开发
  • 按需部署扩展
  • 二次开发友好

未来架构演进方向:

  • 微服务完全拆分
  • 服务网格(Service Mesh)引入
  • 低代码平台集成
  • AI测试能力增强

通过本文档,开发者可以快速理解MeterSphere后端代码组织结构,参与到项目贡献或二次开发中。建议结合实际业务场景深入对应模块代码,同时关注项目的官方文档贡献指南

【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台,为软件质量保驾护航。搞测试,就选 MeterSphere! 【免费下载链接】metersphere 项目地址: https://gitcode.com/gh_mirrors/me/metersphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值