refactor(接口测试): 优化场景字段,优化保存接口的逻辑
This commit is contained in:
parent
6c6edd4e44
commit
cbe6c19c45
|
@ -15,6 +15,9 @@ public class ApiDefinitionSwagger implements Serializable {
|
|||
@Size(min = 1, max = 50, message = "{api_definition_swagger.id.length_range}", groups = {Created.class, Updated.class})
|
||||
private String id;
|
||||
|
||||
@Schema(description = "业务id")
|
||||
private Long num;
|
||||
|
||||
@Schema(description = "定时任务名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "{api_definition_swagger.name.not_blank}", groups = {Created.class})
|
||||
@Size(min = 1, max = 255, message = "{api_definition_swagger.name.length_range}", groups = {Created.class, Updated.class})
|
||||
|
@ -49,6 +52,7 @@ public class ApiDefinitionSwagger implements Serializable {
|
|||
|
||||
public enum Column {
|
||||
id("id", "id", "VARCHAR", false),
|
||||
num("num", "num", "BIGINT", false),
|
||||
name("name", "name", "VARCHAR", true),
|
||||
swaggerUrl("swagger_url", "swaggerUrl", "VARCHAR", false),
|
||||
moduleId("module_id", "moduleId", "VARCHAR", false),
|
||||
|
|
|
@ -174,6 +174,66 @@ public class ApiDefinitionSwaggerExample {
|
|||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumIsNull() {
|
||||
addCriterion("num is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumIsNotNull() {
|
||||
addCriterion("num is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumEqualTo(Long value) {
|
||||
addCriterion("num =", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumNotEqualTo(Long value) {
|
||||
addCriterion("num <>", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumGreaterThan(Long value) {
|
||||
addCriterion("num >", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumGreaterThanOrEqualTo(Long value) {
|
||||
addCriterion("num >=", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumLessThan(Long value) {
|
||||
addCriterion("num <", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumLessThanOrEqualTo(Long value) {
|
||||
addCriterion("num <=", value, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumIn(List<Long> values) {
|
||||
addCriterion("num in", values, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumNotIn(List<Long> values) {
|
||||
addCriterion("num not in", values, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumBetween(Long value1, Long value2) {
|
||||
addCriterion("num between", value1, value2, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNumNotBetween(Long value1, Long value2) {
|
||||
addCriterion("num not between", value1, value2, "num");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andNameIsNull() {
|
||||
addCriterion("`name` is null");
|
||||
return (Criteria) this;
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
package io.metersphere.api.domain;
|
||||
|
||||
import io.metersphere.validation.groups.Created;
|
||||
import io.metersphere.validation.groups.Updated;
|
||||
import io.metersphere.validation.groups.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ApiScenario implements Serializable {
|
||||
|
@ -38,14 +35,13 @@ public class ApiScenario implements Serializable {
|
|||
@NotNull(message = "{api_scenario.step_total.not_blank}", groups = {Created.class})
|
||||
private Integer stepTotal;
|
||||
|
||||
@Schema(description = "请求执行率", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "{api_scenario.request_execution_rate.not_blank}", groups = {Created.class})
|
||||
@Size(min = 1, max = 255, message = "{api_scenario.request_execution_rate.length_range}", groups = {Created.class, Updated.class})
|
||||
@Schema(description = "请求执行率")
|
||||
private String requestExecutionRate;
|
||||
|
||||
@Schema(description = "通过率", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "{api_scenario.request_pass_rate.not_blank}", groups = {Created.class})
|
||||
private Long requestPassRate;
|
||||
@Schema(description = "请求通过率", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "{api_scenario.request_pass_rate.not_blank}", groups = {Created.class})
|
||||
@Size(min = 1, max = 20, message = "{api_scenario.request_pass_rate.length_range}", groups = {Created.class, Updated.class})
|
||||
private String requestPassRate;
|
||||
|
||||
@Schema(description = "最后一次执行的结果状态")
|
||||
private String lastReportStatus;
|
||||
|
@ -125,7 +121,7 @@ public class ApiScenario implements Serializable {
|
|||
status("status", "status", "VARCHAR", true),
|
||||
stepTotal("step_total", "stepTotal", "INTEGER", false),
|
||||
requestExecutionRate("request_execution_rate", "requestExecutionRate", "VARCHAR", false),
|
||||
requestPassRate("request_pass_rate", "requestPassRate", "BIGINT", false),
|
||||
requestPassRate("request_pass_rate", "requestPassRate", "VARCHAR", false),
|
||||
lastReportStatus("last_report_status", "lastReportStatus", "VARCHAR", false),
|
||||
lastReportId("last_report_id", "lastReportId", "VARCHAR", false),
|
||||
num("num", "num", "BIGINT", false),
|
||||
|
|
|
@ -558,52 +558,62 @@ public class ApiScenarioExample {
|
|||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateEqualTo(Long value) {
|
||||
public Criteria andRequestPassRateEqualTo(String value) {
|
||||
addCriterion("request_pass_rate =", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateNotEqualTo(Long value) {
|
||||
public Criteria andRequestPassRateNotEqualTo(String value) {
|
||||
addCriterion("request_pass_rate <>", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateGreaterThan(Long value) {
|
||||
public Criteria andRequestPassRateGreaterThan(String value) {
|
||||
addCriterion("request_pass_rate >", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateGreaterThanOrEqualTo(Long value) {
|
||||
public Criteria andRequestPassRateGreaterThanOrEqualTo(String value) {
|
||||
addCriterion("request_pass_rate >=", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateLessThan(Long value) {
|
||||
public Criteria andRequestPassRateLessThan(String value) {
|
||||
addCriterion("request_pass_rate <", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateLessThanOrEqualTo(Long value) {
|
||||
public Criteria andRequestPassRateLessThanOrEqualTo(String value) {
|
||||
addCriterion("request_pass_rate <=", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateIn(List<Long> values) {
|
||||
public Criteria andRequestPassRateLike(String value) {
|
||||
addCriterion("request_pass_rate like", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateNotLike(String value) {
|
||||
addCriterion("request_pass_rate not like", value, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateIn(List<String> values) {
|
||||
addCriterion("request_pass_rate in", values, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateNotIn(List<Long> values) {
|
||||
public Criteria andRequestPassRateNotIn(List<String> values) {
|
||||
addCriterion("request_pass_rate not in", values, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateBetween(Long value1, Long value2) {
|
||||
public Criteria andRequestPassRateBetween(String value1, String value2) {
|
||||
addCriterion("request_pass_rate between", value1, value2, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andRequestPassRateNotBetween(Long value1, Long value2) {
|
||||
public Criteria andRequestPassRateNotBetween(String value1, String value2) {
|
||||
addCriterion("request_pass_rate not between", value1, value2, "requestPassRate");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<mapper namespace="io.metersphere.api.mapper.ApiDefinitionSwaggerMapper">
|
||||
<resultMap id="BaseResultMap" type="io.metersphere.api.domain.ApiDefinitionSwagger">
|
||||
<id column="id" jdbcType="VARCHAR" property="id" />
|
||||
<result column="num" jdbcType="BIGINT" property="num" />
|
||||
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||
<result column="swagger_url" jdbcType="VARCHAR" property="swaggerUrl" />
|
||||
<result column="module_id" jdbcType="VARCHAR" property="moduleId" />
|
||||
|
@ -71,7 +72,7 @@
|
|||
</where>
|
||||
</sql>
|
||||
<sql id="Base_Column_List">
|
||||
id, `name`, swagger_url, module_id, config, cover_data, cover_module, project_id,
|
||||
id, num, `name`, swagger_url, module_id, config, cover_data, cover_module, project_id,
|
||||
version_id
|
||||
</sql>
|
||||
<select id="selectByExample" parameterType="io.metersphere.api.domain.ApiDefinitionSwaggerExample" resultMap="BaseResultMap">
|
||||
|
@ -105,14 +106,14 @@
|
|||
</if>
|
||||
</delete>
|
||||
<insert id="insert" parameterType="io.metersphere.api.domain.ApiDefinitionSwagger">
|
||||
insert into api_definition_swagger (id, `name`, swagger_url,
|
||||
module_id, config, cover_data,
|
||||
cover_module, project_id, version_id
|
||||
)
|
||||
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{swaggerUrl,jdbcType=VARCHAR},
|
||||
#{moduleId,jdbcType=VARCHAR}, #{config,jdbcType=VARCHAR}, #{coverData,jdbcType=BIT},
|
||||
#{coverModule,jdbcType=BIT}, #{projectId,jdbcType=VARCHAR}, #{versionId,jdbcType=VARCHAR}
|
||||
)
|
||||
insert into api_definition_swagger (id, num, `name`,
|
||||
swagger_url, module_id, config,
|
||||
cover_data, cover_module, project_id,
|
||||
version_id)
|
||||
values (#{id,jdbcType=VARCHAR}, #{num,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR},
|
||||
#{swaggerUrl,jdbcType=VARCHAR}, #{moduleId,jdbcType=VARCHAR}, #{config,jdbcType=VARCHAR},
|
||||
#{coverData,jdbcType=BIT}, #{coverModule,jdbcType=BIT}, #{projectId,jdbcType=VARCHAR},
|
||||
#{versionId,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="io.metersphere.api.domain.ApiDefinitionSwagger">
|
||||
insert into api_definition_swagger
|
||||
|
@ -120,6 +121,9 @@
|
|||
<if test="id != null">
|
||||
id,
|
||||
</if>
|
||||
<if test="num != null">
|
||||
num,
|
||||
</if>
|
||||
<if test="name != null">
|
||||
`name`,
|
||||
</if>
|
||||
|
@ -149,6 +153,9 @@
|
|||
<if test="id != null">
|
||||
#{id,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="num != null">
|
||||
#{num,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="name != null">
|
||||
#{name,jdbcType=VARCHAR},
|
||||
</if>
|
||||
|
@ -187,6 +194,9 @@
|
|||
<if test="record.id != null">
|
||||
id = #{record.id,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.num != null">
|
||||
num = #{record.num,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="record.name != null">
|
||||
`name` = #{record.name,jdbcType=VARCHAR},
|
||||
</if>
|
||||
|
@ -219,6 +229,7 @@
|
|||
<update id="updateByExample" parameterType="map">
|
||||
update api_definition_swagger
|
||||
set id = #{record.id,jdbcType=VARCHAR},
|
||||
num = #{record.num,jdbcType=BIGINT},
|
||||
`name` = #{record.name,jdbcType=VARCHAR},
|
||||
swagger_url = #{record.swaggerUrl,jdbcType=VARCHAR},
|
||||
module_id = #{record.moduleId,jdbcType=VARCHAR},
|
||||
|
@ -234,6 +245,9 @@
|
|||
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.api.domain.ApiDefinitionSwagger">
|
||||
update api_definition_swagger
|
||||
<set>
|
||||
<if test="num != null">
|
||||
num = #{num,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="name != null">
|
||||
`name` = #{name,jdbcType=VARCHAR},
|
||||
</if>
|
||||
|
@ -263,7 +277,8 @@
|
|||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="io.metersphere.api.domain.ApiDefinitionSwagger">
|
||||
update api_definition_swagger
|
||||
set `name` = #{name,jdbcType=VARCHAR},
|
||||
set num = #{num,jdbcType=BIGINT},
|
||||
`name` = #{name,jdbcType=VARCHAR},
|
||||
swagger_url = #{swaggerUrl,jdbcType=VARCHAR},
|
||||
module_id = #{moduleId,jdbcType=VARCHAR},
|
||||
config = #{config,jdbcType=VARCHAR},
|
||||
|
@ -275,14 +290,14 @@
|
|||
</update>
|
||||
<insert id="batchInsert" parameterType="map">
|
||||
insert into api_definition_swagger
|
||||
(id, `name`, swagger_url, module_id, config, cover_data, cover_module, project_id,
|
||||
(id, num, `name`, swagger_url, module_id, config, cover_data, cover_module, project_id,
|
||||
version_id)
|
||||
values
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(#{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, #{item.swaggerUrl,jdbcType=VARCHAR},
|
||||
#{item.moduleId,jdbcType=VARCHAR}, #{item.config,jdbcType=VARCHAR}, #{item.coverData,jdbcType=BIT},
|
||||
#{item.coverModule,jdbcType=BIT}, #{item.projectId,jdbcType=VARCHAR}, #{item.versionId,jdbcType=VARCHAR}
|
||||
)
|
||||
(#{item.id,jdbcType=VARCHAR}, #{item.num,jdbcType=BIGINT}, #{item.name,jdbcType=VARCHAR},
|
||||
#{item.swaggerUrl,jdbcType=VARCHAR}, #{item.moduleId,jdbcType=VARCHAR}, #{item.config,jdbcType=VARCHAR},
|
||||
#{item.coverData,jdbcType=BIT}, #{item.coverModule,jdbcType=BIT}, #{item.projectId,jdbcType=VARCHAR},
|
||||
#{item.versionId,jdbcType=VARCHAR})
|
||||
</foreach>
|
||||
</insert>
|
||||
<insert id="batchInsertSelective" parameterType="map">
|
||||
|
@ -298,6 +313,9 @@
|
|||
<if test="'id'.toString() == column.value">
|
||||
#{item.id,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="'num'.toString() == column.value">
|
||||
#{item.num,jdbcType=BIGINT}
|
||||
</if>
|
||||
<if test="'name'.toString() == column.value">
|
||||
#{item.name,jdbcType=VARCHAR}
|
||||
</if>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<result column="status" jdbcType="VARCHAR" property="status" />
|
||||
<result column="step_total" jdbcType="INTEGER" property="stepTotal" />
|
||||
<result column="request_execution_rate" jdbcType="VARCHAR" property="requestExecutionRate" />
|
||||
<result column="request_pass_rate" jdbcType="BIGINT" property="requestPassRate" />
|
||||
<result column="request_pass_rate" jdbcType="VARCHAR" property="requestPassRate" />
|
||||
<result column="last_report_status" jdbcType="VARCHAR" property="lastReportStatus" />
|
||||
<result column="last_report_id" jdbcType="VARCHAR" property="lastReportId" />
|
||||
<result column="num" jdbcType="BIGINT" property="num" />
|
||||
|
@ -173,7 +173,7 @@
|
|||
update_time)
|
||||
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{priority,jdbcType=VARCHAR},
|
||||
#{status,jdbcType=VARCHAR}, #{stepTotal,jdbcType=INTEGER}, #{requestExecutionRate,jdbcType=VARCHAR},
|
||||
#{requestPassRate,jdbcType=BIGINT}, #{lastReportStatus,jdbcType=VARCHAR}, #{lastReportId,jdbcType=VARCHAR},
|
||||
#{requestPassRate,jdbcType=VARCHAR}, #{lastReportStatus,jdbcType=VARCHAR}, #{lastReportId,jdbcType=VARCHAR},
|
||||
#{num,jdbcType=BIGINT}, #{deleted,jdbcType=BIT}, #{pos,jdbcType=BIGINT}, #{versionId,jdbcType=VARCHAR},
|
||||
#{refId,jdbcType=VARCHAR}, #{latest,jdbcType=BIT}, #{projectId,jdbcType=VARCHAR},
|
||||
#{moduleId,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{tags,jdbcType=VARCHAR,typeHandler=io.metersphere.handler.ListTypeHandler},
|
||||
|
@ -283,7 +283,7 @@
|
|||
#{requestExecutionRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="requestPassRate != null">
|
||||
#{requestPassRate,jdbcType=BIGINT},
|
||||
#{requestPassRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="lastReportStatus != null">
|
||||
#{lastReportStatus,jdbcType=VARCHAR},
|
||||
|
@ -372,7 +372,7 @@
|
|||
request_execution_rate = #{record.requestExecutionRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.requestPassRate != null">
|
||||
request_pass_rate = #{record.requestPassRate,jdbcType=BIGINT},
|
||||
request_pass_rate = #{record.requestPassRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.lastReportStatus != null">
|
||||
last_report_status = #{record.lastReportStatus,jdbcType=VARCHAR},
|
||||
|
@ -444,7 +444,7 @@
|
|||
`status` = #{record.status,jdbcType=VARCHAR},
|
||||
step_total = #{record.stepTotal,jdbcType=INTEGER},
|
||||
request_execution_rate = #{record.requestExecutionRate,jdbcType=VARCHAR},
|
||||
request_pass_rate = #{record.requestPassRate,jdbcType=BIGINT},
|
||||
request_pass_rate = #{record.requestPassRate,jdbcType=VARCHAR},
|
||||
last_report_status = #{record.lastReportStatus,jdbcType=VARCHAR},
|
||||
last_report_id = #{record.lastReportId,jdbcType=VARCHAR},
|
||||
num = #{record.num,jdbcType=BIGINT},
|
||||
|
@ -487,7 +487,7 @@
|
|||
request_execution_rate = #{requestExecutionRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="requestPassRate != null">
|
||||
request_pass_rate = #{requestPassRate,jdbcType=BIGINT},
|
||||
request_pass_rate = #{requestPassRate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="lastReportStatus != null">
|
||||
last_report_status = #{lastReportStatus,jdbcType=VARCHAR},
|
||||
|
@ -556,7 +556,7 @@
|
|||
`status` = #{status,jdbcType=VARCHAR},
|
||||
step_total = #{stepTotal,jdbcType=INTEGER},
|
||||
request_execution_rate = #{requestExecutionRate,jdbcType=VARCHAR},
|
||||
request_pass_rate = #{requestPassRate,jdbcType=BIGINT},
|
||||
request_pass_rate = #{requestPassRate,jdbcType=VARCHAR},
|
||||
last_report_status = #{lastReportStatus,jdbcType=VARCHAR},
|
||||
last_report_id = #{lastReportId,jdbcType=VARCHAR},
|
||||
num = #{num,jdbcType=BIGINT},
|
||||
|
@ -588,7 +588,7 @@
|
|||
<foreach collection="list" item="item" separator=",">
|
||||
(#{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, #{item.priority,jdbcType=VARCHAR},
|
||||
#{item.status,jdbcType=VARCHAR}, #{item.stepTotal,jdbcType=INTEGER}, #{item.requestExecutionRate,jdbcType=VARCHAR},
|
||||
#{item.requestPassRate,jdbcType=BIGINT}, #{item.lastReportStatus,jdbcType=VARCHAR},
|
||||
#{item.requestPassRate,jdbcType=VARCHAR}, #{item.lastReportStatus,jdbcType=VARCHAR},
|
||||
#{item.lastReportId,jdbcType=VARCHAR}, #{item.num,jdbcType=BIGINT}, #{item.deleted,jdbcType=BIT},
|
||||
#{item.pos,jdbcType=BIGINT}, #{item.versionId,jdbcType=VARCHAR}, #{item.refId,jdbcType=VARCHAR},
|
||||
#{item.latest,jdbcType=BIT}, #{item.projectId,jdbcType=VARCHAR}, #{item.moduleId,jdbcType=VARCHAR},
|
||||
|
@ -627,7 +627,7 @@
|
|||
#{item.requestExecutionRate,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="'request_pass_rate'.toString() == column.value">
|
||||
#{item.requestPassRate,jdbcType=BIGINT}
|
||||
#{item.requestPassRate,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="'last_report_status'.toString() == column.value">
|
||||
#{item.lastReportStatus,jdbcType=VARCHAR}
|
||||
|
|
|
@ -209,8 +209,8 @@ CREATE TABLE IF NOT EXISTS api_scenario(
|
|||
`priority` VARCHAR(10) NOT NULL COMMENT '场景级别/P0/P1等' ,
|
||||
`status` VARCHAR(20) NOT NULL COMMENT '场景状态/未规划/已完成 等' ,
|
||||
`step_total` INT NOT NULL DEFAULT 0 COMMENT '场景步骤总数' ,
|
||||
`request_execution_rate` VARCHAR(255) NOT NULL DEFAULT '0.00' COMMENT '请求执行率' ,
|
||||
`request_pass_rate` BIGINT NOT NULL DEFAULT '0.00' COMMENT '通过率' ,
|
||||
`request_execution_rate` VARCHAR(20) NOT NULL DEFAULT '0.00' COMMENT '请求执行率' ,
|
||||
`request_pass_rate` VARCHAR(20) NOT NULL DEFAULT '0.00' COMMENT '通过率' ,
|
||||
`last_report_status` VARCHAR(50) COMMENT '最后一次执行的结果状态' ,
|
||||
`last_report_id` VARCHAR(50) COMMENT '最后一次执行的报告fk' ,
|
||||
`num` BIGINT NOT NULL COMMENT '编号' ,
|
||||
|
@ -507,6 +507,7 @@ CREATE TABLE IF NOT EXISTS api_definition_mock_config(
|
|||
|
||||
CREATE TABLE IF NOT EXISTS api_definition_swagger(
|
||||
`id` VARCHAR(50) NOT NULL COMMENT '主键' ,
|
||||
`num` BIGINT NOT NULL COMMENT '业务id' ,
|
||||
`name` VARCHAR(255) NOT NULL COMMENT '定时任务名称' ,
|
||||
`swagger_url` VARCHAR(500) NOT NULL COMMENT 'url地址' ,
|
||||
`module_id` VARCHAR(50) COMMENT '模块fk' ,
|
||||
|
|
|
@ -5,6 +5,7 @@ public enum ApplicationNumScope {
|
|||
API_TEST_CASE,
|
||||
API_MOCK,
|
||||
API_SCENARIO,
|
||||
API_IMPORT,
|
||||
|
||||
UI_SCENARIO,
|
||||
UI_ELEMENT,
|
||||
|
|
|
@ -9,6 +9,7 @@ import io.metersphere.api.mapper.ApiDefinitionSwaggerMapper;
|
|||
import io.metersphere.api.service.schedule.SwaggerUrlImportJob;
|
||||
import io.metersphere.api.utils.ApiDataUtils;
|
||||
import io.metersphere.project.mapper.ProjectMapper;
|
||||
import io.metersphere.sdk.constants.ApplicationNumScope;
|
||||
import io.metersphere.sdk.constants.HttpMethodConstants;
|
||||
import io.metersphere.sdk.constants.ScheduleType;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
|
@ -23,6 +24,7 @@ import io.metersphere.system.log.service.OperationLogService;
|
|||
import io.metersphere.system.mapper.ScheduleMapper;
|
||||
import io.metersphere.system.sechedule.ScheduleService;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import io.metersphere.system.uid.NumGenerator;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -51,6 +53,7 @@ public class ApiDefinitionScheduleService {
|
|||
ApiDefinitionSwagger apiSwagger = new ApiDefinitionSwagger();
|
||||
BeanUtils.copyBean(apiSwagger, request);
|
||||
apiSwagger.setId(IDGenerator.nextStr());
|
||||
apiSwagger.setNum(NumGenerator.nextNum(request.getProjectId(), ApplicationNumScope.API_IMPORT));
|
||||
// 设置鉴权信息
|
||||
SwaggerBasicAuth basicAuth = new SwaggerBasicAuth();
|
||||
basicAuth.setUserName(request.getAuthUsername());
|
||||
|
|
|
@ -227,6 +227,12 @@ public class ApiDefinitionService {
|
|||
BeanUtils.copyBean(apiDefinition, request);
|
||||
if (request.getProtocol().equals(ModuleConstants.NODE_PROTOCOL_HTTP)) {
|
||||
checkUpdateExist(apiDefinition);
|
||||
//http协议的接口,如果修改了path和method,需要同步把case的path和method修改
|
||||
if (!originApiDefinition.getPath().equals(apiDefinition.getPath()) || !originApiDefinition.getMethod().equals(apiDefinition.getMethod())) {
|
||||
List<String> ids = new ArrayList<>();
|
||||
ids.add(request.getId());
|
||||
apiTestCaseService.updateByApiDefinitionId(ids, apiDefinition);
|
||||
}
|
||||
}
|
||||
apiDefinition.setStatus(request.getStatus());
|
||||
apiDefinition.setUpdateUser(userId);
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.metersphere.api.constants.ApiResourceType;
|
|||
import io.metersphere.api.domain.*;
|
||||
import io.metersphere.api.dto.debug.ApiFileResourceUpdateRequest;
|
||||
import io.metersphere.api.dto.definition.*;
|
||||
import io.metersphere.api.dto.request.http.MsHTTPElement;
|
||||
import io.metersphere.api.mapper.*;
|
||||
import io.metersphere.api.service.ApiFileResourceService;
|
||||
import io.metersphere.api.utils.ApiDataUtils;
|
||||
|
@ -351,7 +352,7 @@ public class ApiTestCaseService {
|
|||
//记录删除日志
|
||||
apiTestCaseLogService.deleteBatchLog(caseLists, userId, projectId);
|
||||
//TODO 需要删除测试计划与用例的中间表 功能用例的关联表等
|
||||
//TODO 删除附件关系
|
||||
//TODO 删除附件关系 不需要删除报告
|
||||
//extFileAssociationService.deleteByResourceIds(ids);
|
||||
}
|
||||
|
||||
|
@ -497,4 +498,34 @@ public class ApiTestCaseService {
|
|||
return apiFileResourceService.uploadTempFile(file);
|
||||
}
|
||||
|
||||
public void updateByApiDefinitionId(List<String> ids, ApiDefinition apiDefinition) {
|
||||
String method = apiDefinition.getMethod();
|
||||
String path = apiDefinition.getPath();
|
||||
if (StringUtils.isNotEmpty(method) || StringUtils.isNotEmpty(path)) {
|
||||
ApiTestCaseExample apiTestCaseExample = new ApiTestCaseExample();
|
||||
apiTestCaseExample.createCriteria().andApiDefinitionIdIn(ids);
|
||||
List<ApiTestCase> caseLists = apiTestCaseMapper.selectByExample(apiTestCaseExample);
|
||||
List<String> caseIds = caseLists.stream().map(ApiTestCase::getId).toList();
|
||||
if (CollectionUtils.isEmpty(caseIds)) {
|
||||
return;
|
||||
}
|
||||
ApiTestCaseBlobExample blobExample = new ApiTestCaseBlobExample();
|
||||
blobExample.createCriteria().andIdIn(caseIds);
|
||||
List<ApiTestCaseBlob> bloBs = apiTestCaseBlobMapper.selectByExampleWithBLOBs(blobExample);
|
||||
|
||||
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
|
||||
ApiTestCaseBlobMapper batchMapper = sqlSession.getMapper(ApiTestCaseBlobMapper.class);
|
||||
bloBs.forEach(apiTestCase -> {
|
||||
MsHTTPElement msHttpElement = ApiDataUtils.parseObject(new String(apiTestCase.getRequest()), MsHTTPElement.class);
|
||||
msHttpElement.setMethod(method);
|
||||
msHttpElement.setPath(path);
|
||||
apiTestCase.setRequest(ApiDataUtils.toJSONString(msHttpElement).getBytes());
|
||||
batchMapper.updateByPrimaryKeySelective(apiTestCase);
|
||||
});
|
||||
sqlSession.flushStatements();
|
||||
if (sqlSessionFactory != null) {
|
||||
SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,6 +131,10 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
|||
|
||||
@Resource
|
||||
private OperationHistoryMapper operationHistoryMapper;
|
||||
@Resource
|
||||
private ApiTestCaseMapper apiTestCaseMapper;
|
||||
@Resource
|
||||
private ApiTestCaseBlobMapper apiTestCaseBlobMapper;
|
||||
|
||||
@Resource
|
||||
private OperationLogMapper operationLogMapper;
|
||||
|
@ -392,6 +396,61 @@ public class ApiDefinitionControllerTests extends BaseTest {
|
|||
|
||||
// @@校验日志
|
||||
checkLogModelList.add(new CheckLogModel(apiDefinition.getId(), OperationLogType.UPDATE, UPDATE));
|
||||
|
||||
//校验修改path和method时,是否会影响用例
|
||||
ApiDefinitionAddRequest addRequest = new ApiDefinitionAddRequest();
|
||||
addRequest.setName("测试修改path和method");
|
||||
addRequest.setProtocol("HTTP");
|
||||
addRequest.setProjectId(DEFAULT_PROJECT_ID);
|
||||
addRequest.setMethod("POST");
|
||||
addRequest.setPath("/api/admin/posts");
|
||||
addRequest.setStatus(ApiDefinitionStatus.PREPARE.getValue());
|
||||
addRequest.setModuleId("default");
|
||||
addRequest.setVersionId(DEFAULT_PROJECT_ID);
|
||||
addRequest.setDescription("描述内容");
|
||||
addRequest.setTags(new LinkedHashSet<>(List.of("tag1", "tag2")));
|
||||
addRequest.setCustomFields(new HashMap<>());
|
||||
addRequest.setRequest(ApiDataUtils.toJSONString(msHttpElement));
|
||||
addRequest.setResponse(ApiDataUtils.toJSONString(msHttpResponse));
|
||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(ADD, addRequest);
|
||||
ApiDefinition apiDefinition = getResultData(mvcResult, ApiDefinition.class);
|
||||
ApiDefinition apiPathAndMethod = apiDefinitionMapper.selectByPrimaryKey(apiDefinition.getId());
|
||||
Assertions.assertEquals(addRequest.getPath(), apiPathAndMethod.getPath());
|
||||
Assertions.assertEquals(addRequest.getMethod(), apiPathAndMethod.getMethod());
|
||||
ApiDefinitionUpdateRequest updateRequest = new ApiDefinitionUpdateRequest();
|
||||
BeanUtils.copyBean(updateRequest, apiPathAndMethod);
|
||||
updateRequest.setPath("/api/test/path/method");
|
||||
updateRequest.setRequest(ApiDataUtils.toJSONString(msHttpElement));
|
||||
updateRequest.setResponse(ApiDataUtils.toJSONString(msHttpResponse));
|
||||
updateRequest.setMethod("GET");
|
||||
this.requestPostWithOk(UPDATE, updateRequest);
|
||||
//增加用例
|
||||
for (int i = 0; i < 3; i++) {
|
||||
ApiTestCaseAddRequest testCaseAddRequest = new ApiTestCaseAddRequest();
|
||||
testCaseAddRequest.setApiDefinitionId(apiPathAndMethod.getId());
|
||||
testCaseAddRequest.setName("test-path" + i);
|
||||
testCaseAddRequest.setProjectId(DEFAULT_PROJECT_ID);
|
||||
testCaseAddRequest.setPriority("P0");
|
||||
testCaseAddRequest.setStatus(ApiDefinitionStatus.PREPARE.getValue());
|
||||
testCaseAddRequest.setTags(new LinkedHashSet<>(List.of("tag1", "tag2")));
|
||||
testCaseAddRequest.setRequest(ApiDataUtils.toJSONString(msHttpElement));
|
||||
this.requestPostWithOkAndReturn("/api/case/add", testCaseAddRequest);
|
||||
}
|
||||
updateRequest.setPath("/api/test/path/method/case");
|
||||
this.requestPostWithOk(UPDATE, updateRequest);
|
||||
//校验用例是否被修改
|
||||
ApiTestCaseExample apiTestCaseExample = new ApiTestCaseExample();
|
||||
apiTestCaseExample.createCriteria().andApiDefinitionIdEqualTo(apiPathAndMethod.getId());
|
||||
List<ApiTestCase> apiTestCases = apiTestCaseMapper.selectByExample(apiTestCaseExample);
|
||||
List<String> caseIds = apiTestCases.stream().map(ApiTestCase::getId).toList();
|
||||
ApiTestCaseBlobExample apiTestCaseBlobExample = new ApiTestCaseBlobExample();
|
||||
apiTestCaseBlobExample.createCriteria().andIdIn(caseIds);
|
||||
List<ApiTestCaseBlob> apiTestCaseBlobs = apiTestCaseBlobMapper.selectByExampleWithBLOBs(apiTestCaseBlobExample);
|
||||
apiTestCaseBlobs.forEach(apiTestCaseBlob -> {
|
||||
MsHTTPElement caseElement = ApiDataUtils.parseObject(new String(apiTestCaseBlob.getRequest()), MsHTTPElement.class);
|
||||
Assertions.assertEquals(updateRequest.getPath(), caseElement.getPath());
|
||||
Assertions.assertEquals(updateRequest.getMethod(), caseElement.getMethod());
|
||||
});
|
||||
// @@异常参数校验
|
||||
createdGroupParamValidateTest(ApiDefinitionUpdateRequest.class, UPDATE);
|
||||
// @@校验权限
|
||||
|
|
Loading…
Reference in New Issue