完善功能测试前后端

This commit is contained in:
chenjianxing 2020-03-13 21:01:03 +08:00
parent cc78b8da20
commit a950c03a5b
41 changed files with 3909 additions and 36 deletions

View File

@ -0,0 +1,67 @@
package io.metersphere.base.domain;
import java.io.Serializable;
public class FucTest implements Serializable {
private String id;
private String projectId;
private String name;
private String description;
private Long createTime;
private Long updateTime;
private static final long serialVersionUID = 1L;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId == null ? null : projectId.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description == null ? null : description.trim();
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
}

View File

@ -0,0 +1,600 @@
package io.metersphere.base.domain;
import java.util.ArrayList;
import java.util.List;
public class FucTestExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public FucTestExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(String value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(String value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(String value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(String value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(String value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(String value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdLike(String value) {
addCriterion("id like", value, "id");
return (Criteria) this;
}
public Criteria andIdNotLike(String value) {
addCriterion("id not like", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<String> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<String> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(String value1, String value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(String value1, String value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andProjectIdIsNull() {
addCriterion("project_id is null");
return (Criteria) this;
}
public Criteria andProjectIdIsNotNull() {
addCriterion("project_id is not null");
return (Criteria) this;
}
public Criteria andProjectIdEqualTo(String value) {
addCriterion("project_id =", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotEqualTo(String value) {
addCriterion("project_id <>", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThan(String value) {
addCriterion("project_id >", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThanOrEqualTo(String value) {
addCriterion("project_id >=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThan(String value) {
addCriterion("project_id <", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThanOrEqualTo(String value) {
addCriterion("project_id <=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLike(String value) {
addCriterion("project_id like", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotLike(String value) {
addCriterion("project_id not like", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdIn(List<String> values) {
addCriterion("project_id in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotIn(List<String> values) {
addCriterion("project_id not in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdBetween(String value1, String value2) {
addCriterion("project_id between", value1, value2, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotBetween(String value1, String value2) {
addCriterion("project_id not between", value1, value2, "projectId");
return (Criteria) this;
}
public Criteria andNameIsNull() {
addCriterion("name is null");
return (Criteria) this;
}
public Criteria andNameIsNotNull() {
addCriterion("name is not null");
return (Criteria) this;
}
public Criteria andNameEqualTo(String value) {
addCriterion("name =", value, "name");
return (Criteria) this;
}
public Criteria andNameNotEqualTo(String value) {
addCriterion("name <>", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThan(String value) {
addCriterion("name >", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThanOrEqualTo(String value) {
addCriterion("name >=", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThan(String value) {
addCriterion("name <", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThanOrEqualTo(String value) {
addCriterion("name <=", value, "name");
return (Criteria) this;
}
public Criteria andNameLike(String value) {
addCriterion("name like", value, "name");
return (Criteria) this;
}
public Criteria andNameNotLike(String value) {
addCriterion("name not like", value, "name");
return (Criteria) this;
}
public Criteria andNameIn(List<String> values) {
addCriterion("name in", values, "name");
return (Criteria) this;
}
public Criteria andNameNotIn(List<String> values) {
addCriterion("name not in", values, "name");
return (Criteria) this;
}
public Criteria andNameBetween(String value1, String value2) {
addCriterion("name between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andNameNotBetween(String value1, String value2) {
addCriterion("name not between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andDescriptionIsNull() {
addCriterion("description is null");
return (Criteria) this;
}
public Criteria andDescriptionIsNotNull() {
addCriterion("description is not null");
return (Criteria) this;
}
public Criteria andDescriptionEqualTo(String value) {
addCriterion("description =", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotEqualTo(String value) {
addCriterion("description <>", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThan(String value) {
addCriterion("description >", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
addCriterion("description >=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThan(String value) {
addCriterion("description <", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThanOrEqualTo(String value) {
addCriterion("description <=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLike(String value) {
addCriterion("description like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotLike(String value) {
addCriterion("description not like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionIn(List<String> values) {
addCriterion("description in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotIn(List<String> values) {
addCriterion("description not in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionBetween(String value1, String value2) {
addCriterion("description between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotBetween(String value1, String value2) {
addCriterion("description not between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
}
public Criteria andCreateTimeIsNotNull() {
addCriterion("create_time is not null");
return (Criteria) this;
}
public Criteria andCreateTimeEqualTo(Long value) {
addCriterion("create_time =", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotEqualTo(Long value) {
addCriterion("create_time <>", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThan(Long value) {
addCriterion("create_time >", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("create_time >=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThan(Long value) {
addCriterion("create_time <", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThanOrEqualTo(Long value) {
addCriterion("create_time <=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeIn(List<Long> values) {
addCriterion("create_time in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotIn(List<Long> values) {
addCriterion("create_time not in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeBetween(Long value1, Long value2) {
addCriterion("create_time between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotBetween(Long value1, Long value2) {
addCriterion("create_time not between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNull() {
addCriterion("update_time is null");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNotNull() {
addCriterion("update_time is not null");
return (Criteria) this;
}
public Criteria andUpdateTimeEqualTo(Long value) {
addCriterion("update_time =", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotEqualTo(Long value) {
addCriterion("update_time <>", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThan(Long value) {
addCriterion("update_time >", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("update_time >=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThan(Long value) {
addCriterion("update_time <", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThanOrEqualTo(Long value) {
addCriterion("update_time <=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIn(List<Long> values) {
addCriterion("update_time in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotIn(List<Long> values) {
addCriterion("update_time not in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeBetween(Long value1, Long value2) {
addCriterion("update_time between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotBetween(Long value1, Long value2) {
addCriterion("update_time not between", value1, value2, "updateTime");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

View File

@ -0,0 +1,27 @@
package io.metersphere.base.domain;
import java.io.Serializable;
public class FucTestFile implements Serializable {
private String testId;
private String fileId;
private static final long serialVersionUID = 1L;
public String getTestId() {
return testId;
}
public void setTestId(String testId) {
this.testId = testId == null ? null : testId.trim();
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId == null ? null : fileId.trim();
}
}

View File

@ -0,0 +1,340 @@
package io.metersphere.base.domain;
import java.util.ArrayList;
import java.util.List;
public class FucTestFileExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public FucTestFileExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andTestIdIsNull() {
addCriterion("test_id is null");
return (Criteria) this;
}
public Criteria andTestIdIsNotNull() {
addCriterion("test_id is not null");
return (Criteria) this;
}
public Criteria andTestIdEqualTo(String value) {
addCriterion("test_id =", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotEqualTo(String value) {
addCriterion("test_id <>", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdGreaterThan(String value) {
addCriterion("test_id >", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdGreaterThanOrEqualTo(String value) {
addCriterion("test_id >=", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLessThan(String value) {
addCriterion("test_id <", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLessThanOrEqualTo(String value) {
addCriterion("test_id <=", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLike(String value) {
addCriterion("test_id like", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotLike(String value) {
addCriterion("test_id not like", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdIn(List<String> values) {
addCriterion("test_id in", values, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotIn(List<String> values) {
addCriterion("test_id not in", values, "testId");
return (Criteria) this;
}
public Criteria andTestIdBetween(String value1, String value2) {
addCriterion("test_id between", value1, value2, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotBetween(String value1, String value2) {
addCriterion("test_id not between", value1, value2, "testId");
return (Criteria) this;
}
public Criteria andFileIdIsNull() {
addCriterion("file_id is null");
return (Criteria) this;
}
public Criteria andFileIdIsNotNull() {
addCriterion("file_id is not null");
return (Criteria) this;
}
public Criteria andFileIdEqualTo(String value) {
addCriterion("file_id =", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdNotEqualTo(String value) {
addCriterion("file_id <>", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdGreaterThan(String value) {
addCriterion("file_id >", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdGreaterThanOrEqualTo(String value) {
addCriterion("file_id >=", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdLessThan(String value) {
addCriterion("file_id <", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdLessThanOrEqualTo(String value) {
addCriterion("file_id <=", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdLike(String value) {
addCriterion("file_id like", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdNotLike(String value) {
addCriterion("file_id not like", value, "fileId");
return (Criteria) this;
}
public Criteria andFileIdIn(List<String> values) {
addCriterion("file_id in", values, "fileId");
return (Criteria) this;
}
public Criteria andFileIdNotIn(List<String> values) {
addCriterion("file_id not in", values, "fileId");
return (Criteria) this;
}
public Criteria andFileIdBetween(String value1, String value2) {
addCriterion("file_id between", value1, value2, "fileId");
return (Criteria) this;
}
public Criteria andFileIdNotBetween(String value1, String value2) {
addCriterion("file_id not between", value1, value2, "fileId");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

View File

@ -0,0 +1,87 @@
package io.metersphere.base.domain;
import java.io.Serializable;
public class FucTestReport implements Serializable {
private String id;
private String testId;
private String name;
private String description;
private Long createTime;
private Long updateTime;
private String status;
private String content;
private static final long serialVersionUID = 1L;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getTestId() {
return testId;
}
public void setTestId(String testId) {
this.testId = testId == null ? null : testId.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description == null ? null : description.trim();
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status == null ? null : status.trim();
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content == null ? null : content.trim();
}
}

View File

@ -0,0 +1,670 @@
package io.metersphere.base.domain;
import java.util.ArrayList;
import java.util.List;
public class FucTestReportExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public FucTestReportExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(String value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(String value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(String value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(String value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(String value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(String value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdLike(String value) {
addCriterion("id like", value, "id");
return (Criteria) this;
}
public Criteria andIdNotLike(String value) {
addCriterion("id not like", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<String> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<String> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(String value1, String value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(String value1, String value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andTestIdIsNull() {
addCriterion("test_id is null");
return (Criteria) this;
}
public Criteria andTestIdIsNotNull() {
addCriterion("test_id is not null");
return (Criteria) this;
}
public Criteria andTestIdEqualTo(String value) {
addCriterion("test_id =", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotEqualTo(String value) {
addCriterion("test_id <>", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdGreaterThan(String value) {
addCriterion("test_id >", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdGreaterThanOrEqualTo(String value) {
addCriterion("test_id >=", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLessThan(String value) {
addCriterion("test_id <", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLessThanOrEqualTo(String value) {
addCriterion("test_id <=", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdLike(String value) {
addCriterion("test_id like", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotLike(String value) {
addCriterion("test_id not like", value, "testId");
return (Criteria) this;
}
public Criteria andTestIdIn(List<String> values) {
addCriterion("test_id in", values, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotIn(List<String> values) {
addCriterion("test_id not in", values, "testId");
return (Criteria) this;
}
public Criteria andTestIdBetween(String value1, String value2) {
addCriterion("test_id between", value1, value2, "testId");
return (Criteria) this;
}
public Criteria andTestIdNotBetween(String value1, String value2) {
addCriterion("test_id not between", value1, value2, "testId");
return (Criteria) this;
}
public Criteria andNameIsNull() {
addCriterion("name is null");
return (Criteria) this;
}
public Criteria andNameIsNotNull() {
addCriterion("name is not null");
return (Criteria) this;
}
public Criteria andNameEqualTo(String value) {
addCriterion("name =", value, "name");
return (Criteria) this;
}
public Criteria andNameNotEqualTo(String value) {
addCriterion("name <>", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThan(String value) {
addCriterion("name >", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThanOrEqualTo(String value) {
addCriterion("name >=", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThan(String value) {
addCriterion("name <", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThanOrEqualTo(String value) {
addCriterion("name <=", value, "name");
return (Criteria) this;
}
public Criteria andNameLike(String value) {
addCriterion("name like", value, "name");
return (Criteria) this;
}
public Criteria andNameNotLike(String value) {
addCriterion("name not like", value, "name");
return (Criteria) this;
}
public Criteria andNameIn(List<String> values) {
addCriterion("name in", values, "name");
return (Criteria) this;
}
public Criteria andNameNotIn(List<String> values) {
addCriterion("name not in", values, "name");
return (Criteria) this;
}
public Criteria andNameBetween(String value1, String value2) {
addCriterion("name between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andNameNotBetween(String value1, String value2) {
addCriterion("name not between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andDescriptionIsNull() {
addCriterion("description is null");
return (Criteria) this;
}
public Criteria andDescriptionIsNotNull() {
addCriterion("description is not null");
return (Criteria) this;
}
public Criteria andDescriptionEqualTo(String value) {
addCriterion("description =", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotEqualTo(String value) {
addCriterion("description <>", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThan(String value) {
addCriterion("description >", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
addCriterion("description >=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThan(String value) {
addCriterion("description <", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThanOrEqualTo(String value) {
addCriterion("description <=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLike(String value) {
addCriterion("description like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotLike(String value) {
addCriterion("description not like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionIn(List<String> values) {
addCriterion("description in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotIn(List<String> values) {
addCriterion("description not in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionBetween(String value1, String value2) {
addCriterion("description between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotBetween(String value1, String value2) {
addCriterion("description not between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
}
public Criteria andCreateTimeIsNotNull() {
addCriterion("create_time is not null");
return (Criteria) this;
}
public Criteria andCreateTimeEqualTo(Long value) {
addCriterion("create_time =", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotEqualTo(Long value) {
addCriterion("create_time <>", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThan(Long value) {
addCriterion("create_time >", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("create_time >=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThan(Long value) {
addCriterion("create_time <", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThanOrEqualTo(Long value) {
addCriterion("create_time <=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeIn(List<Long> values) {
addCriterion("create_time in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotIn(List<Long> values) {
addCriterion("create_time not in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeBetween(Long value1, Long value2) {
addCriterion("create_time between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotBetween(Long value1, Long value2) {
addCriterion("create_time not between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNull() {
addCriterion("update_time is null");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNotNull() {
addCriterion("update_time is not null");
return (Criteria) this;
}
public Criteria andUpdateTimeEqualTo(Long value) {
addCriterion("update_time =", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotEqualTo(Long value) {
addCriterion("update_time <>", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThan(Long value) {
addCriterion("update_time >", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("update_time >=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThan(Long value) {
addCriterion("update_time <", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThanOrEqualTo(Long value) {
addCriterion("update_time <=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIn(List<Long> values) {
addCriterion("update_time in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotIn(List<Long> values) {
addCriterion("update_time not in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeBetween(Long value1, Long value2) {
addCriterion("update_time between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotBetween(Long value1, Long value2) {
addCriterion("update_time not between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("status is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("status is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(String value) {
addCriterion("status =", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(String value) {
addCriterion("status <>", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(String value) {
addCriterion("status >", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(String value) {
addCriterion("status >=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThan(String value) {
addCriterion("status <", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(String value) {
addCriterion("status <=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLike(String value) {
addCriterion("status like", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotLike(String value) {
addCriterion("status not like", value, "status");
return (Criteria) this;
}
public Criteria andStatusIn(List<String> values) {
addCriterion("status in", values, "status");
return (Criteria) this;
}
public Criteria andStatusNotIn(List<String> values) {
addCriterion("status not in", values, "status");
return (Criteria) this;
}
public Criteria andStatusBetween(String value1, String value2) {
addCriterion("status between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andStatusNotBetween(String value1, String value2) {
addCriterion("status not between", value1, value2, "status");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

View File

@ -0,0 +1,27 @@
package io.metersphere.base.domain;
import java.io.Serializable;
public class FucTestWithBLOBs extends FucTest implements Serializable {
private String runtimeConfiguration;
private String schedule;
private static final long serialVersionUID = 1L;
public String getRuntimeConfiguration() {
return runtimeConfiguration;
}
public void setRuntimeConfiguration(String runtimeConfiguration) {
this.runtimeConfiguration = runtimeConfiguration == null ? null : runtimeConfiguration.trim();
}
public String getSchedule() {
return schedule;
}
public void setSchedule(String schedule) {
this.schedule = schedule == null ? null : schedule.trim();
}
}

View File

@ -0,0 +1,22 @@
package io.metersphere.base.mapper;
import io.metersphere.base.domain.FucTestFile;
import io.metersphere.base.domain.FucTestFileExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface FucTestFileMapper {
long countByExample(FucTestFileExample example);
int deleteByExample(FucTestFileExample example);
int insert(FucTestFile record);
int insertSelective(FucTestFile record);
List<FucTestFile> selectByExample(FucTestFileExample example);
int updateByExampleSelective(@Param("record") FucTestFile record, @Param("example") FucTestFileExample example);
int updateByExample(@Param("record") FucTestFile record, @Param("example") FucTestFileExample example);
}

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.base.mapper.FucTestFileMapper">
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.FucTestFile">
<result column="test_id" jdbcType="VARCHAR" property="testId" />
<result column="file_id" jdbcType="VARCHAR" property="fileId" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
test_id, file_id
</sql>
<select id="selectByExample" parameterType="io.metersphere.base.domain.FucTestFileExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from fuc_test_file
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.FucTestFileExample">
delete from fuc_test_file
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="io.metersphere.base.domain.FucTestFile">
insert into fuc_test_file (test_id, file_id)
values (#{testId,jdbcType=VARCHAR}, #{fileId,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="io.metersphere.base.domain.FucTestFile">
insert into fuc_test_file
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="testId != null">
test_id,
</if>
<if test="fileId != null">
file_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="testId != null">
#{testId,jdbcType=VARCHAR},
</if>
<if test="fileId != null">
#{fileId,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="io.metersphere.base.domain.FucTestFileExample" resultType="java.lang.Long">
select count(*) from fuc_test_file
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update fuc_test_file
<set>
<if test="record.testId != null">
test_id = #{record.testId,jdbcType=VARCHAR},
</if>
<if test="record.fileId != null">
file_id = #{record.fileId,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update fuc_test_file
set test_id = #{record.testId,jdbcType=VARCHAR},
file_id = #{record.fileId,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
</mapper>

View File

@ -0,0 +1,37 @@
package io.metersphere.base.mapper;
import io.metersphere.base.domain.FucTest;
import io.metersphere.base.domain.FucTestExample;
import io.metersphere.base.domain.FucTestWithBLOBs;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface FucTestMapper {
long countByExample(FucTestExample example);
int deleteByExample(FucTestExample example);
int deleteByPrimaryKey(String id);
int insert(FucTestWithBLOBs record);
int insertSelective(FucTestWithBLOBs record);
List<FucTestWithBLOBs> selectByExampleWithBLOBs(FucTestExample example);
List<FucTest> selectByExample(FucTestExample example);
FucTestWithBLOBs selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") FucTestWithBLOBs record, @Param("example") FucTestExample example);
int updateByExampleWithBLOBs(@Param("record") FucTestWithBLOBs record, @Param("example") FucTestExample example);
int updateByExample(@Param("record") FucTest record, @Param("example") FucTestExample example);
int updateByPrimaryKeySelective(FucTestWithBLOBs record);
int updateByPrimaryKeyWithBLOBs(FucTestWithBLOBs record);
int updateByPrimaryKey(FucTest record);
}

View File

@ -0,0 +1,302 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.base.mapper.FucTestMapper">
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.FucTest">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.FucTestWithBLOBs">
<result column="runtime_configuration" jdbcType="LONGVARCHAR" property="runtimeConfiguration" />
<result column="schedule" jdbcType="LONGVARCHAR" property="schedule" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
id, project_id, name, description, create_time, update_time
</sql>
<sql id="Blob_Column_List">
runtime_configuration, schedule
</sql>
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.FucTestExample" resultMap="ResultMapWithBLOBs">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from fuc_test
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByExample" parameterType="io.metersphere.base.domain.FucTestExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from fuc_test
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="ResultMapWithBLOBs">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from fuc_test
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from fuc_test
where id = #{id,jdbcType=VARCHAR}
</delete>
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.FucTestExample">
delete from fuc_test
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="io.metersphere.base.domain.FucTestWithBLOBs">
insert into fuc_test (id, project_id, name,
description, create_time, update_time,
runtime_configuration, schedule)
values (#{id,jdbcType=VARCHAR}, #{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{runtimeConfiguration,jdbcType=LONGVARCHAR}, #{schedule,jdbcType=LONGVARCHAR})
</insert>
<insert id="insertSelective" parameterType="io.metersphere.base.domain.FucTestWithBLOBs">
insert into fuc_test
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="projectId != null">
project_id,
</if>
<if test="name != null">
name,
</if>
<if test="description != null">
description,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="runtimeConfiguration != null">
runtime_configuration,
</if>
<if test="schedule != null">
schedule,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="projectId != null">
#{projectId,jdbcType=VARCHAR},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="description != null">
#{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=BIGINT},
</if>
<if test="runtimeConfiguration != null">
#{runtimeConfiguration,jdbcType=LONGVARCHAR},
</if>
<if test="schedule != null">
#{schedule,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="io.metersphere.base.domain.FucTestExample" resultType="java.lang.Long">
select count(*) from fuc_test
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update fuc_test
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=VARCHAR},
</if>
<if test="record.projectId != null">
project_id = #{record.projectId,jdbcType=VARCHAR},
</if>
<if test="record.name != null">
name = #{record.name,jdbcType=VARCHAR},
</if>
<if test="record.description != null">
description = #{record.description,jdbcType=VARCHAR},
</if>
<if test="record.createTime != null">
create_time = #{record.createTime,jdbcType=BIGINT},
</if>
<if test="record.updateTime != null">
update_time = #{record.updateTime,jdbcType=BIGINT},
</if>
<if test="record.runtimeConfiguration != null">
runtime_configuration = #{record.runtimeConfiguration,jdbcType=LONGVARCHAR},
</if>
<if test="record.schedule != null">
schedule = #{record.schedule,jdbcType=LONGVARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExampleWithBLOBs" parameterType="map">
update fuc_test
set id = #{record.id,jdbcType=VARCHAR},
project_id = #{record.projectId,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
runtime_configuration = #{record.runtimeConfiguration,jdbcType=LONGVARCHAR},
schedule = #{record.schedule,jdbcType=LONGVARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update fuc_test
set id = #{record.id,jdbcType=VARCHAR},
project_id = #{record.projectId,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.FucTestWithBLOBs">
update fuc_test
<set>
<if test="projectId != null">
project_id = #{projectId,jdbcType=VARCHAR},
</if>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="description != null">
description = #{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=BIGINT},
</if>
<if test="runtimeConfiguration != null">
runtime_configuration = #{runtimeConfiguration,jdbcType=LONGVARCHAR},
</if>
<if test="schedule != null">
schedule = #{schedule,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.FucTestWithBLOBs">
update fuc_test
set project_id = #{projectId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
runtime_configuration = #{runtimeConfiguration,jdbcType=LONGVARCHAR},
schedule = #{schedule,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.FucTest">
update fuc_test
set project_id = #{projectId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -0,0 +1,36 @@
package io.metersphere.base.mapper;
import io.metersphere.base.domain.FucTestReport;
import io.metersphere.base.domain.FucTestReportExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface FucTestReportMapper {
long countByExample(FucTestReportExample example);
int deleteByExample(FucTestReportExample example);
int deleteByPrimaryKey(String id);
int insert(FucTestReport record);
int insertSelective(FucTestReport record);
List<FucTestReport> selectByExampleWithBLOBs(FucTestReportExample example);
List<FucTestReport> selectByExample(FucTestReportExample example);
FucTestReport selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") FucTestReport record, @Param("example") FucTestReportExample example);
int updateByExampleWithBLOBs(@Param("record") FucTestReport record, @Param("example") FucTestReportExample example);
int updateByExample(@Param("record") FucTestReport record, @Param("example") FucTestReportExample example);
int updateByPrimaryKeySelective(FucTestReport record);
int updateByPrimaryKeyWithBLOBs(FucTestReport record);
int updateByPrimaryKey(FucTestReport record);
}

View File

@ -0,0 +1,304 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.base.mapper.FucTestReportMapper">
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.FucTestReport">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="test_id" jdbcType="VARCHAR" property="testId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="status" jdbcType="VARCHAR" property="status" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.FucTestReport">
<result column="content" jdbcType="LONGVARCHAR" property="content" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
id, test_id, name, description, create_time, update_time, status
</sql>
<sql id="Blob_Column_List">
content
</sql>
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.FucTestReportExample" resultMap="ResultMapWithBLOBs">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from fuc_test_report
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByExample" parameterType="io.metersphere.base.domain.FucTestReportExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from fuc_test_report
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="ResultMapWithBLOBs">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from fuc_test_report
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from fuc_test_report
where id = #{id,jdbcType=VARCHAR}
</delete>
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.FucTestReportExample">
delete from fuc_test_report
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="io.metersphere.base.domain.FucTestReport">
insert into fuc_test_report (id, test_id, name,
description, create_time, update_time,
status, content)
values (#{id,jdbcType=VARCHAR}, #{testId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{status,jdbcType=VARCHAR}, #{content,jdbcType=LONGVARCHAR})
</insert>
<insert id="insertSelective" parameterType="io.metersphere.base.domain.FucTestReport">
insert into fuc_test_report
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="testId != null">
test_id,
</if>
<if test="name != null">
name,
</if>
<if test="description != null">
description,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="status != null">
status,
</if>
<if test="content != null">
content,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="testId != null">
#{testId,jdbcType=VARCHAR},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="description != null">
#{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=BIGINT},
</if>
<if test="status != null">
#{status,jdbcType=VARCHAR},
</if>
<if test="content != null">
#{content,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="io.metersphere.base.domain.FucTestReportExample" resultType="java.lang.Long">
select count(*) from fuc_test_report
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update fuc_test_report
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=VARCHAR},
</if>
<if test="record.testId != null">
test_id = #{record.testId,jdbcType=VARCHAR},
</if>
<if test="record.name != null">
name = #{record.name,jdbcType=VARCHAR},
</if>
<if test="record.description != null">
description = #{record.description,jdbcType=VARCHAR},
</if>
<if test="record.createTime != null">
create_time = #{record.createTime,jdbcType=BIGINT},
</if>
<if test="record.updateTime != null">
update_time = #{record.updateTime,jdbcType=BIGINT},
</if>
<if test="record.status != null">
status = #{record.status,jdbcType=VARCHAR},
</if>
<if test="record.content != null">
content = #{record.content,jdbcType=LONGVARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExampleWithBLOBs" parameterType="map">
update fuc_test_report
set id = #{record.id,jdbcType=VARCHAR},
test_id = #{record.testId,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
status = #{record.status,jdbcType=VARCHAR},
content = #{record.content,jdbcType=LONGVARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update fuc_test_report
set id = #{record.id,jdbcType=VARCHAR},
test_id = #{record.testId,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
status = #{record.status,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.FucTestReport">
update fuc_test_report
<set>
<if test="testId != null">
test_id = #{testId,jdbcType=VARCHAR},
</if>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="description != null">
description = #{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=BIGINT},
</if>
<if test="status != null">
status = #{status,jdbcType=VARCHAR},
</if>
<if test="content != null">
content = #{content,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.FucTestReport">
update fuc_test_report
set test_id = #{testId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
status = #{status,jdbcType=VARCHAR},
content = #{content,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.FucTestReport">
update fuc_test_report
set test_id = #{testId,jdbcType=VARCHAR},
name = #{name,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
status = #{status,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -0,0 +1,11 @@
package io.metersphere.base.mapper.ext;
import io.metersphere.controller.request.testplan.QueryTestPlanRequest;
import io.metersphere.dto.FunctionalTestDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ExtFunctionalTestMapper {
List<FunctionalTestDTO> list(@Param("request") QueryTestPlanRequest params);
}

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="io.metersphere.base.mapper.ext.ExtFunctionalTestMapper">
<resultMap id="BaseResultMap" type="io.metersphere.dto.FunctionalTestDTO"
extends="io.metersphere.base.mapper.FucTestMapper.BaseResultMap">
<result column="project_name" property="projectName"/>
</resultMap>
<select id="list" resultMap="BaseResultMap" parameterType="io.metersphere.controller.request.testplan.QueryTestPlanRequest">
select fuc_test.*, project.name as project_name
from fuc_test
left join project on fuc_test.project_id = project.id
<where>
<if test="request.name != null">
and fuc_test.name like CONCAT('%', #{request.name},'%')
</if>
<if test="request.workspaceId != null">
AND project.workspace_id = #{request.workspaceId}
</if>
<if test="request.projectId != null">
AND project.id = #{request.projectId}
</if>
<if test="request.id != null">
AND fuc_test.id = #{request.id}
</if>
</where>
<if test="request.recent">
order by fuc_test.update_time desc
</if>
</select>
</mapper>

View File

@ -0,0 +1,15 @@
package io.metersphere.base.mapper.ext;
import io.metersphere.controller.request.ReportRequest;
import io.metersphere.dto.FunctionalReportDTO;
import io.metersphere.dto.ReportDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ExtFunctionalTestReportMapper {
List<FunctionalReportDTO> getReportList(@Param("reportRequest") ReportRequest request);
FunctionalReportDTO getReportTestAndProInfo(@Param("id") String id);
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="io.metersphere.base.mapper.ext.ExtFunctionalTestReportMapper">
<select id="getReportList" resultType="io.metersphere.dto.FunctionalReportDTO">
select ltr.id, ltr.name, ltr.test_id as testId, ltr.description,
ltr.create_time as createTime, ltr.update_time as updateTime, ltr.status as status, lt.name as testName
from fuc_test_report ltr join fuc_test lt on ltr.test_id = lt.id
<where>
<if test="reportRequest.name != null">
AND ltr.name like CONCAT('%', #{reportRequest.name},'%')
</if>
</where>
</select>
<select id="getReportTestAndProInfo" resultType="io.metersphere.dto.FunctionalReportDTO">
select ltr.id, ltr.name, ltr.test_id as testId, ltr.description,
ltr.create_time as createTime, ltr.update_time as updateTime, ltr.status as status, lt.name as testName,
p.id as projectId, p.name as projectName
from fuc_test_report ltr join fuc_test lt on ltr.test_id = lt.id join project p on lt.project_id = p.id
where ltr.id = #{id}
</select>
</mapper>

View File

@ -0,0 +1,56 @@
package io.metersphere.controller;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.base.domain.FucTestReport;
import io.metersphere.commons.constants.RoleConstants;
import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager;
import io.metersphere.controller.request.ReportRequest;
import io.metersphere.dto.FunctionalReportDTO;
import io.metersphere.service.FunctionalReportService;
import io.metersphere.user.SessionUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping(value = "/functional/report")
public class FunctionalReportController {
@Resource
private FunctionalReportService functionalReportService;
@GetMapping("/recent/{count}")
@RequiresRoles(value = {RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER, RoleConstants.TEST_VIEWER}, logical = Logical.OR)
public List<FucTestReport> recentProjects(@PathVariable int count) {
String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId();
ReportRequest request = new ReportRequest();
request.setWorkspaceId(currentWorkspaceId);
// 最近 `count` 个项目
PageHelper.startPage(1, count);
return functionalReportService.getRecentReportList(request);
}
@PostMapping("/list/all/{goPage}/{pageSize}")
public Pager<List<FunctionalReportDTO>> getReportList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody ReportRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, functionalReportService.getReportList(request));
}
@PostMapping("/delete/{reportId}")
public void deleteReport(@PathVariable String reportId) {
functionalReportService.deleteReport(reportId);
}
@GetMapping("/test/pro/info/{reportId}")
public FunctionalReportDTO getReportTestAndProInfo(@PathVariable String reportId) {
return functionalReportService.getReportTestAndProInfo(reportId);
}
}

View File

@ -0,0 +1,99 @@
package io.metersphere.controller;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.base.domain.FileMetadata;
import io.metersphere.commons.constants.RoleConstants;
import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager;
import io.metersphere.controller.request.testplan.*;
import io.metersphere.dto.FunctionalTestDTO;
import io.metersphere.service.FileService;
import io.metersphere.service.FuctionalTestService;
import io.metersphere.user.SessionUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping(value = "/functional/plan")
@RequiresRoles(value = {RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER, RoleConstants.TEST_VIEWER}, logical = Logical.OR)
public class FunctionalTestController {
@Resource
private FuctionalTestService fuctionalTestService;
@Resource
private FileService fileService;
@GetMapping("recent/{count}")
public List<FunctionalTestDTO> recentTestPlans(@PathVariable int count) {
String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId();
QueryTestPlanRequest request = new QueryTestPlanRequest();
request.setWorkspaceId(currentWorkspaceId);
PageHelper.startPage(1, count, true);
return fuctionalTestService.recentTestPlans(request);
}
@PostMapping("/list/{goPage}/{pageSize}")
public Pager<List<FunctionalTestDTO>> list(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
request.setWorkspaceId(SessionUtils.getCurrentWorkspaceId());
return PageUtils.setPageInfo(page, fuctionalTestService.list(request));
}
@PostMapping(value = "/save", consumes = {"multipart/form-data"})
public String save(
@RequestPart("request") SaveTestPlanRequest request,
@RequestPart(value = "file") MultipartFile file
) {
return fuctionalTestService.save(request, file);
}
@PostMapping(value = "/edit", consumes = {"multipart/form-data"})
public String edit(
@RequestPart("request") EditTestPlanRequest request,
@RequestPart(value = "file", required = false) MultipartFile file
) {
return fuctionalTestService.edit(request, file);
}
@GetMapping("/get/{testId}")
public FunctionalTestDTO get(@PathVariable String testId) {
return fuctionalTestService.get(testId);
}
@GetMapping("/get-runtime-config/{testId}")
public String getAdvancedConfiguration(@PathVariable String testId) {
return fuctionalTestService.getRuntimeConfiguration(testId);
}
@PostMapping("/delete")
public void delete(@RequestBody DeleteTestPlanRequest request) {
fuctionalTestService.delete(request);
}
@PostMapping("/run")
public void run(@RequestBody RunTestPlanRequest request) {
fuctionalTestService.run(request);
}
@GetMapping("/file/metadata/{testId}")
public FileMetadata getFileMetadata(@PathVariable String testId) {
return fileService.getFucFileMetadataByTestId(testId);
}
@PostMapping("/file/download")
public ResponseEntity<byte[]> downloadJmx(@RequestBody FileOperationRequest fileOperationRequest) {
byte[] bytes = fileService.loadFileAsBytes(fileOperationRequest.getId());
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/octet-stream"))
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileOperationRequest.getName() + "\"")
.body(bytes);
}
}

View File

@ -1,6 +1,118 @@
package io.metersphere.controller.request.testplan;
import io.metersphere.base.domain.LoadTestWithBLOBs;
public class TestPlanRequest {
private String id;
private String projectId;
private String name;
private String description;
private String scenarioDefinition;
private Long createTime;
private Long updateTime;
private String loadConfiguration;
private String advancedConfiguration;
private String runtimeConfiguration;
private String schedule;
private static final long serialVersionUID = 1L;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getScenarioDefinition() {
return scenarioDefinition;
}
public void setScenarioDefinition(String scenarioDefinition) {
this.scenarioDefinition = scenarioDefinition;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public String getRuntimeConfiguration() {
return runtimeConfiguration;
}
public void setRuntimeConfiguration(String runtimeConfiguration) {
this.runtimeConfiguration = runtimeConfiguration;
}
public String getLoadConfiguration() {
return loadConfiguration;
}
public void setLoadConfiguration(String loadConfiguration) {
this.loadConfiguration = loadConfiguration == null ? null : loadConfiguration.trim();
}
public String getAdvancedConfiguration() {
return advancedConfiguration;
}
public void setAdvancedConfiguration(String advancedConfiguration) {
this.advancedConfiguration = advancedConfiguration == null ? null : advancedConfiguration.trim();
}
public String getSchedule() {
return schedule;
}
public void setSchedule(String schedule) {
this.schedule = schedule == null ? null : schedule.trim();
}
public class TestPlanRequest extends LoadTestWithBLOBs {
}

View File

@ -0,0 +1,104 @@
package io.metersphere.dto;
public class FunctionalReportDTO {
private String id;
private String testId;
private String name;
private String description;
private Long createTime;
private Long updateTime;
private String status;
private String content;
private String testName;
private String projectId;
private String projectName;
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTestId() {
return testId;
}
public void setTestId(String testId) {
this.testId = testId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTestName() {
return testName;
}
public void setTestName(String testName) {
this.testName = testName;
}
}

View File

@ -0,0 +1,15 @@
package io.metersphere.dto;
import io.metersphere.base.domain.LoadTest;
public class FunctionalTestDTO extends LoadTest {
private String projectName;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
}

View File

@ -3,6 +3,7 @@ package io.metersphere.service;
import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.FileContentMapper;
import io.metersphere.base.mapper.FileMetadataMapper;
import io.metersphere.base.mapper.FucTestFileMapper;
import io.metersphere.base.mapper.LoadTestFileMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -18,6 +19,8 @@ public class FileService {
@Resource
private LoadTestFileMapper loadTestFileMapper;
@Resource
private FucTestFileMapper fucTestFileMapper;
@Resource
private FileContentMapper fileContentMapper;
public byte[] loadFileAsBytes(String id) {
@ -38,6 +41,17 @@ public class FileService {
return fileMetadataMapper.selectByPrimaryKey(loadTestFiles.get(0).getFileId());
}
public FileMetadata getFucFileMetadataByTestId(String testId) {
FucTestFileExample fucTestFileExample = new FucTestFileExample();
fucTestFileExample.createCriteria().andTestIdEqualTo(testId);
final List<FucTestFile> loadTestFiles = fucTestFileMapper.selectByExample(fucTestFileExample);
if (CollectionUtils.isEmpty(loadTestFiles)) {
return null;
}
return fileMetadataMapper.selectByPrimaryKey(loadTestFiles.get(0).getFileId());
}
public FileContent getFileContent(String fileId) {
return fileContentMapper.selectByPrimaryKey(fileId);
}

View File

@ -0,0 +1,197 @@
package io.metersphere.service;
import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.*;
import io.metersphere.base.mapper.ext.ExtFunctionalTestMapper;
import io.metersphere.commons.constants.EngineType;
import io.metersphere.commons.exception.MSException;
import io.metersphere.controller.request.testplan.*;
import io.metersphere.dto.FunctionalTestDTO;
import io.metersphere.engine.Engine;
import io.metersphere.engine.EngineFactory;
import io.metersphere.i18n.Translator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Service
@Transactional(rollbackFor = Exception.class)
public class FuctionalTestService {
@Resource
private FucTestMapper fucTestMapper;
@Resource
private ExtFunctionalTestMapper extFucTestMapper;
@Resource
private ProjectMapper projectMapper;
@Resource
private FileMetadataMapper fileMetadataMapper;
@Resource
private FileContentMapper fileContentMapper;
@Resource
private FucTestFileMapper fucTestFileMapper;
@Resource
private FileService fileService;
public List<FunctionalTestDTO> list(QueryTestPlanRequest request) {
return extFucTestMapper.list(request);
}
public void delete(DeleteTestPlanRequest request) {
fucTestMapper.deleteByPrimaryKey(request.getId());
fileService.deleteFileByTestId(request.getId());
}
public String save(SaveTestPlanRequest request, MultipartFile file) {
if (file == null) {
throw new IllegalArgumentException("文件不能为空!");
}
final FileMetadata fileMetadata = saveFile(file);
final FucTestWithBLOBs fucTest = saveFucTest(request);
FucTestFile fucTestFile = new FucTestFile();
fucTestFile.setTestId(fucTest.getId());
fucTestFile.setFileId(fileMetadata.getId());
fucTestFileMapper.insert(fucTestFile);
return fucTest.getId();
}
private FucTestWithBLOBs saveFucTest(SaveTestPlanRequest request) {
FucTestExample example = new FucTestExample();
example.createCriteria().andNameEqualTo(request.getName()).andProjectIdEqualTo(request.getProjectId());
if (fucTestMapper.countByExample(example) > 0) {
MSException.throwException(Translator.get("function_test_already_exists"));
}
final FucTestWithBLOBs fucTes = new FucTestWithBLOBs();
fucTes.setId(UUID.randomUUID().toString());
fucTes.setName(request.getName());
fucTes.setProjectId(request.getProjectId());
fucTes.setCreateTime(System.currentTimeMillis());
fucTes.setUpdateTime(System.currentTimeMillis());
fucTes.setDescription("todo");
fucTes.setRuntimeConfiguration(request.getRuntimeConfiguration());
fucTestMapper.insert(fucTes);
return fucTes;
}
private FileMetadata saveFile(MultipartFile file) {
final FileMetadata fileMetadata = new FileMetadata();
fileMetadata.setId(UUID.randomUUID().toString());
fileMetadata.setName(file.getOriginalFilename());
fileMetadata.setSize(file.getSize());
fileMetadata.setCreateTime(System.currentTimeMillis());
fileMetadata.setUpdateTime(System.currentTimeMillis());
fileMetadata.setType(EngineType.JMX.name());
fileMetadataMapper.insert(fileMetadata);
FileContent fileContent = new FileContent();
fileContent.setFileId(fileMetadata.getId());
try {
fileContent.setFile(file.getBytes());
} catch (IOException e) {
MSException.throwException(e);
}
fileContentMapper.insert(fileContent);
return fileMetadata;
}
public String edit(EditTestPlanRequest request, MultipartFile file) {
// 新选择了一个文件删除原来的文件
if (file != null) {
fileService.deleteFileByTestId(request.getId());
final FileMetadata fileMetadata = saveFile(file);
FucTestFile fucTestFile = new FucTestFile();
fucTestFile.setTestId(request.getId());
fucTestFile.setFileId(fileMetadata.getId());
fucTestFileMapper.insert(fucTestFile);
}
final FucTestWithBLOBs fucTest = fucTestMapper.selectByPrimaryKey(request.getId());
if (fucTest == null) {
MSException.throwException("无法编辑测试,未找到测试:" + request.getId());
} else {
fucTest.setName(request.getName());
fucTest.setProjectId(request.getProjectId());
fucTest.setUpdateTime(System.currentTimeMillis());
fucTest.setDescription("todo");
fucTest.setRuntimeConfiguration(request.getRuntimeConfiguration());
fucTestMapper.updateByPrimaryKeySelective(fucTest);
}
return request.getId();
}
public void run(RunTestPlanRequest request) {
final FucTestWithBLOBs fucTest = fucTestMapper.selectByPrimaryKey(request.getId());
if (fucTest == null) {
MSException.throwException("无法运行测试,未找到测试:" + request.getId());
}
final FileMetadata fileMetadata = fileService.getFileMetadataByTestId(request.getId());
if (fileMetadata == null) {
MSException.throwException("无法运行测试无法获取测试文件元信息测试ID" + request.getId());
}
final FileContent fileContent = fileService.getFileContent(fileMetadata.getId());
if (fileContent == null) {
MSException.throwException("无法运行测试无法获取测试文件内容测试ID" + request.getId());
}
System.out.println("开始运行:" + fucTest.getName());
final Engine engine = EngineFactory.createEngine(fileMetadata.getType());
if (engine == null) {
MSException.throwException(String.format("无法运行测试未识别测试文件类型测试ID%s文件类型%s",
request.getId(),
fileMetadata.getType()));
}
boolean init = true;
try {
// init = engine.init(EngineFactory.createContext(fucTest, fileMetadata, fileContent));
} catch (Exception e) {
MSException.throwException(e);
}
if (!init) {
MSException.throwException(String.format("无法运行测试初始化运行环境失败测试ID%s", request.getId()));
}
// engine.start();
/// todo通过调用stop方法能够停止正在运行的engine但是如果部署了多个backend实例页面发送的停止请求如何定位到具体的engine
}
public List<FunctionalTestDTO> recentTestPlans(QueryTestPlanRequest request) {
// 查询最近的测试计划
request.setRecent(true);
return extFucTestMapper.list(request);
}
public FunctionalTestDTO get(String testId) {
QueryTestPlanRequest request = new QueryTestPlanRequest();
request.setId(testId);
List<FunctionalTestDTO> testDTOS = extFucTestMapper.list(request);
if (!CollectionUtils.isEmpty(testDTOS)) {
return testDTOS.get(0);
}
return null;
}
public String getRuntimeConfiguration(String testId) {
FucTestWithBLOBs fucTestWithBLOBs = fucTestMapper.selectByPrimaryKey(testId);
return Optional.ofNullable(fucTestWithBLOBs).orElse(new FucTestWithBLOBs()).getRuntimeConfiguration();
}
}

View File

@ -0,0 +1,41 @@
package io.metersphere.service;
import io.metersphere.base.domain.FucTestReport;
import io.metersphere.base.domain.FucTestReportExample;
import io.metersphere.base.mapper.FucTestReportMapper;
import io.metersphere.base.mapper.ext.ExtFunctionalTestReportMapper;
import io.metersphere.controller.request.ReportRequest;
import io.metersphere.dto.FunctionalReportDTO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class FunctionalReportService {
@Resource
private FucTestReportMapper fucTestReportMapper;
@Resource
private ExtFunctionalTestReportMapper extFunctionalTestReportMapper;
public List<FucTestReport> getRecentReportList(ReportRequest request) {
FucTestReportExample example = new FucTestReportExample();
example.setOrderByClause("update_time desc");
return fucTestReportMapper.selectByExample(example);
}
public List<FunctionalReportDTO> getReportList(ReportRequest request) {
return extFunctionalTestReportMapper.getReportList(request);
}
public void deleteReport(String reportId) {
fucTestReportMapper.deleteByPrimaryKey(reportId);
}
public FunctionalReportDTO getReportTestAndProInfo(String reportId) {
return extFunctionalTestReportMapper.getReportTestAndProInfo(reportId);
}
}

View File

@ -0,0 +1,38 @@
CREATE TABLE IF NOT EXISTS `fuc_test` (
`id` varchar(50) NOT NULL COMMENT 'Test ID',
`project_id` varchar(50) NOT NULL COMMENT 'Project ID this test belongs to',
`name` varchar(64) NOT NULL COMMENT 'Test name',
`description` varchar(255) DEFAULT NULL COMMENT 'Test description',
`runtime_configuration` longtext COMMENT 'Load configuration (JSON format)',
`schedule` longtext COMMENT 'Test schedule (cron list)',
`create_time` bigint(13) NOT NULL COMMENT 'Create timestamp',
`update_time` bigint(13) NOT NULL COMMENT 'Update timestamp',
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin;
CREATE TABLE IF NOT EXISTS `fuc_test_file` (
`test_id` varchar(64) DEFAULT NULL,
`file_id` varchar(64) DEFAULT NULL,
UNIQUE KEY `load_test_file_unique_key` (`test_id`, `file_id`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='功能测试和文件的关联表';
CREATE TABLE IF NOT EXISTS `fuc_test_report` (
`id` varchar(50) NOT NULL COMMENT 'Test report ID',
`test_id` varchar(50) NOT NULL COMMENT 'Test ID this test report belongs to',
`name` varchar(64) NOT NULL COMMENT 'Test report name',
`description` varchar(255) DEFAULT NULL COMMENT 'Test report name',
`content` longtext,
`create_time` bigint(13) NOT NULL COMMENT 'Create timestamp',
`update_time` bigint(13) NOT NULL COMMENT 'Update timestamp',
`status` varchar(64) NOT NULL COMMENT 'Status of this test run',
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin;

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -320 -47 )">
<path d="M 14.2299107142857 2.46655518394649 C 17.6339285714286 0.859345968041619 21.1960565476191 0.0464511334076489 24.9162946428571 0.0278706800445949 C 29.3805803571429 -0.00929022668153534 33.5751488095238 1.10553697510219 37.5 3.37235228539576 C 41.8154761904762 5.86213303604608 45.0892857142857 9.31809736157562 47.3214285714286 13.7402452619844 L 26.6183035714286 12.6532887402453 C 23.6421130952381 12.4860646599777 20.9077380952381 13.1781865477518 18.4151785714286 14.7296544035674 C 15.922619047619 16.2811222593831 14.2020089285714 18.4132292827945 13.2533482142857 21.1259754738016 L 5.55245535714286 9.30880713489409 C 7.93340773809524 6.35451505016723 10.8258928571429 4.07376439985135 14.2299107142857 2.46655518394649 Z M 0 25 C 0 20.0390189520624 1.35788690476191 15.4775176514307 4.07366071428571 11.3154960981048 L 13.4765625 29.79375696767 C 14.8158482142857 32.4507617985879 16.7782738095238 34.4667409884801 19.3638392857143 35.8416945373467 C 21.9494047619048 37.2166480862133 24.6744791666667 37.6347082868822 27.5390625 37.0958751393534 L 21.1216517857143 49.6655518394649 C 17.1781994047619 49.0523968784838 13.5974702380952 47.5891861761427 10.3794642857143 45.2759197324415 C 7.16145833333333 42.9626532887402 4.62704613095238 40.0269416573764 2.77622767857143 36.4687848383501 C 0.925409226190476 32.9106280193237 0 29.0876997398737 0 25 Z M 34.2354910714286 16.7502787068004 L 48.3258928571429 16.025641025641 C 49.4047619047619 18.8127090301003 49.9581473214286 21.6973244147157 49.9860491071429 24.6794871794872 C 50.0139508928571 27.6616499442586 49.5628720238095 30.5044593088071 48.6328125 33.2079152731327 C 47.7027529761905 35.9113712374582 46.2797619047619 38.4383128948346 44.3638392857143 40.788740245262 C 42.4479166666667 43.1391675956893 40.1599702380952 45.0854700854701 37.5 46.6276477146042 C 33.2217261904762 49.0988480118915 28.5900297619048 50.2043849869937 23.6049107142857 49.9442586399108 L 34.9051339285714 32.5808249721293 C 36.5420386904762 30.1467855815682 37.3093377976191 27.4479747305834 37.20703125 24.484392419175 C 37.104724702381 21.5208101077666 36.1142113095238 18.9427722036418 34.2354910714286 16.7502787068004 Z M 19.04296875 19.0496098104794 C 20.6891741071429 17.4052396878484 22.6748511904762 16.5830546265329 25 16.5830546265329 C 27.3251488095238 16.5830546265329 29.3108258928571 17.4052396878484 30.95703125 19.0496098104794 C 32.6032366071429 20.6939799331104 33.4263392857143 22.6774433296172 33.4263392857143 25 C 33.4263392857143 27.3225566703828 32.6032366071429 29.3060200668896 30.95703125 30.9503901895206 C 29.3108258928571 32.5947603121516 27.3251488095238 33.4169453734671 25 33.4169453734671 C 22.6748511904762 33.4169453734671 20.6891741071429 32.5947603121516 19.04296875 30.9503901895206 C 17.3967633928571 29.3060200668896 16.5736607142857 27.3225566703828 16.5736607142857 25 C 16.5736607142857 22.6774433296172 17.3967633928571 20.6939799331104 19.04296875 19.0496098104794 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 320 47 )" />
</g>
</svg>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -520 -47 )">
<path d="M 47.1819196428571 15.0852272727273 C 49.0606398809524 18.532196969697 50 22.2253787878788 50 26.1647727272727 C 50 27.2253787878788 49.9348958333333 28.2102272727273 49.8046875 29 L 17.6897321428571 29 C 17.6897321428571 31.8844696969697 18.7081473214286 34.1998106060606 20.7449776785714 36.0653409090909 C 22.7818080357143 37.9308712121212 25.1767113095238 38.8636363636364 27.9296875 38.8636363636364 C 29.7712053571429 38.8636363636364 31.4964657738095 38.4232954545455 33.10546875 37.5426136363636 C 34.7144717261905 36.6619318181818 35.9840029761905 35.4261363636364 36.9140625 33 L 48.7165178571429 33 C 47.6748511904762 36.8465909090909 46.089099702381 39.5075757575758 43.9592633928571 41.8181818181818 C 41.8294270833333 44.1287878787879 39.3415178571429 45.9138257575758 36.4955357142857 47.1732954545455 C 33.6495535714286 48.4327651515152 30.6640625 49.0625 27.5390625 49.0625 C 24.0606398809524 49.0625 20.7496279761905 48.2765151515152 17.6060267857143 46.7045454545455 C 13.3649553571429 48.9015151515152 9.70052083333333 50 6.61272321428571 50 C 2.20424107142857 50 0 47.5094696969697 0 42.5284090909091 C 0 40.3503787878788 0.418526785714286 37.7462121212121 1.25558035714286 34.7159090909091 C 1.5718005952381 33.5795454545455 2.58556547619048 31.4109848484848 4.296875 28.2102272727273 C 7.99851190476191 21.3920454545455 12.4162946428571 15.6534090909091 17.5502232142857 10.9943181818182 C 14.1276041666667 12.4905303030303 10.15625 15.842803030303 5.63616071428571 21.0511363636364 C 6.80803571428571 15.8617424242424 9.44475446428571 11.6051136363636 13.5463169642857 8.28125 C 17.6478794642857 4.95738636363636 22.3121279761905 3.29545454545455 27.5390625 3.29545454545455 C 28.0970982142857 3.29545454545455 28.515625 3.30492424242424 28.7946428571429 3.32386363636364 C 33.5379464285714 1.10795454545455 37.5651041666667 0 40.8761160714286 0 C 42.0665922619048 0 43.1454613095238 0.12310606060606 44.1127232142857 0.369318181818185 C 45.0799851190476 0.615530303030298 45.9588913690476 0.999053030303027 46.7494419642857 1.51988636363636 C 47.5399925595238 2.0407196969697 48.1584821428571 2.76515151515151 48.6049107142857 3.69318181818182 C 49.0513392857143 4.62121212121211 49.2745535714286 5.71022727272728 49.2745535714286 6.96022727272727 C 49.2745535714286 9.15719696969697 48.5770089285714 11.8655303030303 47.1819196428571 15.0852272727273 Z M 46.6238839285714 14.1193181818182 C 47.5725446428572 11.5625 48.046875 9.51704545454545 48.046875 7.98295454545455 C 48.046875 6.41098484848485 47.553943452381 5.16098484848485 46.5680803571429 4.23295454545455 C 45.5822172619048 3.30492424242424 44.3080357142857 2.84090909090909 42.7455357142857 2.84090909090909 C 40.7366071428571 2.84090909090909 38.374255952381 3.50378787878788 35.6584821428571 4.82954545454545 C 37.9092261904762 5.71969696969697 39.9786086309524 6.96496212121211 41.8666294642857 8.56534090909091 C 43.7546502976191 10.1657196969697 45.3404017857143 12.0170454545455 46.6238839285714 14.1193181818182 Z M 6.30580357142857 33.6931818181818 C 4.48288690476191 37.5757575757576 3.57142857142857 40.719696969697 3.57142857142857 43.125 C 3.57142857142857 44.7537878787879 4.02250744047619 46.0085227272727 4.92466517857143 46.8892045454545 C 5.82682291666667 47.7698863636364 7.07775297619048 48.2102272727273 8.67745535714286 48.2102272727273 C 10.8165922619048 48.2102272727273 13.2905505952381 47.4242424242424 16.0993303571429 45.8522727272727 C 13.8299851190476 44.4886363636364 11.8443080357143 42.7556818181818 10.1422991071429 40.6534090909091 C 8.44029017857143 38.5511363636364 7.16145833333333 36.2310606060606 6.30580357142857 33.6931818181818 Z M 20.7728794642857 16.1363636363636 C 18.7732514880952 17.9356060606061 17.7269345238095 20.1799242424242 17.6339285714286 23 L 37.9464285714286 23 C 37.8534226190476 20.1799242424242 36.8024553571429 17.9356060606061 34.7935267857143 16.1363636363636 C 32.7845982142857 14.3371212121212 30.4501488095238 13.4375 27.7901785714286 13.4375 C 25.1116071428571 13.4375 22.7725074404762 14.3371212121212 20.7728794642857 16.1363636363636 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 520 47 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -620 -47 )">
<path d="M 34.0262276785714 1.68805803571428 C 36.8629092261905 2.79482886904762 39.4066220238095 4.35267857142857 41.6573660714286 6.36160714285715 C 38.5881696428571 4.31547619047619 35.249255952381 3.29241071428572 31.640625 3.29241071428572 C 28.7574404761905 3.29241071428572 26.0323660714286 3.97135416666666 23.4654017857143 5.32924107142857 C 20.8984375 6.68712797619047 18.6662946428571 8.54724702380952 16.7689732142857 10.9095982142857 C 15.3738839285714 12.6395089285714 14.262462797619 14.6670386904762 13.4347098214286 16.9921875 C 12.6069568452381 19.3173363095238 12.1558779761905 21.7912946428571 12.0814732142857 24.4140625 L 12.0814732142857 25.5859375 C 12.1558779761905 28.2087053571429 12.6069568452381 30.6826636904762 13.4347098214286 33.0078125 C 14.262462797619 35.3329613095238 15.3738839285714 37.3604910714286 16.7689732142857 39.0904017857143 C 18.6662946428571 41.4527529761905 20.8984375 43.3128720238095 23.4654017857143 44.6707589285714 C 26.0323660714286 46.0286458333333 28.7574404761905 46.7075892857143 31.640625 46.7075892857143 C 35.249255952381 46.7075892857143 38.5881696428571 45.6845238095238 41.6573660714286 43.6383928571429 C 39.4066220238095 45.6473214285714 36.8536086309524 47.2098214285714 33.9983258928571 48.3258928571429 C 31.1430431547619 49.4419642857143 28.1436011904762 50 25 50 C 24.4605654761905 50 24.0606398809524 49.9906994047619 23.8002232142857 49.9720982142857 C 20.5450148809524 49.8232886904762 17.4479166666667 49.0606398809524 14.5089285714286 47.6841517857143 C 11.5699404761905 46.3076636904762 9.04017857142857 44.5126488095238 6.91964285714286 42.2991071428571 C 4.79910714285714 40.0855654761905 3.1156994047619 37.4720982142857 1.86941964285714 34.4587053571429 C 0.623139880952381 31.4453125 0 28.2924107142857 0 25 C 0 21.6145833333333 0.660342261904762 18.3779761904762 1.98102678571429 15.2901785714286 C 3.30171130952381 12.2023809523809 5.078125 9.54241071428572 7.31026785714286 7.31026785714285 C 9.54241071428571 5.078125 12.202380952381 3.30171130952381 15.2901785714286 1.98102678571428 C 18.3779761904762 0.660342261904762 21.6145833333333 0 25 0 L 25.0837053571429 0 C 28.2087053571429 0.0186011904761862 31.1895461309524 0.581287202380948 34.0262276785714 1.68805803571428 Z M 47.8934151785714 14.9274553571429 C 49.2978050595238 18.0896577380952 50 21.4471726190476 50 25 C 50 28.5714285714286 49.2838541666667 31.9428943452381 47.8515625 35.1143973214286 C 46.4192708333333 38.285900297619 44.4382440476191 41.0435267857143 41.9084821428571 43.3872767857143 C 39.9739583333333 44.5591517857143 37.9092261904762 45.1450892857143 35.7142857142857 45.1450892857143 C 33.1659226190476 45.1450892857143 30.7942708333333 44.3638392857143 28.5993303571429 42.8013392857143 C 31.4639136904762 41.7596726190476 33.8216145833333 39.5926339285714 35.6724330357143 36.3002232142857 C 37.5232514880952 33.0078125 38.4486607142857 29.2410714285714 38.4486607142857 25 C 38.4486607142857 20.7775297619048 37.5279017857143 17.0200892857143 35.6863839285714 13.7276785714286 C 33.8448660714286 10.4352678571429 31.4918154761905 8.25892857142857 28.6272321428571 7.19866071428572 C 30.8407738095238 5.6547619047619 33.203125 4.8828125 35.7142857142857 4.8828125 C 37.9278273809524 4.8828125 40.0297619047619 5.48735119047619 42.0200892857143 6.69642857142857 C 44.53125 9.02157738095238 46.4890252976191 11.7652529761905 47.8934151785714 14.9274553571429 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 620 47 )" />
</g>
</svg>

View File

@ -23,6 +23,7 @@ import PerformanceTestHome from "../../performance/home/PerformanceTestHome";
import FunctionalTestPlan from "../../functional/plan/FunctionalTestPlan";
import FunctionalTestHome from "../../functional/home/FunctionalTestHome";
import PerformanceReportView from "../../performance/report/PerformanceReportView";
import FunctionalReportView from "../../functional/report/FunctionalReportView";
Vue.use(VueRouter);
@ -119,6 +120,11 @@ const router = new VueRouter({
path: "report/:type",
name: "fucReport",
component: FunctionalTestReport
},
{
path: "report/view/:reportId",
name: "fucReportView",
component: FunctionalReportView
}
]
},

View File

@ -25,7 +25,7 @@
<functional-test-scene-config :test-plan="testPlan" />
</el-tab-pane>
<el-tab-pane :label="$t('load_test.runtime_config')">
<functional-test-runtime-config :test-plan="testPlan" />
<functional-test-runtime-config :test-plan="testPlan" ref="runtimeConfig"/>
</el-tab-pane>
</el-tabs>
</el-card>
@ -48,23 +48,19 @@
result: {},
testPlan: {},
listProjectPath: "/project/listAll",
savePath: "/testplan/save",
editPath: "/testplan/edit",
runPath: "/testplan/run",
savePath: "/functional/plan/save",
editPath: "/functional/plan/edit",
runPath: "/functional/plan/run",
projects: [],
active: '0',
tabs: [{
title: this.$t('load_test.basic_config'),
id: '0',
component: 'BasicConfig'
component: 'FunctionalTestSceneConfig'
}, {
title: this.$t('load_test.pressure_config'),
title: this.$t('load_test.runtime_config'),
id: '1',
component: 'PressureConfig'
}, {
title: this.$t('load_test.advanced_config'),
id: '2',
component: 'AdvancedConfig'
component: 'FunctionalTestRuntimeConfig'
}]
}
},
@ -77,7 +73,7 @@
}
let testId = to.path.split('/')[4]; // find testId
if (testId) {
this.$get('/testplan/get/' + testId, response => {
this.$get('/functional/plan/get/' + testId, response => {
this.testPlan = response.data;
});
}
@ -87,7 +83,7 @@
created() {
let testId = this.$route.path.split('/')[4];
if (testId) {
this.$get('/testplan/get/' + testId, response => {
this.$get('/functional/plan/get/' + testId, response => {
this.testPlan = response.data;
});
}
@ -112,8 +108,8 @@
message: this.$t('commons.save_success'),
type: 'success'
});
this.$refs.advancedConfig.cancelAllEdit();
this.$router.push({path: '/loadtest/all'})
this.$refs.runtimeConfig.cancelAllEdit();
this.$router.push({path: '/functional/plan/all'})
});
},
saveAndRun() {
@ -145,10 +141,8 @@
if (!this.testPlan.file.id) {
formData.append("file", this.testPlan.file);
}
//
this.testPlan.loadConfiguration = JSON.stringify(this.$refs.pressureConfig.convertProperty());
//
this.testPlan.advancedConfiguration = JSON.stringify(this.$refs.advancedConfig.configurations());
this.testPlan.runtimeConfiguration = JSON.stringify(this.$refs.runtimeConfig.configurations());
// filejson
let requestJson = JSON.stringify(this.testPlan, function (key, value) {
@ -169,7 +163,7 @@
};
},
cancel() {
this.$router.push({path: '/'})
this.$router.push({path: '/functional/plan/all'})
},
validTestPlan() {
if (!this.testPlan.name) {
@ -199,7 +193,7 @@
return false;
}
if (!this.$refs.advancedConfig.validConfig()) {
if (!this.$refs.runtimeConfig.validConfig()) {
return false;
}

View File

@ -81,8 +81,8 @@
data() {
return {
result: {},
queryPath: "/testplan/list",
deletePath: "/testplan/delete",
queryPath: "/functional/plan/list",
deletePath: "/functional/plan/delete",
condition: "",
projectId: null,
tableData: [],
@ -139,7 +139,7 @@
},
handleEdit(testPlan) {
this.$router.push({
path: '/performance/plan/edit/' + testPlan.id,
path: '/functional/plan/edit/' + testPlan.id,
})
},
handleDelete(testPlan) {

View File

@ -1,16 +1,121 @@
<template>
<div>
<el-row>
<el-col :span="5" :offset="6">
<span>浏览器</span>
</el-col>
</el-row>
<el-row >
<el-col :span="20" :offset="2">
<el-radio-group v-model="browser.value" class="browser-radio">
<el-radio v-for="item in browser.options" :key="item.label" :label="item.label">
<img :src="item.url"/>
</el-radio>
</el-radio-group>
</el-col>
</el-row>
<el-row>
<el-col :span="5" :offset="6">
<span>资源池</span>
</el-col>
</el-row>
<el-row>
<el-col :span="18" :offset="1">
<el-select v-model="resourcePool.value" filterable placeholder="请选择">
<el-option
v-for="item in resourcePool.options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: "FunctionalTestRuntimeConfig"
name: "FunctionalTestRuntimeConfig",
data() {
return {
resourcePool: {
options: [
{
value: '选项1',
label: '资源池1'
},
{
value: '选项2',
label: '资源池3'
},
{
value: '选项3',
label: '资源池3'
}],
value: ''
},
browser: {
options: [{
url: require('@/assets/browser/firefox.svg'),
label: 'firefox',
},
{
url: require('@/assets/browser/chrome.svg'),
label: 'chrome',
},
{
url: require('@/assets/browser/ie.svg'),
label: 'ie',
},
{
url: require('@/assets/browser/opera.svg'),
label: 'opera',
}
],
value: 'firefox'
}
}
},
methods: {
validConfig() {
if (this.resourcePool.value == '') {
this.$message.error(this.$t('fuc_test.select_resource_pool'));
return false;
}
return true;
},
configurations() {
return {
resourcePool: this.resourcePool,
browser: this.browser
}
},
cancelAllEdit() {
this.browser.value = 'firefox';
this.resourcePool.value = '';
}
}
}
</script>
<style scoped>
.el-row {
margin-top: 30px;
margin-bottom: 30px;
}
span {
font-size: 20px;
font-weight: bold;
color: dimgray;
}
</style>

View File

@ -1,16 +1,194 @@
<template>
<div v-loading="result.loading">
<el-upload
accept=".jmx"
drag
action=""
:limit="1"
:show-file-list="false"
:before-upload="beforeUpload"
:http-request="handleUpload"
:on-exceed="handleExceed"
:file-list="fileList">
<i class="el-icon-upload"/>
<div class="el-upload__text" v-html="$t('load_test.upload_tips')"></div>
<div class="el-upload__tip" slot="tip">{{$t('load_test.upload_type')}}</div>
</el-upload>
<div>
<el-table class="basic-config" :data="tableData">
<el-table-column
prop="name"
:label="$t('load_test.file_name')">
</el-table-column>
<el-table-column
prop="size"
:label="$t('load_test.file_size')">
</el-table-column>
<el-table-column
prop="type"
:label="$t('load_test.file_type')">
</el-table-column>
<el-table-column
:label="$t('load_test.last_modify_time')">
<template slot-scope="scope">
<i class="el-icon-time"/>
<span class="last-modified">{{ scope.row.lastModified | timestampFormatDate }}</span>
</template>
</el-table-column>
<el-table-column
prop="status"
:label="$t('load_test.file_status')">
</el-table-column>
<el-table-column
:label="$t('commons.operating')">
<template slot-scope="scope">
<el-button @click="handleDownload(scope.row)" :disabled="!scope.row.id" type="primary" icon="el-icon-download"
size="mini" circle/>
<el-button @click="handleDelete(scope.row, scope.$index)" type="danger" icon="el-icon-delete" size="mini"
circle/>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "FunctionalTestSceneConfig"
}
import {Message} from "element-ui";
export default {
name: "FunctionalTestSceneConfig",
props: ["testPlan"],
data() {
return {
result: {},
getFileMetadataPath: "/functional/plan/file/metadata",
jmxDownloadPath: '/functional/plan/file/download',
jmxDeletePath: '/functional/plan/file/delete',
fileList: [],
tableData: [],
};
},
created() {
if (this.testPlan.id) {
this.getFileMetadata(this.testPlan)
}
},
watch: {
testPlan() {
if (this.testPlan.id) {
this.getFileMetadata(this.testPlan)
}
}
},
methods: {
getFileMetadata(testPlan) {
this.fileList = [];//
this.tableData = [];//
this.result = this.$get(this.getFileMetadataPath + "/" + testPlan.id, response => {
let file = response.data;
if (!file) {
Message.error({message: this.$t('load_test.related_file_not_found'), showClose: true});
return;
}
this.testPlan.file = file;
this.fileList.push({
id: file.id,
name: file.name
});
this.tableData.push({
id: file.id,
name: file.name,
size: file.size + 'Byte', /// todo: ByteKBMB
type: 'JMX',
lastModified: file.updateTime,
status: 'todo',
});
})
},
beforeUpload(file) {
if (!this.fileValidator(file)) {
/// todo:
return false;
}
this.tableData.push({
name: file.name,
size: file.size + 'Byte', /// todo: ByteKBMB
type: 'JMX',
lastModified: file.lastModified,
status: 'todo',
});
return true;
},
handleUpload(uploadResources) {
this.testPlan.file = uploadResources.file;
},
handleDownload(file) {
let data = {
name: file.name,
id: file.id,
};
let config = {
url: this.jmxDownloadPath,
method: 'post',
data: data,
responseType: 'blob'
};
this.result = this.$request(config).then(response => {
const content = response.data;
const blob = new Blob([content]);
if ("download" in document.createElement("a")) {
// IE
// chrome/firefox
let aTag = document.createElement('a');
aTag.download = file.name;
aTag.href = URL.createObjectURL(blob);
aTag.click();
URL.revokeObjectURL(aTag.href)
} else {
// IE10+
navigator.msSaveBlob(blob, this.filename)
}
}).catch(e => {
Message.error({message: e.message, showClose: true});
});
},
handleDelete(file, index) {
this.$alert(this.$t('commons.delete_file_confirm') + file.name + "", '', {
confirmButtonText: this.$t('commons.confirm'),
callback: (action) => {
if (action === 'confirm') {
this._handleDelete(file, index);
}
}
});
},
_handleDelete(file, index) {
this.fileList.splice(index, 1);
this.tableData.splice(index, 1);
this.testPlan.file = null;
},
handleExceed() {
this.$message.error(this.$t('load_test.delete_file'));
},
fileValidator(file) {
/// todo:
return file.size > 0;
},
},
}
</script>
<style scoped>
.basic-config {
width: 100%
}
.last-modified {
margin-left: 5px;
}
</style>

View File

@ -15,13 +15,13 @@
import {ROLE_TEST_MANAGER, ROLE_TEST_USER, ROLE_TEST_VIEWER} from "../../../../common/constants";
export default {
name: "PerformanceRecentReport",
name: "FunctionalRecentReport",
mounted() {
const rolesString = localStorage.getItem("roles");
const roles = rolesString.split(',');
if (roles.indexOf(ROLE_TEST_MANAGER) > -1 || roles.indexOf(ROLE_TEST_USER) > -1 || roles.indexOf(ROLE_TEST_VIEWER) > -1) {
this.$get('/report/recent/5', (response) => {
this.$get('/functional/report/recent/5', (response) => {
this.recentReports = response.data;
});
}

View File

@ -0,0 +1,127 @@
<template>
<div v-loading="result.loading" class="report-view-container">
<div class="main-content">
<el-card>
<el-row>
<el-col :span="16">
<el-row>
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">{{projectName}}</el-breadcrumb-item>
<el-breadcrumb-item>{{testName}}</el-breadcrumb-item>
<el-breadcrumb-item>{{reportName}}</el-breadcrumb-item>
</el-breadcrumb>
</el-row>
<el-row class="ms-report-view-btns">
<el-button type="primary" plain size="mini">立即停止</el-button>
<el-button type="success" plain size="mini">再次执行</el-button>
<el-button type="info" plain size="mini">导出</el-button>
<el-button type="warning" plain size="mini">比较</el-button>
</el-row>
</el-col>
<el-col :span="8">
<span class="ms-report-time-desc">
持续时间 30 分钟
</span>
<span class="ms-report-time-desc">
开始时间 2020-3-10 12:00:00
</span>
<span class="ms-report-time-desc">
结束时间 2020-3-10 12:30:00
</span>
</el-col>
</el-row>
<el-divider></el-divider>
<el-tabs v-model="active" type="border-card" :stretch="true">
<el-tab-pane :label="$t('report.test_log_details')">
<ms-report-log-details />
</el-tab-pane>
</el-tabs>
</el-card>
</div>
</div>
</template>
<script>
import MsReportLogDetails from './components/LogDetails';
export default {
name: "FunctionalReportView",
components: {
MsReportLogDetails
},
data() {
return {
result: {},
active: '0',
reportId: '',
reportName: '',
testName: '',
projectName: ''
}
},
methods: {
initBreadcrumb() {
if(this.reportId){
this.result = this.$get("/functional/report/test/pro/info/" + this.reportId, res => {
let data = res.data;
if(data){
this.reportName = data.name;
this.testName = data.testName;
this.projectName = data.projectName;
}
})
}
}
},
created() {
this.reportId = this.$route.path.split('/')[4];
this.initBreadcrumb();
},
watch: {
'$route'(to) {
let reportId = to.path.split('/')[4];
if(reportId){
this.$get("/functional/report/test/pro/info/" + reportId, response => {
let data = response.data;
if(data){
this.reportName = data.name;
this.testName = data.testName;
this.projectName = data.projectName;
}
});
}
}
}
}
</script>
<style scoped>
.report-view-container {
float: none;
text-align: center;
padding: 15px;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.report-view-container .main-content {
margin: 0 auto;
width: 100%;
max-width: 1200px;
}
.ms-report-view-btns {
margin-top: 15px;
}
.ms-report-time-desc {
text-align: left;
display: block;
color: #5C7878;
}
</style>

View File

@ -88,8 +88,8 @@
data() {
return {
result: {},
queryPath: "/report/list/all",
deletePath: "/report/delete/",
queryPath: "/functional/report/list/all",
deletePath: "/functional/report/delete/",
condition: "",
projectId: null,
tableData: [],

View File

@ -0,0 +1,15 @@
<template>
<div>
LogDetails
</div>
</template>
<script>
export default {
name: "LogDetails"
}
</script>
<style scoped>
</style>

View File

@ -158,6 +158,9 @@ export default {
'separated_by_commas': 'Separated by commas',
'create': 'Create Test',
},
fuc_test: {
'select_resource_pool': 'Please select resource pool',
},
i18n: {
'home': 'Home',
}

View File

@ -158,6 +158,9 @@ export default {
'separated_by_commas': '按逗号分隔',
'create': '创建测试',
},
fuc_test: {
'select_resource_pool': '请选择资源池',
},
i18n: {
'home': '首页',
}