压测引擎数据库设计(下)
引言
上一篇博文讲述了我们压测引擎数据库设计的上半部分的内容,这一篇博文将会把压测引擎数据库设计最后的内容也讲完。
上一篇博文已经把下图的“项目”、“环境”和“压测模块”三张表已经设计完成,这一篇博文将会继续完成“压测用例”、“测试报告”和“测试报告明细”这三张表的设计。
压测用例表(Stress Case)设计
压测用例表存储了压力测试的具体用例信息,包括接口名称、请求方法、请求参数等。以下是压测用例表的主要字段:
- id: 用例的唯一标识符。
- project_id: 所属项目的ID。
- module_id: 所属接口模块的ID。
- environment_id: 所属环境的ID。
- name: 接口名称。
- description: 接口描述。
- assertion: 响应断言。
- relation: 可变参数。
- stress_source_type: 压测类型,如 'simple' 或 'jmx'。
- thread_group_config: 压测参数。
- jmx_url: jmx文件地址。
- path: 接口路径。 method: 请求方法,如 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'。
- query: 查询参数。
- header: 请求头。
- body: 请求体。 body_type: 请求体格式,如 'raw', 'form-data', 'json'。
- gmt_create: 用例创建时间。
- gmt_modified: 用例最后修改时间。
SQL语句如下:
CREATE TABLE `stress_case` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`project_id` bigint DEFAULT NULL COMMENT '项目id',
`module_id` bigint unsigned DEFAULT NULL COMMENT '所属接口模块ID',
`environment_id` bigint DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口名称',
`description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口描述',
`assertion` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '响应断言',
`relation` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '可变参数',
`stress_source_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '压测类型 [simple jmx]',
`thread_group_config` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '压测参数',
`jmx_url` varchar(524) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'jmx文件地址',
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口路径',
`method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求方法 [GET POST PUT PATCH DELETE HEAD OPTIONS]',
`query` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '查询参数',
`header` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求头',
`body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求体',
`body_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求体格式 [raw form-data json]',
`gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
测试报告表(Report)设计
测试报告表存储了压力测试的执行结果和相关统计信息。以下是测试报告表的主要字段:
- id: 报告的唯一标识符。
- project_id: 所属项目的ID。
- case_id: 所属用例的ID。
- type: 报告类型。
- name: 报告名称。
- execute_state: 执行状态。
- summary: 摘要信息。
- start_time: 开始时间。
- end_time: 结束时间。
- expand_time: 消耗时间。
- quantity: 步骤数量。
- pass_quantity: 通过数量。
- fail_quantity: 失败数量。
- gmt_create: 报告创建时间。
- gmt_modified: 报告最后修改时间。
SQL语句如下:
CREATE TABLE `report` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`project_id` bigint unsigned DEFAULT NULL COMMENT '所属项目ID',
`case_id` bigint DEFAULT NULL,
`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '报告类型',
`name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '报告名称',
`execute_state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '执行状态',
`summary` varchar(1024) COLLATE utf8mb4_general_ci DEFAULT NULL,
`start_time` bigint unsigned DEFAULT NULL COMMENT '开始时间',
`end_time` bigint unsigned DEFAULT NULL COMMENT '结束时间',
`expand_time` bigint unsigned DEFAULT NULL COMMENT '消耗时间',
`quantity` bigint DEFAULT '0' COMMENT '步骤数量',
`pass_quantity` bigint DEFAULT '0' COMMENT '通过数量',
`fail_quantity` bigint DEFAULT '0' COMMENT '失败数量',
`gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
压测报告详情表(Report Detail Stress)设计
压测报告详情表存储了测试报告中的详细数据,包括断言信息、错误请求数、响应时间等。以下是压测报告详情表的主要字段:
- id: 详情的唯一标识符。
- report_id: 所属报告的ID。
- assert_info: 断言信息。
- error_count: 错误请求数。
- error_percentage: 错误百分比。
- max_time: 最大响应时间。
- mean_time: 平均响应时间。
- min_time: 最小响应时间。
- receive_k_b_per_second: 每秒接收KB。
- sent_k_b_per_second: 每秒发送KB。
- request_location: 请求路径和参数。
- request_header: 请求头。
- request_body: 请求体。
- request_rate: 每秒请求速率。
- response_code: 响应码。
- response_data: 响应体。
- response_header: 响应头。
- sampler_count: 采样次数编号。
- sampler_label: 请求名称。
- sample_time: 请求时间戳。
- gmt_create: 详情创建时间。
- gmt_modified: 详情最后修改时间。
SQL语句如下:
CREATE TABLE `report_detail_stress` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`report_id` bigint unsigned DEFAULT NULL COMMENT '所属报告ID',
`assert_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '断言信息',
`error_count` bigint unsigned DEFAULT NULL COMMENT '错误请求数',
`error_percentage` float unsigned DEFAULT NULL COMMENT '错误百分比',
`max_time` int unsigned DEFAULT NULL COMMENT '最大响应时间',
`mean_time` float unsigned DEFAULT NULL COMMENT '平均响应时间',
`min_time` int unsigned DEFAULT NULL COMMENT '最小响应时间',
`receive_k_b_per_second` float DEFAULT NULL COMMENT '每秒接收KB',
`sent_k_b_per_second` float DEFAULT NULL COMMENT '每秒发送KB',
`request_location` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求路径和参数',
`request_header` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求头',
`request_body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求体',
`request_rate` float unsigned DEFAULT NULL COMMENT '每秒请求速率',
`response_code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '响应码',
`response_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '响应体',
`response_header` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '响应头',
`sampler_count` bigint unsigned DEFAULT NULL COMMENT '采样次数编号',
`sampler_label` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求名称',
`sample_time` bigint DEFAULT NULL COMMENT '请求时间戳',
`gmt_create` datetime DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=151 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
实体间关系
压测用例与项目
- 关系类型:多对一(Many-to-One)
- 描述:一个项目可以包含多个压测用例,但每个压测用例只属于一个项目。
- 关系表示:从StressCase实体指向Project实体,StressCase中的project_id是外键,引用Project的id。
压测用例与压测用例模块
- 关系类型:多对一(Many-to-One)
- 描述:一个压测用例模块可以包含多个压测用例,但每个压测用例只属于一个模块。
- 关系表示:从StressCase实体指向StressCaseModule实体,StressCase中的module_id是外键,引用StressCaseModule的id。
压测用例与环境
- 关系类型:多对一(Many-to-One)
- 描述:一个压测用例可以在多个环境中执行,但每个用例在报告中只关联一个环境。
- 关系表示:从StressCase实体指向Environment实体,StressCase中的environment_id是外键,引用Environment的id。
报告与项目
- 关系类型:多对一(Many-to-One)
- 描述:一个项目可以有多个测试报告,但每个报告只属于一个项目。
- 关系表示:从Report实体指向Project实体,Report中的project_id是外键,引用Project的id。
报告与压测用例
- 关系类型:多对一(Many-to-One)
- 描述:一个压测用例可以对应多个测试报告,但每个报告只记录一个用例的测试结果。
- 关系表示:从Report实体指向StressCase实体,Report中的case_id是外键,引用StressCase的id。
报告详情与报告
- 关系类型:多对一(Many-to-One)
- 描述:一个测试报告可以包含多个报告详情,但每个详情只属于一个报告。
- 关系表示:从ReportDetailStress实体指向Report实体,ReportDetailStress中的report_id是外键,引用Report的id。