Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
1cae0333f9
|
@ -39,6 +39,12 @@
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter</artifactId>
|
<artifactId>spring-boot-starter</artifactId>
|
||||||
|
@ -128,12 +134,6 @@
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>slf4j-simple</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.opencsv</groupId>
|
|
||||||
<artifactId>opencsv</artifactId>
|
|
||||||
<version>5.1</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- jmeter -->
|
<!-- jmeter -->
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>org.apache.jmeter</groupId>-->
|
<!-- <groupId>org.apache.jmeter</groupId>-->
|
||||||
|
|
|
@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
|
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
|
||||||
@SpringBootApplication(exclude = {QuartzAutoConfiguration.class})
|
@SpringBootApplication(exclude = {QuartzAutoConfiguration.class})
|
||||||
@ServletComponentScan
|
@ServletComponentScan
|
||||||
|
@ -14,6 +15,7 @@ import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||||
KafkaProperties.class,
|
KafkaProperties.class,
|
||||||
JmeterProperties.class
|
JmeterProperties.class
|
||||||
})
|
})
|
||||||
|
@PropertySource(value = {"file:/opt/metersphere/conf/metersphere.properties"}, encoding = "UTF-8", ignoreResourceNotFound = true)
|
||||||
public class Application {
|
public class Application {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(Application.class, args);
|
SpringApplication.run(Application.class, args);
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class LoadTestReportLog implements Serializable {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String reportId;
|
||||||
|
|
||||||
|
private String resourceId;
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReportId() {
|
||||||
|
return reportId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReportId(String reportId) {
|
||||||
|
this.reportId = reportId == null ? null : reportId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResourceId() {
|
||||||
|
return resourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResourceId(String resourceId) {
|
||||||
|
this.resourceId = resourceId == null ? null : resourceId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content == null ? null : content.trim();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,400 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoadTestReportLogExample {
|
||||||
|
protected String orderByClause;
|
||||||
|
|
||||||
|
protected boolean distinct;
|
||||||
|
|
||||||
|
protected List<Criteria> oredCriteria;
|
||||||
|
|
||||||
|
public LoadTestReportLogExample() {
|
||||||
|
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(Long value) {
|
||||||
|
addCriterion("id =", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotEqualTo(Long value) {
|
||||||
|
addCriterion("id <>", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThan(Long value) {
|
||||||
|
addCriterion("id >", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id >=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThan(Long value) {
|
||||||
|
addCriterion("id <", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id <=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdIn(List<Long> values) {
|
||||||
|
addCriterion("id in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotIn(List<Long> values) {
|
||||||
|
addCriterion("id not in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id between", value1, value2, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id not between", value1, value2, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdIsNull() {
|
||||||
|
addCriterion("report_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdIsNotNull() {
|
||||||
|
addCriterion("report_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdEqualTo(String value) {
|
||||||
|
addCriterion("report_id =", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdNotEqualTo(String value) {
|
||||||
|
addCriterion("report_id <>", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdGreaterThan(String value) {
|
||||||
|
addCriterion("report_id >", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("report_id >=", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdLessThan(String value) {
|
||||||
|
addCriterion("report_id <", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("report_id <=", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdLike(String value) {
|
||||||
|
addCriterion("report_id like", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdNotLike(String value) {
|
||||||
|
addCriterion("report_id not like", value, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdIn(List<String> values) {
|
||||||
|
addCriterion("report_id in", values, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdNotIn(List<String> values) {
|
||||||
|
addCriterion("report_id not in", values, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("report_id between", value1, value2, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("report_id not between", value1, value2, "reportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdIsNull() {
|
||||||
|
addCriterion("resource_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdIsNotNull() {
|
||||||
|
addCriterion("resource_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdEqualTo(String value) {
|
||||||
|
addCriterion("resource_id =", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdNotEqualTo(String value) {
|
||||||
|
addCriterion("resource_id <>", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdGreaterThan(String value) {
|
||||||
|
addCriterion("resource_id >", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("resource_id >=", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdLessThan(String value) {
|
||||||
|
addCriterion("resource_id <", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("resource_id <=", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdLike(String value) {
|
||||||
|
addCriterion("resource_id like", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdNotLike(String value) {
|
||||||
|
addCriterion("resource_id not like", value, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdIn(List<String> values) {
|
||||||
|
addCriterion("resource_id in", values, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdNotIn(List<String> values) {
|
||||||
|
addCriterion("resource_id not in", values, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("resource_id between", value1, value2, "resourceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andResourceIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("resource_id not between", value1, value2, "resourceId");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class TestCaseReport implements Serializable {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String planId;
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name == null ? null : name.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlanId() {
|
||||||
|
return planId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlanId(String planId) {
|
||||||
|
this.planId = planId == null ? null : planId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content == null ? null : content.trim();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,400 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TestCaseReportExample {
|
||||||
|
protected String orderByClause;
|
||||||
|
|
||||||
|
protected boolean distinct;
|
||||||
|
|
||||||
|
protected List<Criteria> oredCriteria;
|
||||||
|
|
||||||
|
public TestCaseReportExample() {
|
||||||
|
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(Long value) {
|
||||||
|
addCriterion("id =", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotEqualTo(Long value) {
|
||||||
|
addCriterion("id <>", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThan(Long value) {
|
||||||
|
addCriterion("id >", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id >=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThan(Long value) {
|
||||||
|
addCriterion("id <", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id <=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdIn(List<Long> values) {
|
||||||
|
addCriterion("id in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotIn(List<Long> values) {
|
||||||
|
addCriterion("id not in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id between", value1, value2, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id not between", value1, value2, "id");
|
||||||
|
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 andPlanIdIsNull() {
|
||||||
|
addCriterion("plan_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdIsNotNull() {
|
||||||
|
addCriterion("plan_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdEqualTo(String value) {
|
||||||
|
addCriterion("plan_id =", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdNotEqualTo(String value) {
|
||||||
|
addCriterion("plan_id <>", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdGreaterThan(String value) {
|
||||||
|
addCriterion("plan_id >", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("plan_id >=", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdLessThan(String value) {
|
||||||
|
addCriterion("plan_id <", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("plan_id <=", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdLike(String value) {
|
||||||
|
addCriterion("plan_id like", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdNotLike(String value) {
|
||||||
|
addCriterion("plan_id not like", value, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdIn(List<String> values) {
|
||||||
|
addCriterion("plan_id in", values, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdNotIn(List<String> values) {
|
||||||
|
addCriterion("plan_id not in", values, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("plan_id between", value1, value2, "planId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andPlanIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("plan_id not between", value1, value2, "planId");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class TestCaseReportTemplate implements Serializable {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String workspaceId;
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name == null ? null : name.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkspaceId() {
|
||||||
|
return workspaceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkspaceId(String workspaceId) {
|
||||||
|
this.workspaceId = workspaceId == null ? null : workspaceId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content == null ? null : content.trim();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,400 @@
|
||||||
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TestCaseReportTemplateExample {
|
||||||
|
protected String orderByClause;
|
||||||
|
|
||||||
|
protected boolean distinct;
|
||||||
|
|
||||||
|
protected List<Criteria> oredCriteria;
|
||||||
|
|
||||||
|
public TestCaseReportTemplateExample() {
|
||||||
|
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(Long value) {
|
||||||
|
addCriterion("id =", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotEqualTo(Long value) {
|
||||||
|
addCriterion("id <>", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThan(Long value) {
|
||||||
|
addCriterion("id >", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdGreaterThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id >=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThan(Long value) {
|
||||||
|
addCriterion("id <", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdLessThanOrEqualTo(Long value) {
|
||||||
|
addCriterion("id <=", value, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdIn(List<Long> values) {
|
||||||
|
addCriterion("id in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotIn(List<Long> values) {
|
||||||
|
addCriterion("id not in", values, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id between", value1, value2, "id");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIdNotBetween(Long value1, Long value2) {
|
||||||
|
addCriterion("id not between", value1, value2, "id");
|
||||||
|
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 andWorkspaceIdIsNull() {
|
||||||
|
addCriterion("workspace_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdIsNotNull() {
|
||||||
|
addCriterion("workspace_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdEqualTo(String value) {
|
||||||
|
addCriterion("workspace_id =", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdNotEqualTo(String value) {
|
||||||
|
addCriterion("workspace_id <>", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdGreaterThan(String value) {
|
||||||
|
addCriterion("workspace_id >", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("workspace_id >=", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdLessThan(String value) {
|
||||||
|
addCriterion("workspace_id <", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("workspace_id <=", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdLike(String value) {
|
||||||
|
addCriterion("workspace_id like", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdNotLike(String value) {
|
||||||
|
addCriterion("workspace_id not like", value, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdIn(List<String> values) {
|
||||||
|
addCriterion("workspace_id in", values, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdNotIn(List<String> values) {
|
||||||
|
addCriterion("workspace_id not in", values, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("workspace_id between", value1, value2, "workspaceId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andWorkspaceIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("workspace_id not between", value1, value2, "workspaceId");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package io.metersphere.base.mapper;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.LoadTestReportLog;
|
||||||
|
import io.metersphere.base.domain.LoadTestReportLogExample;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface LoadTestReportLogMapper {
|
||||||
|
long countByExample(LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
int deleteByExample(LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
int deleteByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int insert(LoadTestReportLog record);
|
||||||
|
|
||||||
|
int insertSelective(LoadTestReportLog record);
|
||||||
|
|
||||||
|
List<LoadTestReportLog> selectByExampleWithBLOBs(LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
List<LoadTestReportLog> selectByExample(LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
LoadTestReportLog selectByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int updateByExampleSelective(@Param("record") LoadTestReportLog record, @Param("example") LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
int updateByExampleWithBLOBs(@Param("record") LoadTestReportLog record, @Param("example") LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
int updateByExample(@Param("record") LoadTestReportLog record, @Param("example") LoadTestReportLogExample example);
|
||||||
|
|
||||||
|
int updateByPrimaryKeySelective(LoadTestReportLog record);
|
||||||
|
|
||||||
|
int updateByPrimaryKeyWithBLOBs(LoadTestReportLog record);
|
||||||
|
|
||||||
|
int updateByPrimaryKey(LoadTestReportLog record);
|
||||||
|
}
|
|
@ -0,0 +1,234 @@
|
||||||
|
<?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.LoadTestReportLogMapper">
|
||||||
|
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
|
<result column="report_id" jdbcType="VARCHAR" property="reportId" />
|
||||||
|
<result column="resource_id" jdbcType="VARCHAR" property="resourceId" />
|
||||||
|
</resultMap>
|
||||||
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
<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, report_id, resource_id
|
||||||
|
</sql>
|
||||||
|
<sql id="Blob_Column_List">
|
||||||
|
content
|
||||||
|
</sql>
|
||||||
|
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.LoadTestReportLogExample" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from load_test_report_log
|
||||||
|
<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.LoadTestReportLogExample" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from load_test_report_log
|
||||||
|
<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.Long" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from load_test_report_log
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</select>
|
||||||
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||||
|
delete from load_test_report_log
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.LoadTestReportLogExample">
|
||||||
|
delete from load_test_report_log
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
<insert id="insert" parameterType="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
insert into load_test_report_log (id, report_id, resource_id,
|
||||||
|
content)
|
||||||
|
values (#{id,jdbcType=BIGINT}, #{reportId,jdbcType=VARCHAR}, #{resourceId,jdbcType=VARCHAR},
|
||||||
|
#{content,jdbcType=LONGVARCHAR})
|
||||||
|
</insert>
|
||||||
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
insert into load_test_report_log
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="id != null">
|
||||||
|
id,
|
||||||
|
</if>
|
||||||
|
<if test="reportId != null">
|
||||||
|
report_id,
|
||||||
|
</if>
|
||||||
|
<if test="resourceId != null">
|
||||||
|
resource_id,
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content,
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="id != null">
|
||||||
|
#{id,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
<if test="reportId != null">
|
||||||
|
#{reportId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="resourceId != null">
|
||||||
|
#{resourceId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
#{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
<select id="countByExample" parameterType="io.metersphere.base.domain.LoadTestReportLogExample" resultType="java.lang.Long">
|
||||||
|
select count(*) from load_test_report_log
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
<update id="updateByExampleSelective" parameterType="map">
|
||||||
|
update load_test_report_log
|
||||||
|
<set>
|
||||||
|
<if test="record.id != null">
|
||||||
|
id = #{record.id,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
<if test="record.reportId != null">
|
||||||
|
report_id = #{record.reportId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="record.resourceId != null">
|
||||||
|
resource_id = #{record.resourceId,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 load_test_report_log
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
report_id = #{record.reportId,jdbcType=VARCHAR},
|
||||||
|
resource_id = #{record.resourceId,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 load_test_report_log
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
report_id = #{record.reportId,jdbcType=VARCHAR},
|
||||||
|
resource_id = #{record.resourceId,jdbcType=VARCHAR}
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
update load_test_report_log
|
||||||
|
<set>
|
||||||
|
<if test="reportId != null">
|
||||||
|
report_id = #{reportId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="resourceId != null">
|
||||||
|
resource_id = #{resourceId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
update load_test_report_log
|
||||||
|
set report_id = #{reportId,jdbcType=VARCHAR},
|
||||||
|
resource_id = #{resourceId,jdbcType=VARCHAR},
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.LoadTestReportLog">
|
||||||
|
update load_test_report_log
|
||||||
|
set report_id = #{reportId,jdbcType=VARCHAR},
|
||||||
|
resource_id = #{resourceId,jdbcType=VARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
</mapper>
|
|
@ -0,0 +1,36 @@
|
||||||
|
package io.metersphere.base.mapper;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReport;
|
||||||
|
import io.metersphere.base.domain.TestCaseReportExample;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
public interface TestCaseReportMapper {
|
||||||
|
long countByExample(TestCaseReportExample example);
|
||||||
|
|
||||||
|
int deleteByExample(TestCaseReportExample example);
|
||||||
|
|
||||||
|
int deleteByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int insert(TestCaseReport record);
|
||||||
|
|
||||||
|
int insertSelective(TestCaseReport record);
|
||||||
|
|
||||||
|
List<TestCaseReport> selectByExampleWithBLOBs(TestCaseReportExample example);
|
||||||
|
|
||||||
|
List<TestCaseReport> selectByExample(TestCaseReportExample example);
|
||||||
|
|
||||||
|
TestCaseReport selectByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int updateByExampleSelective(@Param("record") TestCaseReport record, @Param("example") TestCaseReportExample example);
|
||||||
|
|
||||||
|
int updateByExampleWithBLOBs(@Param("record") TestCaseReport record, @Param("example") TestCaseReportExample example);
|
||||||
|
|
||||||
|
int updateByExample(@Param("record") TestCaseReport record, @Param("example") TestCaseReportExample example);
|
||||||
|
|
||||||
|
int updateByPrimaryKeySelective(TestCaseReport record);
|
||||||
|
|
||||||
|
int updateByPrimaryKeyWithBLOBs(TestCaseReport record);
|
||||||
|
|
||||||
|
int updateByPrimaryKey(TestCaseReport record);
|
||||||
|
}
|
|
@ -0,0 +1,234 @@
|
||||||
|
<?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.TestCaseReportMapper">
|
||||||
|
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
|
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||||
|
<result column="plan_id" jdbcType="VARCHAR" property="planId" />
|
||||||
|
</resultMap>
|
||||||
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
<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, name, plan_id
|
||||||
|
</sql>
|
||||||
|
<sql id="Blob_Column_List">
|
||||||
|
content
|
||||||
|
</sql>
|
||||||
|
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.TestCaseReportExample" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from test_case_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.TestCaseReportExample" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from test_case_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.Long" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from test_case_report
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</select>
|
||||||
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||||
|
delete from test_case_report
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.TestCaseReportExample">
|
||||||
|
delete from test_case_report
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
<insert id="insert" parameterType="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
SELECT LAST_INSERT_ID()
|
||||||
|
</selectKey>
|
||||||
|
insert into test_case_report (name, plan_id, content
|
||||||
|
)
|
||||||
|
values (#{name,jdbcType=VARCHAR}, #{planId,jdbcType=VARCHAR}, #{content,jdbcType=LONGVARCHAR}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
SELECT LAST_INSERT_ID()
|
||||||
|
</selectKey>
|
||||||
|
insert into test_case_report
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null">
|
||||||
|
name,
|
||||||
|
</if>
|
||||||
|
<if test="planId != null">
|
||||||
|
plan_id,
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content,
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null">
|
||||||
|
#{name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="planId != null">
|
||||||
|
#{planId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
#{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
<select id="countByExample" parameterType="io.metersphere.base.domain.TestCaseReportExample" resultType="java.lang.Long">
|
||||||
|
select count(*) from test_case_report
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
<update id="updateByExampleSelective" parameterType="map">
|
||||||
|
update test_case_report
|
||||||
|
<set>
|
||||||
|
<if test="record.id != null">
|
||||||
|
id = #{record.id,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
<if test="record.name != null">
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="record.planId != null">
|
||||||
|
plan_id = #{record.planId,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 test_case_report
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
plan_id = #{record.planId,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 test_case_report
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
plan_id = #{record.planId,jdbcType=VARCHAR}
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
update test_case_report
|
||||||
|
<set>
|
||||||
|
<if test="name != null">
|
||||||
|
name = #{name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="planId != null">
|
||||||
|
plan_id = #{planId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
update test_case_report
|
||||||
|
set name = #{name,jdbcType=VARCHAR},
|
||||||
|
plan_id = #{planId,jdbcType=VARCHAR},
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.TestCaseReport">
|
||||||
|
update test_case_report
|
||||||
|
set name = #{name,jdbcType=VARCHAR},
|
||||||
|
plan_id = #{planId,jdbcType=VARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
</mapper>
|
|
@ -0,0 +1,36 @@
|
||||||
|
package io.metersphere.base.mapper;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReportTemplate;
|
||||||
|
import io.metersphere.base.domain.TestCaseReportTemplateExample;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
public interface TestCaseReportTemplateMapper {
|
||||||
|
long countByExample(TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
int deleteByExample(TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
int deleteByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int insert(TestCaseReportTemplate record);
|
||||||
|
|
||||||
|
int insertSelective(TestCaseReportTemplate record);
|
||||||
|
|
||||||
|
List<TestCaseReportTemplate> selectByExampleWithBLOBs(TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
List<TestCaseReportTemplate> selectByExample(TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
TestCaseReportTemplate selectByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
int updateByExampleSelective(@Param("record") TestCaseReportTemplate record, @Param("example") TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
int updateByExampleWithBLOBs(@Param("record") TestCaseReportTemplate record, @Param("example") TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
int updateByExample(@Param("record") TestCaseReportTemplate record, @Param("example") TestCaseReportTemplateExample example);
|
||||||
|
|
||||||
|
int updateByPrimaryKeySelective(TestCaseReportTemplate record);
|
||||||
|
|
||||||
|
int updateByPrimaryKeyWithBLOBs(TestCaseReportTemplate record);
|
||||||
|
|
||||||
|
int updateByPrimaryKey(TestCaseReportTemplate record);
|
||||||
|
}
|
|
@ -0,0 +1,234 @@
|
||||||
|
<?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.TestCaseReportTemplateMapper">
|
||||||
|
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
|
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||||
|
<result column="workspace_id" jdbcType="VARCHAR" property="workspaceId" />
|
||||||
|
</resultMap>
|
||||||
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
<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, name, workspace_id
|
||||||
|
</sql>
|
||||||
|
<sql id="Blob_Column_List">
|
||||||
|
content
|
||||||
|
</sql>
|
||||||
|
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.TestCaseReportTemplateExample" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from test_case_report_template
|
||||||
|
<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.TestCaseReportTemplateExample" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
<if test="distinct">
|
||||||
|
distinct
|
||||||
|
</if>
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from test_case_report_template
|
||||||
|
<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.Long" resultMap="ResultMapWithBLOBs">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
,
|
||||||
|
<include refid="Blob_Column_List" />
|
||||||
|
from test_case_report_template
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</select>
|
||||||
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||||
|
delete from test_case_report_template
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.TestCaseReportTemplateExample">
|
||||||
|
delete from test_case_report_template
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
<insert id="insert" parameterType="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
SELECT LAST_INSERT_ID()
|
||||||
|
</selectKey>
|
||||||
|
insert into test_case_report_template (name, workspace_id, content
|
||||||
|
)
|
||||||
|
values (#{name,jdbcType=VARCHAR}, #{workspaceId,jdbcType=VARCHAR}, #{content,jdbcType=LONGVARCHAR}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
SELECT LAST_INSERT_ID()
|
||||||
|
</selectKey>
|
||||||
|
insert into test_case_report_template
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null">
|
||||||
|
name,
|
||||||
|
</if>
|
||||||
|
<if test="workspaceId != null">
|
||||||
|
workspace_id,
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content,
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null">
|
||||||
|
#{name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="workspaceId != null">
|
||||||
|
#{workspaceId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
#{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
<select id="countByExample" parameterType="io.metersphere.base.domain.TestCaseReportTemplateExample" resultType="java.lang.Long">
|
||||||
|
select count(*) from test_case_report_template
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
<update id="updateByExampleSelective" parameterType="map">
|
||||||
|
update test_case_report_template
|
||||||
|
<set>
|
||||||
|
<if test="record.id != null">
|
||||||
|
id = #{record.id,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
<if test="record.name != null">
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="record.workspaceId != null">
|
||||||
|
workspace_id = #{record.workspaceId,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 test_case_report_template
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
workspace_id = #{record.workspaceId,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 test_case_report_template
|
||||||
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
|
name = #{record.name,jdbcType=VARCHAR},
|
||||||
|
workspace_id = #{record.workspaceId,jdbcType=VARCHAR}
|
||||||
|
<if test="_parameter != null">
|
||||||
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
</if>
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
update test_case_report_template
|
||||||
|
<set>
|
||||||
|
<if test="name != null">
|
||||||
|
name = #{name,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="workspaceId != null">
|
||||||
|
workspace_id = #{workspaceId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="content != null">
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR},
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
update test_case_report_template
|
||||||
|
set name = #{name,jdbcType=VARCHAR},
|
||||||
|
workspace_id = #{workspaceId,jdbcType=VARCHAR},
|
||||||
|
content = #{content,jdbcType=LONGVARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.TestCaseReportTemplate">
|
||||||
|
update test_case_report_template
|
||||||
|
set name = #{name,jdbcType=VARCHAR},
|
||||||
|
workspace_id = #{workspaceId,jdbcType=VARCHAR}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
</mapper>
|
|
@ -8,7 +8,7 @@ public class JmeterProperties {
|
||||||
|
|
||||||
public static final String JMETER_PREFIX = "jmeter";
|
public static final String JMETER_PREFIX = "jmeter";
|
||||||
|
|
||||||
private String image = "registry.fit2cloud.com/metersphere/jmeter-master:0.0.3";
|
private String image;
|
||||||
|
|
||||||
public String getImage() {
|
public String getImage() {
|
||||||
return image;
|
return image;
|
||||||
|
|
|
@ -20,6 +20,7 @@ public class KafkaProperties {
|
||||||
private String clientId;
|
private String clientId;
|
||||||
private String connectionsMaxIdleMs;
|
private String connectionsMaxIdleMs;
|
||||||
private KafkaProperties.Ssl ssl = new KafkaProperties.Ssl();
|
private KafkaProperties.Ssl ssl = new KafkaProperties.Ssl();
|
||||||
|
private KafkaProperties.Log log = new KafkaProperties.Log();
|
||||||
|
|
||||||
public String getAcks() {
|
public String getAcks() {
|
||||||
return acks;
|
return acks;
|
||||||
|
@ -239,4 +240,24 @@ public class KafkaProperties {
|
||||||
public void setSsl(Ssl ssl) {
|
public void setSsl(Ssl ssl) {
|
||||||
this.ssl = ssl;
|
this.ssl = ssl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Log {
|
||||||
|
private String topic;
|
||||||
|
|
||||||
|
public String getTopic() {
|
||||||
|
return topic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopic(String topic) {
|
||||||
|
this.topic = topic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Log getLog() {
|
||||||
|
return log;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLog(Log log) {
|
||||||
|
this.log = log;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.PropertySource;
|
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -17,7 +16,6 @@ import java.util.Properties;
|
||||||
@Configuration
|
@Configuration
|
||||||
@MapperScan(basePackages = "io.metersphere.base.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
|
@MapperScan(basePackages = "io.metersphere.base.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@PropertySource(value = {"file:/opt/fit2cloud/conf/metersphere.properties"}, encoding = "UTF-8", ignoreResourceNotFound = true)
|
|
||||||
public class MybatisConfig {
|
public class MybatisConfig {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
@ -54,10 +54,10 @@ public class LoginController {
|
||||||
List<UserRole> org = userRoles.stream().filter(ur -> ur.getRoleId().startsWith("org")).collect(Collectors.toList());
|
List<UserRole> org = userRoles.stream().filter(ur -> ur.getRoleId().startsWith("org")).collect(Collectors.toList());
|
||||||
if (test.size() > 0) {
|
if (test.size() > 0) {
|
||||||
String wsId = test.get(0).getSourceId();
|
String wsId = test.get(0).getSourceId();
|
||||||
userService.switchUserRole(user, "workspace", wsId);
|
userService.switchUserRole("workspace", wsId);
|
||||||
} else if (org.size() > 0) {
|
} else if (org.size() > 0) {
|
||||||
String orgId = org.get(0).getSourceId();
|
String orgId = org.get(0).getSourceId();
|
||||||
userService.switchUserRole(user, "organization", orgId);
|
userService.switchUserRole("organization", orgId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 返回 userDTO
|
// 返回 userDTO
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping(value = "performance/report")
|
@RequestMapping(value = "performance/report")
|
||||||
|
@ -95,4 +96,8 @@ public class PerformanceReportController {
|
||||||
return reportService.getLoadTestReport(reportId);
|
return reportService.getLoadTestReport(reportId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("log/{reportId}")
|
||||||
|
public Map<String, String> stop(@PathVariable String reportId) {
|
||||||
|
return reportService.log(reportId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping(value = "performance")
|
@RequestMapping(value = "performance")
|
||||||
|
@ -89,11 +88,6 @@ public class PerformanceTestController {
|
||||||
performanceTestService.run(request);
|
performanceTestService.run(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/log/{testId}")
|
|
||||||
public Map<String, String> stop(@PathVariable String testId) {
|
|
||||||
return performanceTestService.log(testId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/file/metadata/{testId}")
|
@GetMapping("/file/metadata/{testId}")
|
||||||
public List<FileMetadata> getFileMetadata(@PathVariable String testId) {
|
public List<FileMetadata> getFileMetadata(@PathVariable String testId) {
|
||||||
return fileService.getFileMetadataByTestId(testId);
|
return fileService.getFileMetadataByTestId(testId);
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package io.metersphere.controller;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReport;
|
||||||
|
import io.metersphere.service.TestCaseReportService;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequestMapping("/case/report")
|
||||||
|
@RestController
|
||||||
|
public class TestCaseReportController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TestCaseReportService testCaseReportService;
|
||||||
|
|
||||||
|
@PostMapping("/list")
|
||||||
|
public List<TestCaseReport> list(@RequestBody TestCaseReport request) {
|
||||||
|
return testCaseReportService.listTestCaseReport(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
public TestCaseReport get(@PathVariable Long id){
|
||||||
|
return testCaseReportService.getTestCaseReport(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
public void add(@RequestBody TestCaseReport TestCaseReport){
|
||||||
|
testCaseReportService.addTestCaseReport(TestCaseReport);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/edit")
|
||||||
|
public void edit(@RequestBody TestCaseReport TestCaseReport){
|
||||||
|
testCaseReportService.editTestCaseReport(TestCaseReport);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete/{id}")
|
||||||
|
public int delete(@PathVariable Long id){
|
||||||
|
return testCaseReportService.deleteTestCaseReport(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package io.metersphere.controller;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReportTemplate;
|
||||||
|
import io.metersphere.service.TestCaseReportTemplateService;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequestMapping("/case/report/template")
|
||||||
|
@RestController
|
||||||
|
public class TestCaseReportTemplateController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TestCaseReportTemplateService testCaseReportTemplateService;
|
||||||
|
|
||||||
|
@PostMapping("/list")
|
||||||
|
public List<TestCaseReportTemplate> list(@RequestBody TestCaseReportTemplate request) {
|
||||||
|
return testCaseReportTemplateService.listTestCaseReportTemplate(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
public TestCaseReportTemplate get(@PathVariable Long id){
|
||||||
|
return testCaseReportTemplateService.getTestCaseReportTemplate(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
public void add(@RequestBody TestCaseReportTemplate testCaseReportTemplate){
|
||||||
|
testCaseReportTemplateService.addTestCaseReportTemplate(testCaseReportTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/edit")
|
||||||
|
public void edit(@RequestBody TestCaseReportTemplate testCaseReportTemplate){
|
||||||
|
testCaseReportTemplateService.editTestCaseReportTemplate(testCaseReportTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete/{id}")
|
||||||
|
public int delete(@PathVariable Long id){
|
||||||
|
return testCaseReportTemplateService.deleteTestCaseReportTemplate(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -129,16 +129,14 @@ public class UserController {
|
||||||
@PostMapping("/switch/source/org/{sourceId}")
|
@PostMapping("/switch/source/org/{sourceId}")
|
||||||
@RequiresRoles(RoleConstants.ORG_ADMIN)
|
@RequiresRoles(RoleConstants.ORG_ADMIN)
|
||||||
public UserDTO switchOrganization(@PathVariable(value = "sourceId") String sourceId) {
|
public UserDTO switchOrganization(@PathVariable(value = "sourceId") String sourceId) {
|
||||||
UserDTO user = SessionUtils.getUser();
|
userService.switchUserRole("organization",sourceId);
|
||||||
userService.switchUserRole(user,"organization",sourceId);
|
|
||||||
return SessionUtils.getUser();
|
return SessionUtils.getUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/switch/source/ws/{sourceId}")
|
@PostMapping("/switch/source/ws/{sourceId}")
|
||||||
@RequiresRoles(value = {RoleConstants.TEST_MANAGER,RoleConstants.TEST_VIEWER,RoleConstants.TEST_USER}, logical = Logical.OR)
|
@RequiresRoles(value = {RoleConstants.TEST_MANAGER,RoleConstants.TEST_VIEWER,RoleConstants.TEST_USER}, logical = Logical.OR)
|
||||||
public UserDTO switchWorkspace(@PathVariable(value = "sourceId") String sourceId) {
|
public UserDTO switchWorkspace(@PathVariable(value = "sourceId") String sourceId) {
|
||||||
UserDTO user = SessionUtils.getUser();
|
userService.switchUserRole("workspace", sourceId);
|
||||||
userService.switchUserRole(user, "workspace", sourceId);
|
|
||||||
return SessionUtils.getUser();
|
return SessionUtils.getUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class WorkspaceController {
|
||||||
@PostMapping("add")
|
@PostMapping("add")
|
||||||
@RequiresRoles(RoleConstants.ORG_ADMIN)
|
@RequiresRoles(RoleConstants.ORG_ADMIN)
|
||||||
public Workspace addWorkspace(@RequestBody Workspace workspace) {
|
public Workspace addWorkspace(@RequestBody Workspace workspace) {
|
||||||
|
workspaceService.checkWorkspaceOwnerByOrgAdmin(workspace.getId());
|
||||||
return workspaceService.saveWorkspace(workspace);
|
return workspaceService.saveWorkspace(workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ public class EngineContext {
|
||||||
private String reportId;
|
private String reportId;
|
||||||
private Map<String, Object> properties = new HashMap<>();
|
private Map<String, Object> properties = new HashMap<>();
|
||||||
private Map<String, String> testData = new HashMap<>();
|
private Map<String, String> testData = new HashMap<>();
|
||||||
|
private Map<String, String> env = new HashMap<>();
|
||||||
|
|
||||||
public String getTestId() {
|
public String getTestId() {
|
||||||
return testId;
|
return testId;
|
||||||
|
@ -48,6 +49,14 @@ public class EngineContext {
|
||||||
this.properties.putAll(props);
|
this.properties.putAll(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getEnv() {
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnv(Map<String, String> env) {
|
||||||
|
this.env = env;
|
||||||
|
}
|
||||||
|
|
||||||
public Object getProperty(String key) {
|
public Object getProperty(String key) {
|
||||||
return this.properties.get(key);
|
return this.properties.get(key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import io.metersphere.base.domain.TestResourcePool;
|
||||||
import io.metersphere.commons.constants.FileType;
|
import io.metersphere.commons.constants.FileType;
|
||||||
import io.metersphere.commons.constants.ResourcePoolTypeEnum;
|
import io.metersphere.commons.constants.ResourcePoolTypeEnum;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
|
import io.metersphere.config.KafkaProperties;
|
||||||
import io.metersphere.engine.docker.DockerTestEngine;
|
import io.metersphere.engine.docker.DockerTestEngine;
|
||||||
import io.metersphere.engine.kubernetes.KubernetesTestEngine;
|
import io.metersphere.engine.kubernetes.KubernetesTestEngine;
|
||||||
import io.metersphere.i18n.Translator;
|
import io.metersphere.i18n.Translator;
|
||||||
|
@ -31,6 +32,7 @@ import java.util.stream.Collectors;
|
||||||
public class EngineFactory {
|
public class EngineFactory {
|
||||||
private static FileService fileService;
|
private static FileService fileService;
|
||||||
private static TestResourcePoolService testResourcePoolService;
|
private static TestResourcePoolService testResourcePoolService;
|
||||||
|
private static KafkaProperties kafkaProperties;
|
||||||
|
|
||||||
public static Engine createEngine(LoadTestWithBLOBs loadTest) {
|
public static Engine createEngine(LoadTestWithBLOBs loadTest) {
|
||||||
String resourcePoolId = loadTest.getTestResourcePoolId();
|
String resourcePoolId = loadTest.getTestResourcePoolId();
|
||||||
|
@ -54,7 +56,7 @@ public class EngineFactory {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EngineContext createContext(LoadTestWithBLOBs loadTest, long threadNum, long startTime, String reportId) throws Exception {
|
public static EngineContext createContext(LoadTestWithBLOBs loadTest, String resourceId, long threadNum, long startTime, String reportId) throws Exception {
|
||||||
final List<FileMetadata> fileMetadataList = fileService.getFileMetadataByTestId(loadTest.getId());
|
final List<FileMetadata> fileMetadataList = fileService.getFileMetadataByTestId(loadTest.getId());
|
||||||
if (org.springframework.util.CollectionUtils.isEmpty(fileMetadataList)) {
|
if (org.springframework.util.CollectionUtils.isEmpty(fileMetadataList)) {
|
||||||
MSException.throwException(Translator.get("run_load_test_file_not_found") + loadTest.getId());
|
MSException.throwException(Translator.get("run_load_test_file_not_found") + loadTest.getId());
|
||||||
|
@ -78,6 +80,13 @@ public class EngineFactory {
|
||||||
engineContext.setResourcePoolId(loadTest.getTestResourcePoolId());
|
engineContext.setResourcePoolId(loadTest.getTestResourcePoolId());
|
||||||
engineContext.setStartTime(startTime);
|
engineContext.setStartTime(startTime);
|
||||||
engineContext.setReportId(reportId);
|
engineContext.setReportId(reportId);
|
||||||
|
HashMap<String, String> env = new HashMap<String, String>() {{
|
||||||
|
put("BOOTSTRAP_SERVERS", kafkaProperties.getBootstrapServers());
|
||||||
|
put("LOG_TOPIC", kafkaProperties.getLog().getTopic());
|
||||||
|
put("REPORT_ID", reportId);
|
||||||
|
put("RESOURCE_ID", resourceId);
|
||||||
|
}};
|
||||||
|
engineContext.setEnv(env);
|
||||||
|
|
||||||
if (StringUtils.isNotEmpty(loadTest.getLoadConfiguration())) {
|
if (StringUtils.isNotEmpty(loadTest.getLoadConfiguration())) {
|
||||||
final JSONArray jsonArray = JSONObject.parseArray(loadTest.getLoadConfiguration());
|
final JSONArray jsonArray = JSONObject.parseArray(loadTest.getLoadConfiguration());
|
||||||
|
@ -130,4 +139,9 @@ public class EngineFactory {
|
||||||
public void setTestResourcePoolService(TestResourcePoolService testResourcePoolService) {
|
public void setTestResourcePoolService(TestResourcePoolService testResourcePoolService) {
|
||||||
EngineFactory.testResourcePoolService = testResourcePoolService;
|
EngineFactory.testResourcePoolService = testResourcePoolService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
public void setKafkaProperties(KafkaProperties kafkaProperties) {
|
||||||
|
EngineFactory.kafkaProperties = kafkaProperties;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class DockerTestEngine extends AbstractEngine {
|
||||||
// todo 运行测试
|
// todo 运行测试
|
||||||
EngineContext context = null;
|
EngineContext context = null;
|
||||||
try {
|
try {
|
||||||
context = EngineFactory.createContext(loadTest, realThreadNum, this.getStartTime(), this.getReportId());
|
context = EngineFactory.createContext(loadTest, resource.getId(), realThreadNum, this.getStartTime(), this.getReportId());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
MSException.throwException(e);
|
MSException.throwException(e);
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,7 @@ public class DockerTestEngine extends AbstractEngine {
|
||||||
testRequest.setFileString(content);
|
testRequest.setFileString(content);
|
||||||
testRequest.setImage(JMETER_IMAGE);
|
testRequest.setImage(JMETER_IMAGE);
|
||||||
testRequest.setTestData(context.getTestData());
|
testRequest.setTestData(context.getTestData());
|
||||||
|
testRequest.setEnv(context.getEnv());
|
||||||
|
|
||||||
restTemplate.postForObject(uri, testRequest, String.class);
|
restTemplate.postForObject(uri, testRequest, String.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ public class TestRequest extends BaseRequest {
|
||||||
private String fileString;
|
private String fileString;
|
||||||
private String image;
|
private String image;
|
||||||
private Map<String, String> testData = new HashMap<>();
|
private Map<String, String> testData = new HashMap<>();
|
||||||
|
private Map<String, String> env = new HashMap<>();
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return size;
|
return size;
|
||||||
|
@ -41,4 +42,12 @@ public class TestRequest extends BaseRequest {
|
||||||
public void setTestData(Map<String, String> testData) {
|
public void setTestData(Map<String, String> testData) {
|
||||||
this.testData = testData;
|
this.testData = testData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getEnv() {
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnv(Map<String, String> env) {
|
||||||
|
this.env = env;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class KubernetesTestEngine extends AbstractEngine {
|
||||||
MSException.throwException(Translator.get("max_thread_insufficient"));
|
MSException.throwException(Translator.get("max_thread_insufficient"));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
EngineContext context = EngineFactory.createContext(loadTest, threadNum, this.getStartTime(), this.getReportId());
|
EngineContext context = EngineFactory.createContext(loadTest, r.getId(), threadNum, this.getStartTime(), this.getReportId());
|
||||||
runTest(context, clientCredential);
|
runTest(context, clientCredential);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
MSException.throwException(e);
|
MSException.throwException(e);
|
||||||
|
@ -90,6 +90,7 @@ public class KubernetesTestEngine extends AbstractEngine {
|
||||||
jmeter.setSpec(new JmeterSpec() {{
|
jmeter.setSpec(new JmeterSpec() {{
|
||||||
setReplicas(1);
|
setReplicas(1);
|
||||||
setImage(JMETER_IMAGE);
|
setImage(JMETER_IMAGE);
|
||||||
|
setEnv(context.getEnv());
|
||||||
}});
|
}});
|
||||||
LogUtil.info("Load test started. " + context.getTestId());
|
LogUtil.info("Load test started. " + context.getTestId());
|
||||||
kubernetesProvider.applyCustomResource(jmeter);
|
kubernetesProvider.applyCustomResource(jmeter);
|
||||||
|
|
|
@ -4,11 +4,15 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import io.fabric8.kubernetes.api.model.KubernetesResource;
|
import io.fabric8.kubernetes.api.model.KubernetesResource;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@JsonDeserialize
|
@JsonDeserialize
|
||||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class JmeterSpec implements KubernetesResource {
|
public class JmeterSpec implements KubernetesResource {
|
||||||
private int replicas = 1;
|
private int replicas = 1;
|
||||||
private String image;
|
private String image;
|
||||||
|
private Map<String, String> env = new HashMap<>();
|
||||||
|
|
||||||
public int getReplicas() {
|
public int getReplicas() {
|
||||||
return replicas;
|
return replicas;
|
||||||
|
@ -25,4 +29,12 @@ public class JmeterSpec implements KubernetesResource {
|
||||||
public void setImage(String image) {
|
public void setImage(String image) {
|
||||||
this.image = image;
|
this.image = image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getEnv() {
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnv(Map<String, String> env) {
|
||||||
|
this.env = env;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
package io.metersphere.report.base;
|
|
||||||
|
|
||||||
import com.opencsv.bean.CsvBindByName;
|
|
||||||
|
|
||||||
public class Metric {
|
|
||||||
// timestamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
|
|
||||||
|
|
||||||
@CsvBindByName(column = "timestamp") // 访问开始时间
|
|
||||||
private String timestamp;
|
|
||||||
@CsvBindByName(column = "elapsed") // 访问开始到结束的用时 - 响应时间
|
|
||||||
private String elapsed;
|
|
||||||
@CsvBindByName(column = "label") // 请求的标签
|
|
||||||
private String label;
|
|
||||||
@CsvBindByName(column = "responseCode") // 响应码
|
|
||||||
private String responseCode;
|
|
||||||
@CsvBindByName(column = "responseMessage") // 响应信息
|
|
||||||
private String responseMessage;
|
|
||||||
@CsvBindByName(column = "threadName") // 请求所属线程
|
|
||||||
private String threadName;
|
|
||||||
@CsvBindByName(column = "dataType") // 数据类型
|
|
||||||
private String dataType;
|
|
||||||
@CsvBindByName(column = "success") // 访问是否成功
|
|
||||||
private String success;
|
|
||||||
@CsvBindByName(column = "failureMessage") // 访问失败信息
|
|
||||||
private String failureMessage;
|
|
||||||
@CsvBindByName(column = "bytes") //
|
|
||||||
private String bytes;
|
|
||||||
@CsvBindByName(column = "sentBytes") //
|
|
||||||
private String sentBytes;
|
|
||||||
@CsvBindByName(column = "grpThreads") // 线程组
|
|
||||||
private String grpThreads;
|
|
||||||
@CsvBindByName(column = "allThreads") //
|
|
||||||
private String allThreads;
|
|
||||||
@CsvBindByName(column = "URL") //
|
|
||||||
private String url;
|
|
||||||
@CsvBindByName(column = "Latency") // 延时
|
|
||||||
private String latency;
|
|
||||||
@CsvBindByName(column = "IdleTime") // 闲置时间
|
|
||||||
private String idleTime;
|
|
||||||
@CsvBindByName(column = "Connect") //
|
|
||||||
private String connect;
|
|
||||||
|
|
||||||
|
|
||||||
public String getTimestamp() {
|
|
||||||
return timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTimestamp(String timestamp) {
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getElapsed() {
|
|
||||||
return elapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setElapsed(String elapsed) {
|
|
||||||
this.elapsed = elapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getLabel() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLabel(String label) {
|
|
||||||
this.label = label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getResponseCode() {
|
|
||||||
return responseCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResponseCode(String responseCode) {
|
|
||||||
this.responseCode = responseCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getResponseMessage() {
|
|
||||||
return responseMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResponseMessage(String responseMessage) {
|
|
||||||
this.responseMessage = responseMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getThreadName() {
|
|
||||||
return threadName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setThreadName(String threadName) {
|
|
||||||
this.threadName = threadName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDataType() {
|
|
||||||
return dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDataType(String dataType) {
|
|
||||||
this.dataType = dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSuccess() {
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSuccess(String success) {
|
|
||||||
this.success = success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFailureMessage() {
|
|
||||||
return failureMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFailureMessage(String failureMessage) {
|
|
||||||
this.failureMessage = failureMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBytes() {
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBytes(String bytes) {
|
|
||||||
this.bytes = bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSentBytes() {
|
|
||||||
return sentBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSentBytes(String sentBytes) {
|
|
||||||
this.sentBytes = sentBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGrpThreads() {
|
|
||||||
return grpThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGrpThreads(String grpThreads) {
|
|
||||||
this.grpThreads = grpThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAllThreads() {
|
|
||||||
return allThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAllThreads(String allThreads) {
|
|
||||||
this.allThreads = allThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUrl(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLatency() {
|
|
||||||
return latency;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLatency(String latency) {
|
|
||||||
this.latency = latency;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getIdleTime() {
|
|
||||||
return idleTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdleTime(String idleTime) {
|
|
||||||
this.idleTime = idleTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getConnect() {
|
|
||||||
return connect;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnect(String connect) {
|
|
||||||
this.connect = connect;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -67,7 +67,7 @@ public class ShiroDBRealm extends AuthorizingRealm {
|
||||||
UserDTO user = userService.getUserDTO(userId);
|
UserDTO user = userService.getUserDTO(userId);
|
||||||
String msg;
|
String msg;
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
msg = "not exist user is trying to login, user:" + userId;
|
msg = "The user does not exist: " + userId;
|
||||||
logger.warn(msg);
|
logger.warn(msg);
|
||||||
throw new UnknownAccountException(msg);
|
throw new UnknownAccountException(msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,14 @@ import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.mapper.OrganizationMapper;
|
import io.metersphere.base.mapper.OrganizationMapper;
|
||||||
import io.metersphere.base.mapper.UserMapper;
|
import io.metersphere.base.mapper.UserMapper;
|
||||||
import io.metersphere.base.mapper.UserRoleMapper;
|
import io.metersphere.base.mapper.UserRoleMapper;
|
||||||
|
import io.metersphere.base.mapper.WorkspaceMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtOrganizationMapper;
|
import io.metersphere.base.mapper.ext.ExtOrganizationMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtUserRoleMapper;
|
import io.metersphere.base.mapper.ext.ExtUserRoleMapper;
|
||||||
import io.metersphere.commons.constants.RoleConstants;
|
import io.metersphere.commons.constants.RoleConstants;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.controller.request.OrganizationRequest;
|
import io.metersphere.controller.request.OrganizationRequest;
|
||||||
import io.metersphere.dto.OrganizationMemberDTO;
|
import io.metersphere.dto.OrganizationMemberDTO;
|
||||||
|
import io.metersphere.dto.UserDTO;
|
||||||
import io.metersphere.dto.UserRoleHelpDTO;
|
import io.metersphere.dto.UserRoleHelpDTO;
|
||||||
import io.metersphere.i18n.Translator;
|
import io.metersphere.i18n.Translator;
|
||||||
import io.metersphere.user.SessionUser;
|
import io.metersphere.user.SessionUser;
|
||||||
|
@ -39,6 +41,12 @@ public class OrganizationService {
|
||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ExtOrganizationMapper extOrganizationMapper;
|
private ExtOrganizationMapper extOrganizationMapper;
|
||||||
|
@Resource
|
||||||
|
private WorkspaceMapper workspaceMapper;
|
||||||
|
@Resource
|
||||||
|
private WorkspaceService workspaceService;
|
||||||
|
@Resource
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
public Organization addOrganization(Organization organization) {
|
public Organization addOrganization(Organization organization) {
|
||||||
long currentTimeMillis = System.currentTimeMillis();
|
long currentTimeMillis = System.currentTimeMillis();
|
||||||
|
@ -123,7 +131,8 @@ public class OrganizationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkOrgOwner(String organizationId) {
|
public void checkOrgOwner(String organizationId) {
|
||||||
SessionUser user = SessionUtils.getUser();
|
SessionUser sessionUser = SessionUtils.getUser();
|
||||||
|
UserDTO user = userService.getUserDTO(sessionUser.getId());
|
||||||
List<String> collect = user.getUserRoles().stream()
|
List<String> collect = user.getUserRoles().stream()
|
||||||
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
||||||
.map(UserRole::getSourceId)
|
.map(UserRole::getSourceId)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import io.metersphere.base.mapper.*;
|
||||||
import io.metersphere.base.mapper.ext.ExtLoadTestMapper;
|
import io.metersphere.base.mapper.ext.ExtLoadTestMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtLoadTestReportDetailMapper;
|
import io.metersphere.base.mapper.ext.ExtLoadTestReportDetailMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper;
|
import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper;
|
||||||
import io.metersphere.commons.constants.FileType;
|
|
||||||
import io.metersphere.commons.constants.PerformanceTestStatus;
|
import io.metersphere.commons.constants.PerformanceTestStatus;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
@ -22,10 +21,7 @@ import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -51,6 +47,10 @@ public class PerformanceTestService {
|
||||||
private LoadTestReportDetailMapper loadTestReportDetailMapper;
|
private LoadTestReportDetailMapper loadTestReportDetailMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ExtLoadTestReportDetailMapper extLoadTestReportDetailMapper;
|
private ExtLoadTestReportDetailMapper extLoadTestReportDetailMapper;
|
||||||
|
@Resource
|
||||||
|
private LoadTestReportLogMapper loadTestReportLogMapper;
|
||||||
|
@Resource
|
||||||
|
private TestResourceService testResourceService;
|
||||||
|
|
||||||
public List<LoadTestDTO> list(QueryTestPlanRequest request) {
|
public List<LoadTestDTO> list(QueryTestPlanRequest request) {
|
||||||
return extLoadTestMapper.list(request);
|
return extLoadTestMapper.list(request);
|
||||||
|
@ -201,6 +201,16 @@ public class PerformanceTestService {
|
||||||
extLoadTestReportMapper.appendLine(testReport.getId(), "\n");
|
extLoadTestReportMapper.appendLine(testReport.getId(), "\n");
|
||||||
// append \n
|
// append \n
|
||||||
extLoadTestReportDetailMapper.appendLine(testReport.getId(), "\n");
|
extLoadTestReportDetailMapper.appendLine(testReport.getId(), "\n");
|
||||||
|
// 保存 load_test_report_log
|
||||||
|
String resourcePoolId = loadTest.getTestResourcePoolId();
|
||||||
|
List<TestResource> testResourceList = testResourceService.getResourcesByPoolId(resourcePoolId);
|
||||||
|
testResourceList.forEach(r -> {
|
||||||
|
LoadTestReportLog record = new LoadTestReportLog();
|
||||||
|
record.setReportId(testReport.getId());
|
||||||
|
record.setResourceId(r.getId());
|
||||||
|
record.setContent(StringUtils.EMPTY);
|
||||||
|
loadTestReportLogMapper.insert(record);
|
||||||
|
});
|
||||||
} catch (MSException e) {
|
} catch (MSException e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
loadTest.setStatus(PerformanceTestStatus.Error.name());
|
loadTest.setStatus(PerformanceTestStatus.Error.name());
|
||||||
|
@ -210,23 +220,6 @@ public class PerformanceTestService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, String> log(String testId) {
|
|
||||||
final LoadTestWithBLOBs loadTest = loadTestMapper.selectByPrimaryKey(testId);
|
|
||||||
if (loadTest == null) {
|
|
||||||
MSException.throwException(Translator.get("test_not_found") + testId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(loadTest.getStatus(), PerformanceTestStatus.Running.name())) {
|
|
||||||
MSException.throwException(Translator.get("test_not_running"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Engine engine = EngineFactory.createEngine(loadTest);
|
|
||||||
if (engine == null) {
|
|
||||||
MSException.throwException(String.format("Engine is null,test ID:%s", testId));
|
|
||||||
}
|
|
||||||
return engine.log();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<LoadTestDTO> recentTestPlans(QueryTestPlanRequest request) {
|
public List<LoadTestDTO> recentTestPlans(QueryTestPlanRequest request) {
|
||||||
// 查询最近的测试计划
|
// 查询最近的测试计划
|
||||||
request.setRecent(true);
|
request.setRecent(true);
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package io.metersphere.service;
|
package io.metersphere.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.mapper.LoadTestMapper;
|
import io.metersphere.base.mapper.LoadTestMapper;
|
||||||
|
import io.metersphere.base.mapper.LoadTestReportLogMapper;
|
||||||
import io.metersphere.base.mapper.LoadTestReportMapper;
|
import io.metersphere.base.mapper.LoadTestReportMapper;
|
||||||
import io.metersphere.base.mapper.LoadTestReportResultMapper;
|
import io.metersphere.base.mapper.LoadTestReportResultMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper;
|
import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper;
|
||||||
|
@ -20,7 +22,10 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@ -34,6 +39,10 @@ public class ReportService {
|
||||||
private LoadTestMapper loadTestMapper;
|
private LoadTestMapper loadTestMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private LoadTestReportResultMapper loadTestReportResultMapper;
|
private LoadTestReportResultMapper loadTestReportResultMapper;
|
||||||
|
@Resource
|
||||||
|
private LoadTestReportLogMapper loadTestReportLogMapper;
|
||||||
|
@Resource
|
||||||
|
private TestResourceService testResourceService;
|
||||||
|
|
||||||
public List<ReportDTO> getRecentReportList(ReportRequest request) {
|
public List<ReportDTO> getRecentReportList(ReportRequest request) {
|
||||||
return extLoadTestReportMapper.getReportList(request);
|
return extLoadTestReportMapper.getReportList(request);
|
||||||
|
@ -147,4 +156,36 @@ public class ReportService {
|
||||||
public LoadTestReport getLoadTestReport(String id) {
|
public LoadTestReport getLoadTestReport(String id) {
|
||||||
return extLoadTestReportMapper.selectByPrimaryKey(id);
|
return extLoadTestReportMapper.selectByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> log(String reportId) {
|
||||||
|
Map<String, String> logMap = new HashMap<>();
|
||||||
|
LoadTestReportLogExample example = new LoadTestReportLogExample();
|
||||||
|
example.createCriteria().andReportIdEqualTo(reportId);
|
||||||
|
List<LoadTestReportLog> loadTestReportLogs = loadTestReportLogMapper.selectByExampleWithBLOBs(example);
|
||||||
|
loadTestReportLogs.stream().map(log -> {
|
||||||
|
Map<String, String> result = new HashMap<>();
|
||||||
|
TestResource testResource = testResourceService.getTestResource(log.getResourceId());
|
||||||
|
if (testResource == null) {
|
||||||
|
result.put(log.getResourceId(), log.getContent());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String configuration = testResource.getConfiguration();
|
||||||
|
JSONObject object = JSON.parseObject(configuration);
|
||||||
|
if (StringUtils.isNotBlank(object.getString("masterUrl"))) {
|
||||||
|
result.put(object.getString("masterUrl"), log.getContent());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(object.getString("ip"))) {
|
||||||
|
result.put(object.getString("ip"), log.getContent());
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
result.put(log.getResourceId(), log.getContent());
|
||||||
|
return result;
|
||||||
|
}).forEach(log -> logMap.putAll(log.entrySet().stream()
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
|
||||||
|
);
|
||||||
|
|
||||||
|
return logMap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package io.metersphere.service;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReport;
|
||||||
|
import io.metersphere.base.domain.TestCaseReportExample;
|
||||||
|
import io.metersphere.base.mapper.TestCaseReportMapper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
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 TestCaseReportService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TestCaseReportMapper testCaseReportMapper;
|
||||||
|
|
||||||
|
public List<TestCaseReport> listTestCaseReport(TestCaseReport request) {
|
||||||
|
TestCaseReportExample example = new TestCaseReportExample();
|
||||||
|
if ( StringUtils.isNotBlank(request.getName()) ) {
|
||||||
|
example.createCriteria().andNameEqualTo(request.getName());
|
||||||
|
}
|
||||||
|
if ( StringUtils.isNotBlank(request.getPlanId()) ) {
|
||||||
|
example.createCriteria().andPlanIdEqualTo(request.getPlanId());
|
||||||
|
}
|
||||||
|
return testCaseReportMapper.selectByExample(example);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestCaseReport getTestCaseReport(Long id) {
|
||||||
|
return testCaseReportMapper.selectByPrimaryKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTestCaseReport(TestCaseReport TestCaseReport) {
|
||||||
|
testCaseReportMapper.insert(TestCaseReport);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editTestCaseReport(TestCaseReport TestCaseReport) {
|
||||||
|
testCaseReportMapper.updateByPrimaryKeyWithBLOBs(TestCaseReport);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int deleteTestCaseReport(Long id) {
|
||||||
|
return testCaseReportMapper.deleteByPrimaryKey(id);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package io.metersphere.service;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.TestCaseReportTemplate;
|
||||||
|
import io.metersphere.base.domain.TestCaseReportTemplateExample;
|
||||||
|
import io.metersphere.base.mapper.TestCaseReportMapper;
|
||||||
|
import io.metersphere.base.mapper.TestCaseReportTemplateMapper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
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 TestCaseReportTemplateService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TestCaseReportTemplateMapper testCaseReportTemplateMapper;
|
||||||
|
|
||||||
|
public List<TestCaseReportTemplate> listTestCaseReportTemplate(TestCaseReportTemplate request) {
|
||||||
|
TestCaseReportTemplateExample example = new TestCaseReportTemplateExample();
|
||||||
|
if ( StringUtils.isNotBlank(request.getName()) ) {
|
||||||
|
example.createCriteria().andNameEqualTo(request.getName());
|
||||||
|
}
|
||||||
|
if ( StringUtils.isNotBlank(request.getWorkspaceId()) ) {
|
||||||
|
example.createCriteria().andWorkspaceIdEqualTo(request.getWorkspaceId());
|
||||||
|
}
|
||||||
|
example.or(example.createCriteria().andWorkspaceIdIsNull());
|
||||||
|
return testCaseReportTemplateMapper.selectByExample(example);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestCaseReportTemplate getTestCaseReportTemplate(Long id) {
|
||||||
|
return testCaseReportTemplateMapper.selectByPrimaryKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTestCaseReportTemplate(TestCaseReportTemplate testCaseReportTemplate) {
|
||||||
|
testCaseReportTemplateMapper.insert(testCaseReportTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editTestCaseReportTemplate(TestCaseReportTemplate testCaseReportTemplate) {
|
||||||
|
testCaseReportTemplateMapper.updateByPrimaryKeyWithBLOBs(testCaseReportTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int deleteTestCaseReportTemplate(Long id) {
|
||||||
|
return testCaseReportTemplateMapper.deleteByPrimaryKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static io.metersphere.commons.constants.ResourceStatusEnum.INVALID;
|
||||||
import static io.metersphere.commons.constants.ResourceStatusEnum.VALID;
|
import static io.metersphere.commons.constants.ResourceStatusEnum.VALID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -98,6 +99,7 @@ public class TestResourcePoolService {
|
||||||
if (nodeIps.size() < testResourcePool.getResources().size()) {
|
if (nodeIps.size() < testResourcePool.getResources().size()) {
|
||||||
MSException.throwException(Translator.get("duplicate_node_ip"));
|
MSException.throwException(Translator.get("duplicate_node_ip"));
|
||||||
}
|
}
|
||||||
|
testResourcePool.setStatus(VALID.name());
|
||||||
for (TestResource resource : testResourcePool.getResources()) {
|
for (TestResource resource : testResourcePool.getResources()) {
|
||||||
NodeDTO nodeDTO = JSON.parseObject(resource.getConfiguration(), NodeDTO.class);
|
NodeDTO nodeDTO = JSON.parseObject(resource.getConfiguration(), NodeDTO.class);
|
||||||
boolean isValidate = validateNode(nodeDTO);
|
boolean isValidate = validateNode(nodeDTO);
|
||||||
|
@ -134,6 +136,7 @@ public class TestResourcePoolService {
|
||||||
KubernetesProvider provider = new KubernetesProvider(testResource.getConfiguration());
|
KubernetesProvider provider = new KubernetesProvider(testResource.getConfiguration());
|
||||||
provider.validateCredential();
|
provider.validateCredential();
|
||||||
testResource.setStatus(VALID.name());
|
testResource.setStatus(VALID.name());
|
||||||
|
testResourcePool.setStatus(VALID.name());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
testResource.setStatus(ResourceStatusEnum.INVALID.name());
|
testResource.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
|
@ -161,6 +164,18 @@ public class TestResourcePoolService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TestResourcePool> listValidResourcePools() {
|
public List<TestResourcePool> listValidResourcePools() {
|
||||||
|
QueryResourcePoolRequest request = new QueryResourcePoolRequest();
|
||||||
|
List<TestResourcePoolDTO> testResourcePools = listResourcePools(request);
|
||||||
|
// 重新校验 pool
|
||||||
|
for (TestResourcePoolDTO pool : testResourcePools) {
|
||||||
|
try {
|
||||||
|
updateTestResourcePool(pool);
|
||||||
|
} catch (MSException e) {
|
||||||
|
pool.setStatus(INVALID.name());
|
||||||
|
pool.setUpdateTime(System.currentTimeMillis());
|
||||||
|
testResourcePoolMapper.updateByPrimaryKeySelective(pool);
|
||||||
|
}
|
||||||
|
}
|
||||||
TestResourcePoolExample example = new TestResourcePoolExample();
|
TestResourcePoolExample example = new TestResourcePoolExample();
|
||||||
example.createCriteria().andStatusEqualTo(ResourceStatusEnum.VALID.name());
|
example.createCriteria().andStatusEqualTo(ResourceStatusEnum.VALID.name());
|
||||||
return testResourcePoolMapper.selectByExample(example);
|
return testResourcePoolMapper.selectByExample(example);
|
||||||
|
|
|
@ -47,4 +47,8 @@ public class TestResourceService {
|
||||||
example.createCriteria().andTestResourcePoolIdEqualTo(resourcePoolId);
|
example.createCriteria().andTestResourcePoolIdEqualTo(resourcePoolId);
|
||||||
return testResourceMapper.selectByExampleWithBLOBs(example);
|
return testResourceMapper.selectByExampleWithBLOBs(example);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TestResource getTestResource(String resourceId) {
|
||||||
|
return testResourceMapper.selectByPrimaryKey(resourceId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import io.metersphere.dto.OrganizationMemberDTO;
|
||||||
import io.metersphere.dto.UserDTO;
|
import io.metersphere.dto.UserDTO;
|
||||||
import io.metersphere.dto.UserRoleDTO;
|
import io.metersphere.dto.UserRoleDTO;
|
||||||
import io.metersphere.dto.UserRoleHelpDTO;
|
import io.metersphere.dto.UserRoleHelpDTO;
|
||||||
|
import io.metersphere.i18n.Translator;
|
||||||
import io.metersphere.user.SessionUser;
|
import io.metersphere.user.SessionUser;
|
||||||
import io.metersphere.user.SessionUtils;
|
import io.metersphere.user.SessionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -22,7 +23,6 @@ import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -54,11 +54,11 @@ public class UserService {
|
||||||
|
|
||||||
private void checkUserParam(User user) {
|
private void checkUserParam(User user) {
|
||||||
if (StringUtils.isBlank(user.getName())) {
|
if (StringUtils.isBlank(user.getName())) {
|
||||||
MSException.throwException("user_name_empty");
|
MSException.throwException(Translator.get("user_name_is_null"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isBlank(user.getEmail())) {
|
if (StringUtils.isBlank(user.getEmail())) {
|
||||||
MSException.throwException("user_email_empty");
|
MSException.throwException(Translator.get("user_email_is_null"));
|
||||||
}
|
}
|
||||||
// password
|
// password
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public class UserService {
|
||||||
criteria.andEmailEqualTo(user.getEmail());
|
criteria.andEmailEqualTo(user.getEmail());
|
||||||
List<User> userList = userMapper.selectByExample(userExample);
|
List<User> userList = userMapper.selectByExample(userExample);
|
||||||
if (!CollectionUtils.isEmpty(userList)) {
|
if (!CollectionUtils.isEmpty(userList)) {
|
||||||
MSException.throwException("user_email_is_exist");
|
MSException.throwException(Translator.get("user_email_already_exists"));
|
||||||
}
|
}
|
||||||
userMapper.insertSelective(user);
|
userMapper.insertSelective(user);
|
||||||
}
|
}
|
||||||
|
@ -128,108 +128,11 @@ public class UserService {
|
||||||
userMapper.updateByPrimaryKeySelective(user);
|
userMapper.updateByPrimaryKeySelective(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public List<Role> getUserRolesList(String userId) {
|
public void switchUserRole(String sign, String sourceId) {
|
||||||
UserRoleExample userRoleExample = new UserRoleExample();
|
SessionUser sessionUser = SessionUtils.getUser();
|
||||||
userRoleExample.createCriteria().andUserIdEqualTo(userId);
|
// 获取最新UserDTO
|
||||||
List<UserRole> userRolesList = userRoleMapper.selectByExample(userRoleExample);
|
UserDTO user = getUserDTO(sessionUser.getId());
|
||||||
List<String> roleIds = userRolesList.stream().map(UserRole::getRoleId).collect(Collectors.toList());
|
|
||||||
RoleExample roleExample = new RoleExample();
|
|
||||||
roleExample.createCriteria().andIdIn(roleIds);
|
|
||||||
return roleMapper.selectByExample(roleExample);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<UserRoleDTO> getUserRoleList(String userId) {
|
|
||||||
if (StringUtils.isEmpty(userId)) {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
return convertUserRoleDTO(extUserRoleMapper.getUserRoleHelpList(userId));
|
|
||||||
}*/
|
|
||||||
|
|
||||||
private List<UserRoleDTO> convertUserRoleDTO(List<UserRoleHelpDTO> helpDTOList) {
|
|
||||||
StringBuilder buffer = new StringBuilder();
|
|
||||||
|
|
||||||
Map<String, UserRoleDTO> roleMap = new HashMap<>();
|
|
||||||
|
|
||||||
List<UserRoleDTO> resultList = new ArrayList<>();
|
|
||||||
|
|
||||||
List<UserRoleDTO> otherList = new ArrayList<>();
|
|
||||||
|
|
||||||
Set<String> orgSet = new HashSet<>();
|
|
||||||
|
|
||||||
Set<String> workspaceSet = new HashSet<>();
|
|
||||||
|
|
||||||
for (UserRoleHelpDTO helpDTO : helpDTOList) {
|
|
||||||
UserRoleDTO userRoleDTO = roleMap.get(helpDTO.getSourceId());
|
|
||||||
|
|
||||||
if (userRoleDTO == null) {
|
|
||||||
userRoleDTO = new UserRoleDTO();
|
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(helpDTO.getParentId())) {
|
|
||||||
workspaceSet.add(helpDTO.getParentId());
|
|
||||||
userRoleDTO.setType("workspace");
|
|
||||||
} else {
|
|
||||||
orgSet.add(helpDTO.getSourceId());
|
|
||||||
userRoleDTO.setType("organization");
|
|
||||||
}
|
|
||||||
|
|
||||||
userRoleDTO.setId(helpDTO.getSourceId());
|
|
||||||
userRoleDTO.setRoleId(helpDTO.getRoleId());
|
|
||||||
userRoleDTO.setName(helpDTO.getSourceName());
|
|
||||||
userRoleDTO.setParentId(helpDTO.getParentId());
|
|
||||||
userRoleDTO.setDesc(helpDTO.getRoleName());
|
|
||||||
|
|
||||||
} else {
|
|
||||||
userRoleDTO.setDesc(userRoleDTO.getDesc() + "," + helpDTO.getRoleName());
|
|
||||||
}
|
|
||||||
roleMap.put(helpDTO.getSourceId(), userRoleDTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(buffer.toString())) {
|
|
||||||
UserRoleDTO dto = new UserRoleDTO();
|
|
||||||
dto.setId("admin");
|
|
||||||
dto.setType("admin");
|
|
||||||
dto.setDesc(buffer.toString());
|
|
||||||
resultList.add(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String org : orgSet) {
|
|
||||||
workspaceSet.remove(org);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<UserRoleDTO> orgWorkSpace = new ArrayList<>(roleMap.values());
|
|
||||||
|
|
||||||
if (!CollectionUtils.isEmpty(workspaceSet)) {
|
|
||||||
for (String orgId : workspaceSet) {
|
|
||||||
Organization organization = organizationMapper.selectByPrimaryKey(orgId);
|
|
||||||
if (organization != null) {
|
|
||||||
UserRoleDTO dto = new UserRoleDTO();
|
|
||||||
dto.setId(orgId);
|
|
||||||
dto.setName(organization.getName());
|
|
||||||
dto.setSwitchable(false);
|
|
||||||
dto.setType("organization");
|
|
||||||
orgWorkSpace.add(dto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
orgWorkSpace.sort((o1, o2) -> {
|
|
||||||
if (o1.getParentId() == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o2.getParentId() == null) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return o1.getParentId().compareTo(o2.getParentId());
|
|
||||||
});
|
|
||||||
resultList.addAll(orgWorkSpace);
|
|
||||||
resultList.addAll(otherList);
|
|
||||||
|
|
||||||
return resultList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void switchUserRole(UserDTO user, String sign, String sourceId) {
|
|
||||||
User newUser = new User();
|
User newUser = new User();
|
||||||
if (StringUtils.equals("organization", sign)) {
|
if (StringUtils.equals("organization", sign)) {
|
||||||
user.setLastOrganizationId(sourceId);
|
user.setLastOrganizationId(sourceId);
|
||||||
|
@ -325,20 +228,16 @@ public class UserService {
|
||||||
|
|
||||||
public boolean checkUserPassword(String userId, String password) {
|
public boolean checkUserPassword(String userId, String password) {
|
||||||
if (StringUtils.isBlank(userId)) {
|
if (StringUtils.isBlank(userId)) {
|
||||||
MSException.throwException("Username cannot be null");
|
MSException.throwException(Translator.get("user_name_is_null"));
|
||||||
}
|
}
|
||||||
if (StringUtils.isBlank(password)) {
|
if (StringUtils.isBlank(password)) {
|
||||||
MSException.throwException("Password cannot be null");
|
MSException.throwException(Translator.get("password_is_null"));
|
||||||
}
|
}
|
||||||
UserExample example = new UserExample();
|
UserExample example = new UserExample();
|
||||||
example.createCriteria().andIdEqualTo(userId).andPasswordEqualTo(CodingUtil.md5(password));
|
example.createCriteria().andIdEqualTo(userId).andPasswordEqualTo(CodingUtil.md5(password));
|
||||||
return userMapper.countByExample(example) > 0;
|
return userMapper.countByExample(example) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<OrganizationMemberDTO> getOrganizationMemberDTO(QueryOrgMemberRequest request) {
|
|
||||||
return extUserRoleMapper.getOrganizationMemberDTO(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询该组织外的其他用户列表
|
* 查询该组织外的其他用户列表
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package io.metersphere.service;
|
package io.metersphere.service;
|
||||||
|
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
|
import io.metersphere.base.mapper.ProjectMapper;
|
||||||
import io.metersphere.base.mapper.UserMapper;
|
import io.metersphere.base.mapper.UserMapper;
|
||||||
import io.metersphere.base.mapper.UserRoleMapper;
|
import io.metersphere.base.mapper.UserRoleMapper;
|
||||||
import io.metersphere.base.mapper.WorkspaceMapper;
|
import io.metersphere.base.mapper.WorkspaceMapper;
|
||||||
|
@ -10,6 +11,7 @@ import io.metersphere.base.mapper.ext.ExtWorkspaceMapper;
|
||||||
import io.metersphere.commons.constants.RoleConstants;
|
import io.metersphere.commons.constants.RoleConstants;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.controller.request.WorkspaceRequest;
|
import io.metersphere.controller.request.WorkspaceRequest;
|
||||||
|
import io.metersphere.dto.UserDTO;
|
||||||
import io.metersphere.dto.UserRoleHelpDTO;
|
import io.metersphere.dto.UserRoleHelpDTO;
|
||||||
import io.metersphere.dto.WorkspaceDTO;
|
import io.metersphere.dto.WorkspaceDTO;
|
||||||
import io.metersphere.dto.WorkspaceMemberDTO;
|
import io.metersphere.dto.WorkspaceMemberDTO;
|
||||||
|
@ -20,7 +22,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -42,6 +43,12 @@ public class WorkspaceService {
|
||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ExtOrganizationMapper extOrganizationMapper;
|
private ExtOrganizationMapper extOrganizationMapper;
|
||||||
|
@Resource
|
||||||
|
private ProjectService projectService;
|
||||||
|
@Resource
|
||||||
|
private ProjectMapper projectMapper;
|
||||||
|
@Resource
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
public Workspace saveWorkspace(Workspace workspace) {
|
public Workspace saveWorkspace(Workspace workspace) {
|
||||||
if (StringUtils.isBlank(workspace.getName())) {
|
if (StringUtils.isBlank(workspace.getName())) {
|
||||||
|
@ -59,9 +66,9 @@ public class WorkspaceService {
|
||||||
if (workspaceMapper.countByExample(example) > 0) {
|
if (workspaceMapper.countByExample(example) > 0) {
|
||||||
MSException.throwException(Translator.get("workspace_name_already_exists"));
|
MSException.throwException(Translator.get("workspace_name_already_exists"));
|
||||||
}
|
}
|
||||||
workspace.setId(UUID.randomUUID().toString()); // 设置ID
|
workspace.setId(UUID.randomUUID().toString());
|
||||||
workspace.setCreateTime(currentTime);
|
workspace.setCreateTime(currentTime);
|
||||||
workspace.setUpdateTime(currentTime); // 首次 update time
|
workspace.setUpdateTime(currentTime);
|
||||||
workspaceMapper.insertSelective(workspace);
|
workspaceMapper.insertSelective(workspace);
|
||||||
} else {
|
} else {
|
||||||
workspace.setUpdateTime(currentTime);
|
workspace.setUpdateTime(currentTime);
|
||||||
|
@ -99,7 +106,8 @@ public class WorkspaceService {
|
||||||
public void checkWorkspaceOwnerByOrgAdmin(String workspaceId) {
|
public void checkWorkspaceOwnerByOrgAdmin(String workspaceId) {
|
||||||
checkWorkspaceIsExist(workspaceId);
|
checkWorkspaceIsExist(workspaceId);
|
||||||
WorkspaceExample example = new WorkspaceExample();
|
WorkspaceExample example = new WorkspaceExample();
|
||||||
SessionUser user = SessionUtils.getUser();
|
SessionUser sessionUser = SessionUtils.getUser();
|
||||||
|
UserDTO user = userService.getUserDTO(sessionUser.getId());
|
||||||
List<String> orgIds = user.getUserRoles().stream()
|
List<String> orgIds = user.getUserRoles().stream()
|
||||||
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
||||||
.map(UserRole::getSourceId)
|
.map(UserRole::getSourceId)
|
||||||
|
@ -112,23 +120,11 @@ public class WorkspaceService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkWorkspaceOwnerByTestManager(String workspaceId) {
|
|
||||||
checkWorkspaceIsExist(workspaceId);
|
|
||||||
SessionUser user = SessionUtils.getUser();
|
|
||||||
List<String> wsIds = user.getUserRoles().stream()
|
|
||||||
.filter(ur -> RoleConstants.TEST_MANAGER.equals(ur.getRoleId()))
|
|
||||||
.map(UserRole::getSourceId)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
boolean contains = wsIds.contains(workspaceId);
|
|
||||||
if (!contains) {
|
|
||||||
MSException.throwException(Translator.get("workspace_does_not_belong_to_user"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkWorkspaceOwner(String workspaceId) {
|
public void checkWorkspaceOwner(String workspaceId) {
|
||||||
checkWorkspaceIsExist(workspaceId);
|
checkWorkspaceIsExist(workspaceId);
|
||||||
WorkspaceExample example = new WorkspaceExample();
|
WorkspaceExample example = new WorkspaceExample();
|
||||||
SessionUser user = SessionUtils.getUser();
|
SessionUser sessionUser = SessionUtils.getUser();
|
||||||
|
UserDTO user = userService.getUserDTO(sessionUser.getId());
|
||||||
List<String> orgIds = user.getUserRoles().stream()
|
List<String> orgIds = user.getUserRoles().stream()
|
||||||
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()))
|
||||||
.map(UserRole::getSourceId)
|
.map(UserRole::getSourceId)
|
||||||
|
@ -150,7 +146,7 @@ public class WorkspaceService {
|
||||||
WorkspaceExample example = new WorkspaceExample();
|
WorkspaceExample example = new WorkspaceExample();
|
||||||
example.createCriteria().andIdEqualTo(workspaceId);
|
example.createCriteria().andIdEqualTo(workspaceId);
|
||||||
if (workspaceMapper.countByExample(example) == 0) {
|
if (workspaceMapper.countByExample(example) == 0) {
|
||||||
MSException.throwException("workspace_not_exist");
|
MSException.throwException(Translator.get("workspace_not_exists"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ mybatis.configuration.use-column-label=true
|
||||||
mybatis.configuration.auto-mapping-behavior=full
|
mybatis.configuration.auto-mapping-behavior=full
|
||||||
mybatis.configuration.default-statement-timeout=25000
|
mybatis.configuration.default-statement-timeout=25000
|
||||||
|
|
||||||
logging.file.path=/opt/fit2cloud/logs/${spring.application.name}
|
logging.file.path=/opt/metersphere/logs/${spring.application.name}
|
||||||
|
|
||||||
# view
|
# view
|
||||||
spring.resources.static-locations=classpath:/templates/,classpath:/static/
|
spring.resources.static-locations=classpath:/templates/,classpath:/static/
|
||||||
|
@ -36,4 +36,31 @@ spring.flyway.baseline-version=0
|
||||||
spring.flyway.encoding=UTF-8
|
spring.flyway.encoding=UTF-8
|
||||||
spring.flyway.validate-on-migrate=false
|
spring.flyway.validate-on-migrate=false
|
||||||
|
|
||||||
spring.messages.basename=i18n/messages
|
spring.messages.basename=i18n/messages
|
||||||
|
|
||||||
|
# kafka
|
||||||
|
kafka.acks=1
|
||||||
|
kafka.fields=
|
||||||
|
kafka.timestamp=yyyy-MM-dd'T'HH:mm:ss.SSSZZ
|
||||||
|
kafka.sample-filter=
|
||||||
|
kafka.test-mode=info
|
||||||
|
kafka.parse-all-req-headers=false
|
||||||
|
kafka.parse-all-res-headers=false
|
||||||
|
kafka.compression-type=
|
||||||
|
kafka.batch-size=16384
|
||||||
|
kafka.client-id=JMeterKafkaBackendListener
|
||||||
|
kafka.connections-max-idle-ms=180000
|
||||||
|
kafka.ssl.enabled=false
|
||||||
|
kafka.ssl.key-password=
|
||||||
|
kafka.ssl.keystore-location=
|
||||||
|
kafka.ssl.keystore-password=
|
||||||
|
kafka.ssl.truststore-location=
|
||||||
|
kafka.ssl.truststore-password=
|
||||||
|
kafka.ssl.enabled-protocols=TLSv1.2,TLSv1.1,TLSv1
|
||||||
|
kafka.ssl.keystore-type=JKS
|
||||||
|
kafka.ssl.protocol=TLS
|
||||||
|
kafka.ssl.provider=
|
||||||
|
kafka.ssl.truststore-type=
|
||||||
|
|
||||||
|
# jmeter
|
||||||
|
jmeter.image=registry.fit2cloud.com/metersphere/jmeter-master:0.0.4
|
|
@ -82,6 +82,17 @@ CREATE TABLE IF NOT EXISTS `load_test_report_result` (
|
||||||
DEFAULT CHARSET=utf8mb4
|
DEFAULT CHARSET=utf8mb4
|
||||||
COLLATE=utf8mb4_bin;
|
COLLATE=utf8mb4_bin;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `load_test_report_log` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`report_id` varchar(50) NOT NULL,
|
||||||
|
`resource_id` varchar(50) DEFAULT NULL,
|
||||||
|
`content` longtext,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `load_test_report_log_report_id_resource_name_index` (`report_id`,`resource_id`)
|
||||||
|
)
|
||||||
|
ENGINE=InnoDB
|
||||||
|
DEFAULT CHARSET=utf8mb4
|
||||||
|
COLLATE=utf8mb4_bin;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `organization` (
|
CREATE TABLE IF NOT EXISTS `organization` (
|
||||||
`id` varchar(50) NOT NULL COMMENT 'Organization ID',
|
`id` varchar(50) NOT NULL COMMENT 'Organization ID',
|
||||||
|
@ -319,4 +330,29 @@ CREATE TABLE IF NOT EXISTS `test_plan_test_case` (
|
||||||
DEFAULT CHARSET = utf8mb4
|
DEFAULT CHARSET = utf8mb4
|
||||||
COLLATE = utf8mb4_bin;
|
COLLATE = utf8mb4_bin;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `test_case_report_template` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(64) NOT NULL COMMENT 'Test case report template name',
|
||||||
|
`workspace_id` varchar(50) DEFAULT NULL COMMENT 'Workspace ID this project belongs to',
|
||||||
|
`content` longtext COMMENT 'Template content (JSON format)',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
)
|
||||||
|
ENGINE=InnoDB
|
||||||
|
DEFAULT CHARSET=utf8mb4
|
||||||
|
COLLATE=utf8mb4_bin;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `test_case_report` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(64) NOT NULL COMMENT 'Test case report name',
|
||||||
|
`plan_id` varchar(50) NOT NULL COMMENT 'Plan ID relation to',
|
||||||
|
`content` longtext COMMENT 'Report content (JSON format)',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
)
|
||||||
|
ENGINE=InnoDB
|
||||||
|
DEFAULT CHARSET=utf8mb4
|
||||||
|
COLLATE=utf8mb4_bin;
|
||||||
|
|
||||||
-- track end
|
-- track end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,3 +10,4 @@ INSERT INTO role (id, name, description, type, create_time, update_time) VALUES
|
||||||
INSERT INTO role (id, name, description, type, create_time, update_time) VALUES ('test_user', '测试人员', null, null, 1581576575948, 1581576575948);
|
INSERT INTO role (id, name, description, type, create_time, update_time) VALUES ('test_user', '测试人员', null, null, 1581576575948, 1581576575948);
|
||||||
INSERT INTO role (id, name, description, type, create_time, update_time) VALUES ('test_viewer', 'Viewer', null, null, 1581576575948, 1581576575948);
|
INSERT INTO role (id, name, description, type, create_time, update_time) VALUES ('test_viewer', 'Viewer', null, null, 1581576575948, 1581576575948);
|
||||||
|
|
||||||
|
INSERT INTO test_case_report_template (name,content) VALUES ("默认模版","{\"components\":[1,2,3,4,5],\"contentMap\":{\"richTextComponentTitleSet\":{},\"richTextComponentContentSet\":{}}}");
|
||||||
|
|
|
@ -23,4 +23,9 @@ max_thread_insufficient=The number of concurrent users exceeds
|
||||||
cannot_edit_load_test_running=Cannot modify the running test
|
cannot_edit_load_test_running=Cannot modify the running test
|
||||||
test_not_found=Test cannot be found:
|
test_not_found=Test cannot be found:
|
||||||
test_not_running=Test is not running
|
test_not_running=Test is not running
|
||||||
before_delete_plan=There is an associated test case under this plan, please unlink it first!
|
before_delete_plan=There is an associated test case under this plan, please unlink it first!
|
||||||
|
user_email_already_exists=User email already exists
|
||||||
|
user_name_is_null=User name cannot be null
|
||||||
|
user_email_is_null=User email cannot be null
|
||||||
|
password_is_null=Password cannot be null
|
||||||
|
workspace_not_exists=Workspace is not exists
|
|
@ -23,4 +23,9 @@ max_thread_insufficient=并发用户数超额
|
||||||
cannot_edit_load_test_running=不能修改正在运行的测试
|
cannot_edit_load_test_running=不能修改正在运行的测试
|
||||||
test_not_found=测试不存在:
|
test_not_found=测试不存在:
|
||||||
test_not_running=测试未运行
|
test_not_running=测试未运行
|
||||||
before_delete_plan=该计划下存在关联测试用例,请先取消关联!
|
before_delete_plan=该计划下存在关联测试用例,请先取消关联!
|
||||||
|
user_email_already_exists=用户邮箱已存在
|
||||||
|
user_name_is_null=用户名不能为空
|
||||||
|
user_email_is_null=用户邮箱不能为空
|
||||||
|
password_is_null=密码不能为空
|
||||||
|
workspace_not_exists=工作空间不存在
|
File diff suppressed because it is too large
Load Diff
|
@ -1,204 +0,0 @@
|
||||||
package io.metersphere;
|
|
||||||
|
|
||||||
import com.opencsv.bean.CsvToBean;
|
|
||||||
import com.opencsv.bean.CsvToBeanBuilder;
|
|
||||||
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
|
|
||||||
import org.junit.Test;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
|
||||||
public class JtlTest {
|
|
||||||
|
|
||||||
public static List<Metric> beanBuilderExample(String content) {
|
|
||||||
HeaderColumnNameMappingStrategy<io.metersphere.Metric> ms = new HeaderColumnNameMappingStrategy<>();
|
|
||||||
ms.setType(io.metersphere.Metric.class);
|
|
||||||
try (Reader reader = new StringReader(content)) {
|
|
||||||
|
|
||||||
CsvToBean<io.metersphere.Metric> cb = new CsvToBeanBuilder<Metric>(reader)
|
|
||||||
.withType(Metric.class)
|
|
||||||
.withSkipLines(0)
|
|
||||||
.withMappingStrategy(ms)
|
|
||||||
.withIgnoreLeadingWhiteSpace(true)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return cb.parse();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getRequestStatistics() {
|
|
||||||
String jtlString = "timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect\n" +
|
|
||||||
"1584602493891,1107,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-3,text,true,,1473653,6950,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=c81989f3-27d5-4b1a-a2db-03ddb06475d5&login=true&scope=openid,232,0,26\n" +
|
|
||||||
"1584602493891,235,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-3,,true,,214,567,3,3,https://rddev2.fit2cloud.com/,232,0,26\n" +
|
|
||||||
"1584602494128,11,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-3,,true,,615,577,3,3,https://rddev2.fit2cloud.com/dashboard/,11,0,0\n" +
|
|
||||||
"1584602494142,33,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-3,text,true,,8068,851,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=c81989f3-27d5-4b1a-a2db-03ddb06475d5&login=true&scope=openid,32,0,0\n" +
|
|
||||||
"1584602494242,756,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-3,text,true,,1464756,4955,3,3,https://rddev2.fit2cloud.com/login,46,0,0\n" +
|
|
||||||
"1584602493891,1154,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-2,text,true,,1473685,6950,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=374d02c0-6e1f-4937-b457-27d6e6ccf264&login=true&scope=openid,232,0,25\n" +
|
|
||||||
"1584602493891,235,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-2,,true,,214,567,3,3,https://rddev2.fit2cloud.com/,232,0,25\n" +
|
|
||||||
"1584602494128,11,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-2,,true,,615,577,3,3,https://rddev2.fit2cloud.com/dashboard/,11,0,0\n" +
|
|
||||||
"1584602494142,35,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-2,text,true,,8068,851,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=374d02c0-6e1f-4937-b457-27d6e6ccf264&login=true&scope=openid,35,0,0\n" +
|
|
||||||
"1584602494242,803,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-2,text,true,,1464788,4955,3,3,https://rddev2.fit2cloud.com/login,45,0,0\n" +
|
|
||||||
"1584602493891,1316,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-1,text,true,,1473686,6942,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=515530c4-0f36-454a-b536-9a11c7d2c47a&login=true&scope=openid,232,0,25\n" +
|
|
||||||
"1584602493891,235,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-1,,true,,214,567,3,3,https://rddev2.fit2cloud.com/,232,0,25\n" +
|
|
||||||
"1584602494128,12,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-1,,true,,614,577,3,3,https://rddev2.fit2cloud.com/dashboard/,12,0,0\n" +
|
|
||||||
"1584602494142,36,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-1,text,true,,8068,850,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=515530c4-0f36-454a-b536-9a11c7d2c47a&login=true&scope=openid,35,0,0\n" +
|
|
||||||
"1584602494242,965,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-1,text,true,,1464790,4948,3,3,https://rddev2.fit2cloud.com/login,48,0,0\n" +
|
|
||||||
"1584602496824,550,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-5,text,true,,1473644,6950,5,5,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=211a68fc-eb1e-482d-b5d2-636b411a133e&login=true&scope=openid,54,0,0\n" +
|
|
||||||
"1584602496824,54,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-5,,true,,214,567,5,5,https://rddev2.fit2cloud.com/,54,0,0\n" +
|
|
||||||
"1584602496878,12,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-5,,true,,615,577,5,5,https://rddev2.fit2cloud.com/dashboard/,12,0,0\n" +
|
|
||||||
"1584602496890,29,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-5,text,true,,8074,851,5,5,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=211a68fc-eb1e-482d-b5d2-636b411a133e&login=true&scope=openid,29,0,0\n" +
|
|
||||||
"1584602496922,452,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-5,text,true,,1464741,4955,5,5,https://rddev2.fit2cloud.com/login,20,0,0\n" +
|
|
||||||
"1584602496821,559,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-4,text,true,,1473633,6958,5,5,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=e6ebc175-e3dc-4c99-933b-f6610688dbfe&login=true&scope=openid,57,0,2\n" +
|
|
||||||
"1584602496821,57,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-4,,true,,214,567,5,5,https://rddev2.fit2cloud.com/,57,0,2\n" +
|
|
||||||
"1584602496878,11,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-4,,true,,616,577,5,5,https://rddev2.fit2cloud.com/dashboard/,11,0,0\n" +
|
|
||||||
"1584602496889,27,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-4,text,true,,8068,852,5,5,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=e6ebc175-e3dc-4c99-933b-f6610688dbfe&login=true&scope=openid,27,0,0\n" +
|
|
||||||
"1584602496919,461,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-4,text,true,,1464735,4962,5,5,https://rddev2.fit2cloud.com/login,20,0,0\n" +
|
|
||||||
"1584602499028,73,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-1,text,false,,4469,1745,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,73,0,6\n" +
|
|
||||||
"1584602499125,0,https://rddev2.fit2cloud.com/dashboard/?state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1&code=efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc,Non HTTP response code: java.net.URISyntaxException,\"Non HTTP response message: Illegal character in query at index 45: https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",Thread Group 1-1,text,false,,1392,0,8,8,\"https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",0,0,0\n" +
|
|
||||||
"1584602499126,21,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,12438,559,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,21,0,0\n" +
|
|
||||||
"1584602499251,18,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,1916,573,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,18,0,0\n" +
|
|
||||||
"1584602498833,509,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-7,text,true,,1473651,6942,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=1f8130d4-f1c4-44f5-8633-03cc4892f31c&login=true&scope=openid,39,0,1\n" +
|
|
||||||
"1584602498833,39,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-7,,true,,214,567,8,8,https://rddev2.fit2cloud.com/,39,0,1\n" +
|
|
||||||
"1584602498872,9,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-7,,true,,614,577,8,8,https://rddev2.fit2cloud.com/dashboard/,9,0,0\n" +
|
|
||||||
"1584602498881,18,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-7,text,true,,8074,850,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=1f8130d4-f1c4-44f5-8633-03cc4892f31c&login=true&scope=openid,18,0,0\n" +
|
|
||||||
"1584602498901,441,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-7,text,true,,1464749,4948,8,8,https://rddev2.fit2cloud.com/login,25,0,0\n" +
|
|
||||||
"1584602499325,71,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-2,text,false,,4469,1746,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,70,0,4\n" +
|
|
||||||
"1584602499445,16,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,1570,581,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,16,0,0\n" +
|
|
||||||
"1584602498832,637,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-6,text,true,,1473640,6958,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=ceda817a-6ac6-4516-9cd8-c1b25429bf94&login=true&scope=openid,50,0,1\n" +
|
|
||||||
"1584602498832,50,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-6,,true,,214,567,8,8,https://rddev2.fit2cloud.com/,50,0,1\n" +
|
|
||||||
"1584602498882,9,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-6,,true,,616,577,8,8,https://rddev2.fit2cloud.com/dashboard/,9,0,0\n" +
|
|
||||||
"1584602498891,35,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-6,text,true,,8068,852,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=ceda817a-6ac6-4516-9cd8-c1b25429bf94&login=true&scope=openid,35,0,0\n" +
|
|
||||||
"1584602498927,542,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-6,text,true,,1464742,4962,8,8,https://rddev2.fit2cloud.com/login,23,0,0\n" +
|
|
||||||
"1584602498836,635,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-8,text,true,,1473639,6950,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=1b42574e-756d-4157-9987-a8e1df496718&login=true&scope=openid,46,0,0\n" +
|
|
||||||
"1584602498836,46,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-8,,true,,214,567,8,8,https://rddev2.fit2cloud.com/,46,0,0\n" +
|
|
||||||
"1584602498883,12,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-8,,true,,615,577,8,8,https://rddev2.fit2cloud.com/dashboard/,12,0,0\n" +
|
|
||||||
"1584602498896,36,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-8,text,true,,8074,851,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=1b42574e-756d-4157-9987-a8e1df496718&login=true&scope=openid,36,0,0\n" +
|
|
||||||
"1584602498933,538,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-8,text,true,,1464736,4955,8,8,https://rddev2.fit2cloud.com/login,26,0,0\n" +
|
|
||||||
"1584602499605,0,https://rddev2.fit2cloud.com/dashboard/?state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1&code=efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc,Non HTTP response code: java.net.URISyntaxException,\"Non HTTP response message: Illegal character in query at index 45: https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",Thread Group 1-2,text,false,,1392,0,8,8,\"https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",0,0,0\n" +
|
|
||||||
"1584602499607,19,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,12424,560,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,19,0,0\n" +
|
|
||||||
"1584602499856,21,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,2516,572,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,21,0,0\n" +
|
|
||||||
"1584602500034,27,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,1916,574,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,27,0,0\n" +
|
|
||||||
"1584602500182,23,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,200,OK,Thread Group 1-1,text,true,,288,566,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,23,0,0\n" +
|
|
||||||
"1584602500484,18,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,1570,582,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,18,0,0\n" +
|
|
||||||
"1584602500504,16,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,2516,573,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,16,0,0\n" +
|
|
||||||
"1584602500206,420,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,200,OK,Thread Group 1-1,text,true,,1473342,5748,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=573519c4-a91b-4e46-b28d-f68231a8faf8&login=true&scope=openid,10,0,0\n" +
|
|
||||||
"1584602500206,10,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-0,302,Found,Thread Group 1-1,,true,,555,550,8,8,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,10,0,0\n" +
|
|
||||||
"1584602500216,23,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-1,200,OK,Thread Group 1-1,text,true,,8038,1439,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=573519c4-a91b-4e46-b28d-f68231a8faf8&login=true&scope=openid,23,0,0\n" +
|
|
||||||
"1584602500243,383,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-2,200,OK,Thread Group 1-1,text,true,,1464749,3759,8,8,https://rddev2.fit2cloud.com/login,24,0,0\n" +
|
|
||||||
"1584602500622,18,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,200,OK,Thread Group 1-2,text,true,,288,567,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,18,0,0\n" +
|
|
||||||
"1584602500735,15,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,503,506,8,8,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,15,0,0\n" +
|
|
||||||
"1584602501143,58,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-5,text,false,,4469,1746,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,58,0,4\n" +
|
|
||||||
"1584602501233,0,https://rddev2.fit2cloud.com/dashboard/?state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1&code=efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc,Non HTTP response code: java.net.URISyntaxException,\"Non HTTP response message: Illegal character in query at index 45: https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",Thread Group 1-5,text,false,,1392,0,8,8,\"https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",0,0,0\n" +
|
|
||||||
"1584602501234,19,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,12438,560,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,19,0,0\n" +
|
|
||||||
"1584602501253,17,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,1916,574,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,17,0,0\n" +
|
|
||||||
"1584602500841,509,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,200,OK,Thread Group 1-2,text,true,,1473319,5757,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=c27f5334-b14f-43e8-ba3d-a31d6f385c32&login=true&scope=openid,13,0,0\n" +
|
|
||||||
"1584602500841,13,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-0,302,Found,Thread Group 1-2,,true,,555,551,8,8,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,13,0,0\n" +
|
|
||||||
"1584602500855,29,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-1,200,OK,Thread Group 1-2,text,true,,8038,1440,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=c27f5334-b14f-43e8-ba3d-a31d6f385c32&login=true&scope=openid,29,0,0\n" +
|
|
||||||
"1584602500887,463,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-2,200,OK,Thread Group 1-2,text,true,,1464726,3766,8,8,https://rddev2.fit2cloud.com/login,26,0,0\n" +
|
|
||||||
"1584602501352,16,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,503,507,8,8,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,16,0,0\n" +
|
|
||||||
"1584602501458,13,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,1570,582,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,13,0,0\n" +
|
|
||||||
"1584602501663,17,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,2516,573,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-list.html?_t=1577351137654,17,0,0\n" +
|
|
||||||
"1584602501435,359,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,200,OK,Thread Group 1-1,text,true,,1473387,6761,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=832af3d4-2ca4-4e23-bf2a-e14a01d27fc0&login=true&scope=openid,11,0,0\n" +
|
|
||||||
"1584602501435,11,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-0,302,Found,Thread Group 1-1,,true,,558,653,8,8,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,11,0,0\n" +
|
|
||||||
"1584602501446,22,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-1,200,OK,Thread Group 1-1,text,true,,8030,1614,8,8,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=832af3d4-2ca4-4e23-bf2a-e14a01d27fc0&login=true&scope=openid,22,0,0\n" +
|
|
||||||
"1584602501471,323,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-2,200,OK,Thread Group 1-1,text,true,,1464799,4494,8,8,https://rddev2.fit2cloud.com/login,23,0,0\n" +
|
|
||||||
"1584602501784,17,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,200,OK,Thread Group 1-5,text,true,,288,567,8,8,https://rddev2.fit2cloud.com/dashboard/anonymous/license/validate?_nocache=1578039505321,17,0,0\n" +
|
|
||||||
"1584602501907,304,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,200,OK,Thread Group 1-1,text,true,,1473471,6749,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=1904f64b-a8f9-44d8-867e-359cfe46297f&login=true&scope=openid,10,0,0\n" +
|
|
||||||
"1584602501907,10,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-0,302,Found,Thread Group 1-1,,true,,555,652,10,10,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,10,0,0\n" +
|
|
||||||
"1584602501917,24,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-1,200,OK,Thread Group 1-1,text,true,,8021,1603,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=1904f64b-a8f9-44d8-867e-359cfe46297f&login=true&scope=openid,24,0,0\n" +
|
|
||||||
"1584602501943,268,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-2,200,OK,Thread Group 1-1,text,true,,1464895,4494,10,10,https://rddev2.fit2cloud.com/login,23,0,0\n" +
|
|
||||||
"1584602502213,16,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,1162,499,10,10,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,16,0,0\n" +
|
|
||||||
"1584602501802,513,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,200,OK,Thread Group 1-5,text,true,,1473342,5757,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=7d3aea03-3217-44da-81be-35c41c1db2d7&login=true&scope=openid,15,0,0\n" +
|
|
||||||
"1584602501802,15,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-0,302,Found,Thread Group 1-5,,true,,555,551,10,10,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321,15,0,0\n" +
|
|
||||||
"1584602501817,23,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-1,200,OK,Thread Group 1-5,text,true,,8038,1440,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fmodule%2Fall?_nocache%3D1578039505321&state=7d3aea03-3217-44da-81be-35c41c1db2d7&login=true&scope=openid,23,0,0\n" +
|
|
||||||
"1584602501842,473,https://rddev2.fit2cloud.com/dashboard/module/all?_nocache=1578039505321-2,200,OK,Thread Group 1-5,text,true,,1464749,3766,10,10,https://rddev2.fit2cloud.com/login,18,0,0\n" +
|
|
||||||
"1584602502316,28,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,503,507,10,10,https://rddev2.fit2cloud.com/web-public/fit2cloud/html/loading/loading.html?_t=1577351137654,28,0,0\n" +
|
|
||||||
"1584602502110,631,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-10,text,true,,1473668,6950,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=26792af8-d8cd-4ed6-b0e0-68ad7220004f&login=true&scope=openid,63,0,1\n" +
|
|
||||||
"1584602502110,63,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-10,,true,,214,567,10,10,https://rddev2.fit2cloud.com/,63,0,1\n" +
|
|
||||||
"1584602502173,15,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-10,,true,,615,577,10,10,https://rddev2.fit2cloud.com/dashboard/,15,0,0\n" +
|
|
||||||
"1584602502189,39,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-10,text,true,,8074,851,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=26792af8-d8cd-4ed6-b0e0-68ad7220004f&login=true&scope=openid,39,0,0\n" +
|
|
||||||
"1584602502229,512,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-10,text,true,,1464765,4955,10,10,https://rddev2.fit2cloud.com/login,18,0,0\n" +
|
|
||||||
"1584602502169,625,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,200,OK,Thread Group 1-2,text,true,,1473329,6770,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=7bfdeacf-3f22-449d-88f9-f0d792bfe1bb&login=true&scope=openid,19,0,0\n" +
|
|
||||||
"1584602502169,19,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-0,302,Found,Thread Group 1-2,,true,,558,654,10,10,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,19,0,0\n" +
|
|
||||||
"1584602502189,32,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-1,200,OK,Thread Group 1-2,text,true,,8030,1615,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=7bfdeacf-3f22-449d-88f9-f0d792bfe1bb&login=true&scope=openid,32,0,0\n" +
|
|
||||||
"1584602502222,572,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-2,200,OK,Thread Group 1-2,text,true,,1464741,4501,10,10,https://rddev2.fit2cloud.com/login,21,0,0\n" +
|
|
||||||
"1584602502110,713,https://rddev2.fit2cloud.com/,200,OK,Thread Group 1-9,text,true,,1473667,6942,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=cb0aadfc-16eb-486b-b7f1-2c2df1c3231c&login=true&scope=openid,63,0,1\n" +
|
|
||||||
"1584602502110,63,https://rddev2.fit2cloud.com/-0,302,Found,Thread Group 1-9,,true,,214,567,10,10,https://rddev2.fit2cloud.com/,63,0,1\n" +
|
|
||||||
"1584602502174,21,https://rddev2.fit2cloud.com/-1,302,Found,Thread Group 1-9,,true,,614,577,10,10,https://rddev2.fit2cloud.com/dashboard/,21,0,0\n" +
|
|
||||||
"1584602502195,34,https://rddev2.fit2cloud.com/-2,200,OK,Thread Group 1-9,text,true,,8074,850,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2F&state=cb0aadfc-16eb-486b-b7f1-2c2df1c3231c&login=true&scope=openid,34,0,0\n" +
|
|
||||||
"1584602502231,592,https://rddev2.fit2cloud.com/-3,200,OK,Thread Group 1-9,text,true,,1464765,4948,10,10,https://rddev2.fit2cloud.com/login,21,0,0\n" +
|
|
||||||
"1584602502434,434,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,200,OK,Thread Group 1-1,text,true,,1473315,6926,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=b2a99afa-66a7-411d-bba9-239c9b20de82&login=true&scope=openid,18,0,0\n" +
|
|
||||||
"1584602502434,18,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-0,302,Found,Thread Group 1-1,,true,,558,731,10,10,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,18,0,0\n" +
|
|
||||||
"1584602502452,27,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-1,200,OK,Thread Group 1-1,text,true,,8024,1603,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=b2a99afa-66a7-411d-bba9-239c9b20de82&login=true&scope=openid,27,0,0\n" +
|
|
||||||
"1584602502481,387,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-2,200,OK,Thread Group 1-1,text,true,,1464733,4592,10,10,https://rddev2.fit2cloud.com/login,25,0,0\n" +
|
|
||||||
"1584602502839,65,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-3,text,false,,4462,1746,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,65,0,1\n" +
|
|
||||||
"1584602502961,0,https://rddev2.fit2cloud.com/dashboard/?state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1&code=efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc,Non HTTP response code: java.net.URISyntaxException,\"Non HTTP response message: Illegal character in query at index 45: https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",Thread Group 1-3,text,false,,1392,0,10,10,\"https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",0,0,0\n" +
|
|
||||||
"1584602503108,27,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,200,OK,Thread Group 1-3,text,true,,12438,560,10,10,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,27,0,0\n" +
|
|
||||||
"1584602503239,23,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,200,OK,Thread Group 1-3,text,true,,1916,574,10,10,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,23,0,0\n" +
|
|
||||||
"1584602503006,262,https://rddev2.fit2cloud.com/dashboard/user/current/info?_nocache=1578039505484,200,OK,Thread Group 1-1,text,true,,1473599,5844,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fuser%2Fcurrent%2Finfo?_nocache%3D1578039505484&state=10ff89f8-c521-42a3-99bd-d2929d4260cc&login=true&scope=openid,14,0,0\n" +
|
|
||||||
"1584602503006,14,https://rddev2.fit2cloud.com/dashboard/user/current/info?_nocache=1578039505484-0,302,Found,Thread Group 1-1,,true,,564,557,10,10,https://rddev2.fit2cloud.com/dashboard/user/current/info?_nocache=1578039505484,14,0,0\n" +
|
|
||||||
"1584602503021,22,https://rddev2.fit2cloud.com/dashboard/user/current/info?_nocache=1578039505484-1,200,OK,Thread Group 1-1,text,true,,8056,1528,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fuser%2Fcurrent%2Finfo?_nocache%3D1578039505484&state=10ff89f8-c521-42a3-99bd-d2929d4260cc&login=true&scope=openid,22,0,0\n" +
|
|
||||||
"1584602503047,221,https://rddev2.fit2cloud.com/dashboard/user/current/info?_nocache=1578039505484-2,200,OK,Thread Group 1-1,text,true,,1464979,3759,10,10,https://rddev2.fit2cloud.com/login,20,0,0\n" +
|
|
||||||
"1584602502806,506,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,200,OK,Thread Group 1-2,text,true,,1473450,6758,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=f4ac4eb9-f92a-4bcc-8214-3eac6df6d1c9&login=true&scope=openid,12,0,0\n" +
|
|
||||||
"1584602502806,12,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-0,302,Found,Thread Group 1-2,,true,,555,653,10,10,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,12,0,0\n" +
|
|
||||||
"1584602502819,26,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-1,200,OK,Thread Group 1-2,text,true,,8027,1604,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=f4ac4eb9-f92a-4bcc-8214-3eac6df6d1c9&login=true&scope=openid,26,0,0\n" +
|
|
||||||
"1584602502846,466,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-2,200,OK,Thread Group 1-2,text,true,,1464868,4501,10,10,https://rddev2.fit2cloud.com/login,15,0,0\n" +
|
|
||||||
"1584602503314,13,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,200,OK,Thread Group 1-2,text,true,,1162,500,10,10,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,13,0,0\n" +
|
|
||||||
"1584602503471,15,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/header-menu.html?_t=1577351137654,200,OK,Thread Group 1-1,text,true,,3117,574,10,10,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/header-menu.html?_t=1577351137654,15,0,0\n" +
|
|
||||||
"1584602503471,54,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-4,text,false,,4462,1747,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,54,0,4\n" +
|
|
||||||
"1584602503569,0,https://rddev2.fit2cloud.com/dashboard/?state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1&code=efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc,Non HTTP response code: java.net.URISyntaxException,\"Non HTTP response message: Illegal character in query at index 45: https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",Thread Group 1-4,text,false,,1392,0,10,10,\"https://rddev2.fit2cloud.com/dashboard/?code=\n" +
|
|
||||||
" efe49afa-7afb-4c38-8e0c-38323291938c.191d0330-dd9f-4bb0-8c24-0e3df46e2ff1.fd56cca3-6d54-44aa-b879-a35e79fc1bfc\n" +
|
|
||||||
" &state=3d31fe47-47bd-47f2-950d-9d135e0600ef&session_state=191d0330-dd9f-4bb0-8c24-0e3df46e2ff1\",0,0,0\n" +
|
|
||||||
"1584602503108,494,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,200,OK,Thread Group 1-5,text,true,,1473344,6770,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=bbc579c2-fce7-4f4c-a9e0-9e27c818248c&login=true&scope=openid,21,0,0\n" +
|
|
||||||
"1584602503108,21,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-0,302,Found,Thread Group 1-5,,true,,558,654,10,10,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,21,0,0\n" +
|
|
||||||
"1584602503129,39,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-1,200,OK,Thread Group 1-5,text,true,,8030,1615,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=bbc579c2-fce7-4f4c-a9e0-9e27c818248c&login=true&scope=openid,39,0,0\n" +
|
|
||||||
"1584602503170,432,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-2,200,OK,Thread Group 1-5,text,true,,1464756,4501,10,10,https://rddev2.fit2cloud.com/login,25,0,0\n" +
|
|
||||||
"1584602503607,363,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,200,OK,Thread Group 1-5,text,true,,1473560,6758,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=db071ff5-a114-4a0d-b693-fd1d8e477e75&login=true&scope=openid,12,0,0\n" +
|
|
||||||
"1584602503607,12,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-0,302,Found,Thread Group 1-5,,true,,555,653,10,10,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50,12,0,0\n" +
|
|
||||||
"1584602503619,23,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-1,200,OK,Thread Group 1-5,text,true,,8027,1604,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fnotification%2Flist%2Funread%2F1%2F50&state=db071ff5-a114-4a0d-b693-fd1d8e477e75&login=true&scope=openid,23,0,0\n" +
|
|
||||||
"1584602503644,326,https://rddev2.fit2cloud.com/dashboard/notification/list/unread/1/50-2,200,OK,Thread Group 1-5,text,true,,1464978,4501,10,10,https://rddev2.fit2cloud.com/login,18,0,0\n" +
|
|
||||||
"1584602503971,15,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,200,OK,Thread Group 1-5,text,true,,1162,500,10,10,https://rddev2.fit2cloud.com/web-public/project/html/pagination.html?_t=1577351137654,15,0,0\n" +
|
|
||||||
"1584602503971,19,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,200,OK,Thread Group 1-4,text,true,,12438,561,10,10,https://rddev2.fit2cloud.com/dashboard/anonymous/i18n/en_US.json?_t=1577351137654,19,0,0\n" +
|
|
||||||
"1584602503792,32,https://rddev2.fit2cloud.com/dashboard/user/source/list?_nocache=1578039505551,200,OK,Thread Group 1-1,text,true,,8617,2109,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fuser%2Fsource%2Flist?_nocache%3D1578039505551&state=2bc90b74-8d32-4217-a573-bfbd969b6b16&login=true&scope=openid,10,0,0\n" +
|
|
||||||
"1584602503792,10,https://rddev2.fit2cloud.com/dashboard/user/source/list?_nocache=1578039505551-0,302,Found,Thread Group 1-1,,true,,563,556,10,10,https://rddev2.fit2cloud.com/dashboard/user/source/list?_nocache=1578039505551,10,0,0\n" +
|
|
||||||
"1584602503803,21,https://rddev2.fit2cloud.com/dashboard/user/source/list?_nocache=1578039505551-1,200,OK,Thread Group 1-1,text,true,,8054,1553,10,10,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fuser%2Fsource%2Flist?_nocache%3D1578039505551&state=2bc90b74-8d32-4217-a573-bfbd969b6b16&login=true&scope=openid,21,0,0\n" +
|
|
||||||
"1584602504095,21,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-9,text,false,,4469,1745,9,9,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,21,0,0\n" +
|
|
||||||
"1584602504100,20,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,200,OK,Thread Group 1-4,text,true,,1916,575,8,8,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/task-menus.html?_t=1577351137654,20,0,0\n" +
|
|
||||||
"1584602504095,27,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-10,text,false,,4462,1746,7,7,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,27,0,0\n" +
|
|
||||||
"1584602504095,39,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,200,OK,Thread Group 1-2,text,true,,8588,2336,6,6,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=24c9d65b-0421-4732-8193-0bf5f70b3fa4&login=true&scope=openid,13,0,0\n" +
|
|
||||||
"1584602504095,13,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-0,302,Found,Thread Group 1-2,,true,,558,732,6,6,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50,13,0,0\n" +
|
|
||||||
"1584602504108,26,https://rddev2.fit2cloud.com/dashboard/flow/runtime/task/pending/1/50-1,200,OK,Thread Group 1-2,text,true,,8030,1604,6,6,https://rddev2.fit2cloud.com/auth/realms/cmp/protocol/openid-connect/auth?response_type=code&client_id=cmp-client&redirect_uri=https%3A%2F%2Frddev2.fit2cloud.com%2Fdashboard%2Fflow%2Fruntime%2Ftask%2Fpending%2F1%2F50&state=24c9d65b-0421-4732-8193-0bf5f70b3fa4&login=true&scope=openid,26,0,0\n" +
|
|
||||||
"1584602504095,55,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-8,text,false,,4469,1746,5,5,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,55,0,3\n" +
|
|
||||||
"1584602504095,59,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-6,text,false,,4462,1747,4,4,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,59,0,4\n" +
|
|
||||||
"1584602504095,65,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate?session_code=YWUneSay4qlQuHRZsD4kPaZDIIR50KJLaNpW7uhsD-Q&execution=c7620733-54ab-46b2-802b-66764e42682b&client_id=cmp-client&tab_id=S8xOQPgCmhQ,400,Bad Request,Thread Group 1-7,text,false,,4469,1745,3,3,https://rddev2.fit2cloud.com/auth/realms/cmp/login-actions/authenticate,65,0,4\n" +
|
|
||||||
"1584602504200,12,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,200,OK,Thread Group 1-3,text,true,,1570,582,2,2,https://rddev2.fit2cloud.com/dashboard/web-public/project/html/notification-menus.html?_t=1577351137654,12,0,0\n";
|
|
||||||
List<Metric> metrics = beanBuilderExample(jtlString);
|
|
||||||
// 根据label分组,label作为map的key
|
|
||||||
Map<String, List<Metric>> map = metrics.stream().collect(Collectors.groupingBy(Metric::getLabel));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,180 +0,0 @@
|
||||||
package io.metersphere;
|
|
||||||
|
|
||||||
import com.opencsv.bean.CsvBindByName;
|
|
||||||
|
|
||||||
public class Metric {
|
|
||||||
// timestamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
|
|
||||||
|
|
||||||
@CsvBindByName(column = "timestamp")
|
|
||||||
private String timestamp;
|
|
||||||
@CsvBindByName(column = "elapsed")
|
|
||||||
private String elapsed;
|
|
||||||
@CsvBindByName(column = "label")
|
|
||||||
private String label;
|
|
||||||
@CsvBindByName(column = "responseCode")
|
|
||||||
private String responseCode;
|
|
||||||
@CsvBindByName(column = "responseMessage")
|
|
||||||
private String responseMessage;
|
|
||||||
@CsvBindByName(column = "threadName")
|
|
||||||
private String threadName;
|
|
||||||
@CsvBindByName(column = "dataType")
|
|
||||||
private String dataType;
|
|
||||||
@CsvBindByName(column = "success")
|
|
||||||
private String success;
|
|
||||||
@CsvBindByName(column = "failureMessage")
|
|
||||||
private String failureMessage;
|
|
||||||
@CsvBindByName(column = "bytes")
|
|
||||||
private String bytes;
|
|
||||||
@CsvBindByName(column = "sentBytes")
|
|
||||||
private String sentBytes;
|
|
||||||
@CsvBindByName(column = "grpThreads")
|
|
||||||
private String grpThreads;
|
|
||||||
@CsvBindByName(column = "allThreads")
|
|
||||||
private String allThreads;
|
|
||||||
@CsvBindByName(column = "URL")
|
|
||||||
private String url;
|
|
||||||
@CsvBindByName(column = "Latency")
|
|
||||||
private String latency;
|
|
||||||
@CsvBindByName(column = "IdleTime")
|
|
||||||
private String idleTime;
|
|
||||||
@CsvBindByName(column = "Connect")
|
|
||||||
private String connect;
|
|
||||||
|
|
||||||
|
|
||||||
public String getTimestamp() {
|
|
||||||
return timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTimestamp(String timestamp) {
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getElapsed() {
|
|
||||||
return elapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setElapsed(String elapsed) {
|
|
||||||
this.elapsed = elapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getLabel() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLabel(String label) {
|
|
||||||
this.label = label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getResponseCode() {
|
|
||||||
return responseCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResponseCode(String responseCode) {
|
|
||||||
this.responseCode = responseCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getResponseMessage() {
|
|
||||||
return responseMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResponseMessage(String responseMessage) {
|
|
||||||
this.responseMessage = responseMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getThreadName() {
|
|
||||||
return threadName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setThreadName(String threadName) {
|
|
||||||
this.threadName = threadName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDataType() {
|
|
||||||
return dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDataType(String dataType) {
|
|
||||||
this.dataType = dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSuccess() {
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSuccess(String success) {
|
|
||||||
this.success = success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFailureMessage() {
|
|
||||||
return failureMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFailureMessage(String failureMessage) {
|
|
||||||
this.failureMessage = failureMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBytes() {
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBytes(String bytes) {
|
|
||||||
this.bytes = bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSentBytes() {
|
|
||||||
return sentBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSentBytes(String sentBytes) {
|
|
||||||
this.sentBytes = sentBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGrpThreads() {
|
|
||||||
return grpThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGrpThreads(String grpThreads) {
|
|
||||||
this.grpThreads = grpThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAllThreads() {
|
|
||||||
return allThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAllThreads(String allThreads) {
|
|
||||||
this.allThreads = allThreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUrl(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLatency() {
|
|
||||||
return latency;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLatency(String latency) {
|
|
||||||
this.latency = latency;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getIdleTime() {
|
|
||||||
return idleTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdleTime(String idleTime) {
|
|
||||||
this.idleTime = idleTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getConnect() {
|
|
||||||
return connect;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnect(String connect) {
|
|
||||||
this.connect = connect;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
package io.metersphere;
|
|
||||||
|
|
||||||
import com.opencsv.bean.CsvToBean;
|
|
||||||
import com.opencsv.bean.CsvToBeanBuilder;
|
|
||||||
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
|
|
||||||
import io.metersphere.base.domain.LoadTestReportDetail;
|
|
||||||
import io.metersphere.base.domain.LoadTestReportWithBLOBs;
|
|
||||||
import io.metersphere.base.mapper.LoadTestReportDetailMapper;
|
|
||||||
import io.metersphere.base.mapper.LoadTestReportMapper;
|
|
||||||
import io.metersphere.report.base.Metric;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.StringReader;
|
|
||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
||||||
public class ReportContentTests {
|
|
||||||
@Resource
|
|
||||||
private LoadTestReportDetailMapper loadTestReportDetailMapper;
|
|
||||||
@Resource
|
|
||||||
private LoadTestReportMapper loadTestReportMapper;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test1() {
|
|
||||||
String reportId = "ba972086-7d74-4f58-99b0-9c014114fd99";
|
|
||||||
LoadTestReportDetail loadTestReportDetail = loadTestReportDetailMapper.selectByPrimaryKey(reportId);
|
|
||||||
LoadTestReportWithBLOBs loadTestReportWithBLOBs = loadTestReportMapper.selectByPrimaryKey(reportId);
|
|
||||||
|
|
||||||
HeaderColumnNameMappingStrategy<Metric> ms = new HeaderColumnNameMappingStrategy<>();
|
|
||||||
ms.setType(Metric.class);
|
|
||||||
try (Reader reader = new StringReader(loadTestReportDetail.getContent())) {
|
|
||||||
CsvToBean<Metric> cb = new CsvToBeanBuilder<Metric>(reader)
|
|
||||||
.withType(Metric.class)
|
|
||||||
.withSkipLines(0)
|
|
||||||
.withMappingStrategy(ms)
|
|
||||||
.withIgnoreLeadingWhiteSpace(true)
|
|
||||||
.build();
|
|
||||||
System.out.println(cb.parse().size());
|
|
||||||
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
try (Reader reader = new StringReader(loadTestReportWithBLOBs.getContent())) {
|
|
||||||
CsvToBean<Metric> cb = new CsvToBeanBuilder<Metric>(reader)
|
|
||||||
.withType(Metric.class)
|
|
||||||
.withSkipLines(0)
|
|
||||||
.withMappingStrategy(ms)
|
|
||||||
.withIgnoreLeadingWhiteSpace(true)
|
|
||||||
.build();
|
|
||||||
System.out.println(cb.parse().size());
|
|
||||||
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,6 +8,8 @@
|
||||||
"lint": "vue-cli-service lint"
|
"lint": "vue-cli-service lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ckeditor/ckeditor5-build-classic": "^18.0.0",
|
||||||
|
"@ckeditor/ckeditor5-vue": "^1.0.1",
|
||||||
"@fortawesome/fontawesome-svg-core": "^1.2.26",
|
"@fortawesome/fontawesome-svg-core": "^1.2.26",
|
||||||
"@fortawesome/free-regular-svg-icons": "^5.12.0",
|
"@fortawesome/free-regular-svg-icons": "^5.12.0",
|
||||||
"@fortawesome/free-solid-svg-icons": "^5.12.0",
|
"@fortawesome/free-solid-svg-icons": "^5.12.0",
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
|
@ -0,0 +1,110 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<chart :options="options">
|
||||||
|
</chart>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "MsPieChart",
|
||||||
|
components: {},
|
||||||
|
mounted() {
|
||||||
|
this.getDataNamesByData();
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
data() {
|
||||||
|
this.getDataNamesByData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {
|
||||||
|
title: {
|
||||||
|
text: this.text,
|
||||||
|
subtext: this.subtext,
|
||||||
|
left: 'center'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'item',
|
||||||
|
formatter: '{a} <br/>{b} : {c} ({d}%)'
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: 'vertical',
|
||||||
|
left: 20,
|
||||||
|
data: this.dataNames
|
||||||
|
},
|
||||||
|
series : [
|
||||||
|
{
|
||||||
|
name: this.name,
|
||||||
|
type: 'pie',
|
||||||
|
radius: '55%',
|
||||||
|
roseType: 'angle',
|
||||||
|
data: this.data
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
dataNames: ['示例1','示例2','示例3']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
text: {
|
||||||
|
type: String,
|
||||||
|
default: '图表名称'
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
default: '数据名称'
|
||||||
|
},
|
||||||
|
subtext: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
value:235, name:'示例1',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#67C23A'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:274, name:'示例2',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#E6A23C'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:274, name:'示例3',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#F56C6C'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getDataNamesByData() {
|
||||||
|
let itemNames = [];
|
||||||
|
this.data.forEach(item => {
|
||||||
|
itemNames.push(item.name);
|
||||||
|
});
|
||||||
|
this.dataNames = itemNames;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.echarts {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -14,7 +14,7 @@
|
||||||
<style scoped>
|
<style scoped>
|
||||||
#body {
|
#body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: calc(100vh - 40px);
|
height: calc(100vh - 80px);
|
||||||
background-color: #F5F5F5;
|
background-color: #F5F5F5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import PerformanceTestPlan from "../../performance/test/PerformanceTestPlan";
|
||||||
import Organization from "../../settings/system/Organization";
|
import Organization from "../../settings/system/Organization";
|
||||||
import OrganizationMember from "../../settings/organization/OrganizationMember";
|
import OrganizationMember from "../../settings/organization/OrganizationMember";
|
||||||
import Member from "../../settings/workspace/WorkspaceMember";
|
import Member from "../../settings/workspace/WorkspaceMember";
|
||||||
|
import TestCaseReportTemplate from "../../settings/workspace/TestCaseReportTemplate";
|
||||||
import TestResourcePool from "../../settings/system/TestResourcePool";
|
import TestResourcePool from "../../settings/system/TestResourcePool";
|
||||||
import MsProject from "../../project/MsProject";
|
import MsProject from "../../project/MsProject";
|
||||||
import OrganizationWorkspace from "../../settings/organization/OrganizationWorkspace";
|
import OrganizationWorkspace from "../../settings/organization/OrganizationWorkspace";
|
||||||
|
@ -78,6 +79,11 @@ const router = new VueRouter({
|
||||||
{
|
{
|
||||||
path: 'testresourcepool',
|
path: 'testresourcepool',
|
||||||
component: TestResourcePool
|
component: TestResourcePool
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'testcase/report/template',
|
||||||
|
name: 'testCaseReportTemplate',
|
||||||
|
component: TestCaseReportTemplate
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -49,13 +49,6 @@
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-dialog :title="title" :visible.sync="showTestLogging">
|
|
||||||
<el-tabs type="border-card" :stretch="true">
|
|
||||||
<el-tab-pane v-for="(item, key) in testLogging" :key="key" :label="key" class="logging-content">
|
|
||||||
{{item}}
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -88,8 +81,6 @@
|
||||||
minutes: '0',
|
minutes: '0',
|
||||||
seconds: '0',
|
seconds: '0',
|
||||||
title: 'Logging',
|
title: 'Logging',
|
||||||
testLogging: null,
|
|
||||||
showTestLogging: false,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -119,11 +110,6 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getLog(testId) {
|
|
||||||
this.result = this.$get('/performance/log/' + testId, response => {
|
|
||||||
this.testLogging = response.data;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.reportId = this.$route.path.split('/')[4];
|
this.reportId = this.$route.path.split('/')[4];
|
||||||
|
@ -139,8 +125,6 @@
|
||||||
this.$info("报告生成中....");
|
this.$info("报告生成中....");
|
||||||
break;
|
break;
|
||||||
case 'Running':
|
case 'Running':
|
||||||
this.showTestLogging = true;
|
|
||||||
this.getLog(data.testId);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -190,9 +174,4 @@
|
||||||
color: #5C7878;
|
color: #5C7878;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logging-content {
|
|
||||||
white-space: pre-line;
|
|
||||||
height: calc(100vh - 450px);
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,15 +1,45 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div v-loading="result.loading">
|
||||||
LogDetails
|
<el-tabs type="border-card" :stretch="true">
|
||||||
|
<el-tab-pane v-for="(item, key) in logContent" :key="key" :label="key" class="logging-content">
|
||||||
|
{{item}}
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "LogDetails"
|
name: "LogDetails",
|
||||||
|
props: ['id', 'status'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
logContent: null,
|
||||||
|
result: {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initTableData() {
|
||||||
|
this.result = this.$get("/performance/report/log/" + this.id, res => {
|
||||||
|
this.logContent = res.data;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
status() {
|
||||||
|
if ("Completed" === this.status) {
|
||||||
|
this.initTableData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.logging-content {
|
||||||
|
white-space: pre-line;
|
||||||
|
overflow: auto;
|
||||||
|
height: calc(100vh - 400px);
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
stripe
|
stripe
|
||||||
border
|
border
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:default-sort = "{prop: 'samples', order: 'descending'}"
|
show-summary
|
||||||
|
:summary-method="getSummaries"
|
||||||
>
|
>
|
||||||
<el-table-column label="Requests" fixed width="450" align="center">
|
<el-table-column label="Requests" fixed width="450" align="center">
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -103,6 +104,54 @@
|
||||||
this.tableData = res.data;
|
this.tableData = res.data;
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
getSummaries(param) {
|
||||||
|
const {data} = param;
|
||||||
|
const sums = []
|
||||||
|
let allSamples = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.samples);
|
||||||
|
}, 0);
|
||||||
|
let failSize = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.ko);
|
||||||
|
}, 0);
|
||||||
|
let averageTimeTotal = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.average) * parseFloat(currentValue.samples);
|
||||||
|
}, 0);
|
||||||
|
let tp90Total = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.tp90) * parseFloat(currentValue.samples);
|
||||||
|
}, 0);
|
||||||
|
let tp95Total = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.tp95) * parseFloat(currentValue.samples);
|
||||||
|
}, 0);
|
||||||
|
let tp99Total = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.tp99) * parseFloat(currentValue.samples);
|
||||||
|
}, 0);
|
||||||
|
let transactions = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.transactions);
|
||||||
|
}, 0);
|
||||||
|
let received = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.received);
|
||||||
|
}, 0);
|
||||||
|
let sent = data.reduce(function (total, currentValue) {
|
||||||
|
return total + parseFloat(currentValue.sent);
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
let error = (Math.round(failSize / allSamples * 10000) / 100) + '%';
|
||||||
|
let averageTime = (averageTimeTotal / allSamples).toFixed(2);
|
||||||
|
let tp90 = (tp90Total / allSamples).toFixed(2);
|
||||||
|
let tp95 = (tp95Total / allSamples).toFixed(2);
|
||||||
|
let tp99 = (tp99Total / allSamples).toFixed(2);
|
||||||
|
let min = Math.min.apply(Math, data.map(function (o) {
|
||||||
|
return parseFloat(o.min)
|
||||||
|
}));
|
||||||
|
let max = Math.max.apply(Math, data.map(function (o) {
|
||||||
|
return parseFloat(o.max)
|
||||||
|
}));
|
||||||
|
|
||||||
|
sums.push('Total', allSamples, failSize, error, averageTime, min, max, tp90, tp95, tp99, transactions, received, sent);
|
||||||
|
|
||||||
|
return sums;
|
||||||
|
|
||||||
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
status() {
|
status() {
|
||||||
|
@ -111,7 +160,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: ['id','status']
|
props: ['id', 'status']
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="pressure-config-container">
|
<div v-loading="result.loading" class="pressure-config-container">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
|
@ -110,6 +110,7 @@
|
||||||
props: ['testPlan'],
|
props: ['testPlan'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
result: {},
|
||||||
threadNumber: 10,
|
threadNumber: 10,
|
||||||
duration: 10,
|
duration: 10,
|
||||||
rampUpTime: 10,
|
rampUpTime: 10,
|
||||||
|
@ -148,8 +149,12 @@
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getResourcePools() {
|
getResourcePools() {
|
||||||
this.$get('/testresourcepool/list/all/valid', response => {
|
this.result = this.$get('/testresourcepool/list/all/valid', response => {
|
||||||
this.resourcePools = response.data;
|
this.resourcePools = response.data;
|
||||||
|
// 如果当前的资源池无效 设置 null
|
||||||
|
if (response.data.filter(p => p.id === this.resourcePool).length === 0) {
|
||||||
|
this.resourcePool = null;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getLoadConfig(testId) {
|
getLoadConfig(testId) {
|
||||||
|
|
|
@ -7,7 +7,9 @@
|
||||||
<ms-setting-menu/>
|
<ms-setting-menu/>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<router-view class="main-content"/>
|
<keep-alive>
|
||||||
|
<router-view class="main-content"/>
|
||||||
|
</keep-alive>
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
<span>{{$t('commons.workspace')}}</span>
|
<span>{{$t('commons.workspace')}}</span>
|
||||||
</template>
|
</template>
|
||||||
<el-menu-item index="/setting/member">{{$t('commons.member')}}</el-menu-item>
|
<el-menu-item index="/setting/member">{{$t('commons.member')}}</el-menu-item>
|
||||||
|
<el-menu-item index="/setting/testcase/report/template">测试报告模版</el-menu-item>
|
||||||
</el-submenu>
|
</el-submenu>
|
||||||
|
|
||||||
<el-submenu index="4">
|
<el-submenu index="4">
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div v-loading="result.loading">
|
<div v-loading="result.loading">
|
||||||
<el-card>
|
<el-card>
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
<ms-table-header :condition.sync="condition" @search="initTableData" @create="create"
|
||||||
:create-tip="btnTips" :title="$t('commons.member')"/>
|
:create-tip="btnTips" :title="$t('commons.member')"/>
|
||||||
</template>
|
</template>
|
||||||
<el-table :data="tableData" style="width: 100%">
|
<el-table :data="tableData" style="width: 100%">
|
||||||
|
@ -162,9 +162,6 @@
|
||||||
buildPagePath(path) {
|
buildPagePath(path) {
|
||||||
return path + "/" + this.currentPage + "/" + this.pageSize;
|
return path + "/" + this.currentPage + "/" + this.pageSize;
|
||||||
},
|
},
|
||||||
search() {
|
|
||||||
this.initTableData();
|
|
||||||
},
|
|
||||||
closeFunc() {
|
closeFunc() {
|
||||||
this.form = {};
|
this.form = {};
|
||||||
this.initTableData();
|
this.initTableData();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<el-card v-loading="result.loading">
|
<el-card v-loading="result.loading">
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
<ms-table-header :condition.sync="condition" @search="list" @create="create"
|
||||||
:create-tip="btnTips" :title="$t('commons.workspace')"/>
|
:create-tip="btnTips" :title="$t('commons.workspace')"/>
|
||||||
</template>
|
</template>
|
||||||
<el-table :data="items" style="width: 100%">
|
<el-table :data="items" style="width: 100%">
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
<!-- dialog of workspace member -->
|
<!-- dialog of workspace member -->
|
||||||
<el-dialog :visible.sync="dialogWsMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
<el-dialog :visible.sync="dialogWsMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
||||||
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="wsMemberList"
|
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="dialogSearch"
|
||||||
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
||||||
<!-- organization member table -->
|
<!-- organization member table -->
|
||||||
<el-table :data="memberLineData" style="width: 100%;margin-top: 5px;">
|
<el-table :data="memberLineData" style="width: 100%;margin-top: 5px;">
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<ms-table-pagination :change="wsMemberList" :current-page.sync="dialogCurrentPage" :page-size.sync="dialogPageSize"
|
<ms-table-pagination :change="dialogSearch" :current-page.sync="dialogCurrentPage" :page-size.sync="dialogPageSize"
|
||||||
:total="dialogTotal"/>
|
:total="dialogTotal"/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
@ -202,16 +202,13 @@
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$get('/workspace/delete/' + row.id, () => {
|
this.$get('/workspace/delete/' + row.id, () => {
|
||||||
Message.success(this.$t('commons.delete_success'));
|
this.$success(this.$t('commons.delete_success'));
|
||||||
this.list();
|
this.list();
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
search() {
|
|
||||||
this.list();
|
|
||||||
},
|
|
||||||
list() {
|
list() {
|
||||||
let url = '/workspace/list/' + this.currentPage + '/' + this.pageSize;
|
let url = '/workspace/list/' + this.currentPage + '/' + this.pageSize;
|
||||||
let lastOrganizationId = this.currentUser.lastOrganizationId;
|
let lastOrganizationId = this.currentUser.lastOrganizationId;
|
||||||
|
@ -274,7 +271,7 @@
|
||||||
this.dialogTotal = data.itemCount;
|
this.dialogTotal = data.itemCount;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
wsMemberList() {
|
dialogSearch() {
|
||||||
let row = this.currentWorkspaceRow;
|
let row = this.currentWorkspaceRow;
|
||||||
this.dialogWsMemberVisible = true;
|
this.dialogWsMemberVisible = true;
|
||||||
let param = this.dialogCondition;
|
let param = this.dialogCondition;
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
<!-- dialog of organization member -->
|
<!-- dialog of organization member -->
|
||||||
<el-dialog :visible.sync="dialogOrgMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
<el-dialog :visible.sync="dialogOrgMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
||||||
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="orgMemberList"
|
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="dialogSearch"
|
||||||
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
||||||
<!-- organization member table -->
|
<!-- organization member table -->
|
||||||
<el-table :data="memberLineData" style="width: 100%;margin-top:5px;">
|
<el-table :data="memberLineData" style="width: 100%;margin-top:5px;">
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<ms-table-pagination :change="orgMemberList" :current-page.sync="dialogCurrentPage"
|
<ms-table-pagination :change="dialogSearch" :current-page.sync="dialogCurrentPage"
|
||||||
:page-size.sync="dialogPageSize"
|
:page-size.sync="dialogPageSize"
|
||||||
:total="dialogTotal"/>
|
:total="dialogTotal"/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
@ -220,7 +220,7 @@
|
||||||
rule: {
|
rule: {
|
||||||
name: [
|
name: [
|
||||||
{required: true, message: this.$t('organization.input_name'), trigger: 'blur'},
|
{required: true, message: this.$t('organization.input_name'), trigger: 'blur'},
|
||||||
{min: 2, max: 10, message: this.$t('commons.input_limit', [2, 50]), trigger: 'blur'},
|
{min: 2, max: 50, message: this.$t('commons.input_limit', [2, 50]), trigger: 'blur'},
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9.·-]+$/,
|
pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9.·-]+$/,
|
||||||
|
@ -295,7 +295,7 @@
|
||||||
this.dialogTotal = data.itemCount;
|
this.dialogTotal = data.itemCount;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
orgMemberList() {
|
dialogSearch() {
|
||||||
let row = this.currentRow;
|
let row = this.currentRow;
|
||||||
this.dialogOrgMemberVisible = true;
|
this.dialogOrgMemberVisible = true;
|
||||||
let param = this.dialogCondition;
|
let param = this.dialogCondition;
|
||||||
|
@ -322,7 +322,7 @@
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.result = this.$get(this.deletePath + row.id, () => {
|
this.result = this.$get(this.deletePath + row.id, () => {
|
||||||
this.$success(this.$t('commons.delete_success'));
|
this.$success(this.$t('commons.delete_success'));
|
||||||
this.initTableData()
|
this.initTableData();
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.$info(this.$t('commons.delete_cancel'));
|
this.$info(this.$t('commons.delete_cancel'));
|
||||||
|
@ -343,8 +343,8 @@
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
createOrganization(createOrganizationForm) {
|
createOrganization(createOrganizationForm) {
|
||||||
this.$refs[createOrganizationForm].validate(valide => {
|
this.$refs[createOrganizationForm].validate(valid => {
|
||||||
if (valide) {
|
if (valid) {
|
||||||
this.result = this.$post(this.createPath, this.form, () => {
|
this.result = this.$post(this.createPath, this.form, () => {
|
||||||
this.$success(this.$t('commons.save_success'));
|
this.$success(this.$t('commons.save_success'));
|
||||||
this.initTableData();
|
this.initTableData();
|
||||||
|
@ -355,11 +355,11 @@
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
updateOrganization(udpateOrganizationForm) {
|
updateOrganization(updateOrganizationForm) {
|
||||||
this.$refs[udpateOrganizationForm].validate(valide => {
|
this.$refs[updateOrganizationForm].validate(valid => {
|
||||||
if (valide) {
|
if (valid) {
|
||||||
this.result = this.$post(this.updatePath, this.form, () => {
|
this.result = this.$post(this.updatePath, this.form, () => {
|
||||||
this.$success(this.$t('commons.modify_success'))
|
this.$success(this.$t('commons.modify_success'));
|
||||||
this.dialogOrgUpdateVisible = false;
|
this.dialogOrgUpdateVisible = false;
|
||||||
this.initTableData();
|
this.initTableData();
|
||||||
});
|
});
|
||||||
|
@ -423,7 +423,7 @@
|
||||||
organizationId: this.currentRow.id
|
organizationId: this.currentRow.id
|
||||||
}
|
}
|
||||||
this.result = this.$post("/organization/member/update", param, () => {
|
this.result = this.$post("/organization/member/update", param, () => {
|
||||||
this.$success(this.$t('commons.modify_success'))
|
this.$success(this.$t('commons.modify_success'));
|
||||||
this.dialogOrgMemberUpdateVisible = false;
|
this.dialogOrgMemberUpdateVisible = false;
|
||||||
this.cellClick(this.currentRow);
|
this.cellClick(this.currentRow);
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<el-card v-loading="result.loading">
|
<el-card v-loading="result.loading">
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
<ms-table-header :condition.sync="condition" @search="list" @create="create"
|
||||||
:create-tip="btnTips" :title="$t('commons.workspace')"/>
|
:create-tip="btnTips" :title="$t('commons.workspace')"/>
|
||||||
</template>
|
</template>
|
||||||
<!-- workspace table -->
|
<!-- workspace table -->
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
|
|
||||||
<!-- dialog of workspace member -->
|
<!-- dialog of workspace member -->
|
||||||
<el-dialog :visible.sync="dialogWsMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
<el-dialog :visible.sync="dialogWsMemberVisible" width="70%" :destroy-on-close="true" @close="closeMemberFunc">
|
||||||
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="wsMemberList"
|
<ms-table-header :condition.sync="dialogCondition" @create="addMember" @search="dialogSearch"
|
||||||
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
:create-tip="dialogBtnTips" :title="$t('commons.member')"/>
|
||||||
<!-- organization member table -->
|
<!-- organization member table -->
|
||||||
<el-table :data="memberLineData" style="width: 100%;margin-top: 5px;">
|
<el-table :data="memberLineData" style="width: 100%;margin-top: 5px;">
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<ms-table-pagination :change="wsMemberList" :current-page.sync="dialogCurrentPage"
|
<ms-table-pagination :change="dialogSearch" :current-page.sync="dialogCurrentPage"
|
||||||
:page-size.sync="dialogPageSize"
|
:page-size.sync="dialogPageSize"
|
||||||
:total="dialogTotal"/>
|
:total="dialogTotal"/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
@ -262,7 +262,7 @@
|
||||||
this.dialogTotal = data.itemCount;
|
this.dialogTotal = data.itemCount;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
wsMemberList() {
|
dialogSearch() {
|
||||||
let row = this.currentWorkspaceRow;
|
let row = this.currentWorkspaceRow;
|
||||||
this.dialogWsMemberVisible = true;
|
this.dialogWsMemberVisible = true;
|
||||||
let param = this.dialogCondition;
|
let param = this.dialogCondition;
|
||||||
|
@ -324,9 +324,6 @@
|
||||||
this.memberLineData = [];
|
this.memberLineData = [];
|
||||||
this.list();
|
this.list();
|
||||||
},
|
},
|
||||||
search() {
|
|
||||||
this.list();
|
|
||||||
},
|
|
||||||
list() {
|
list() {
|
||||||
let url = '/workspace/list/all/' + this.currentPage + '/' + this.pageSize;
|
let url = '/workspace/list/all/' + this.currentPage + '/' + this.pageSize;
|
||||||
this.result = this.$post(url, this.condition, response => {
|
this.result = this.$post(url, this.condition, response => {
|
||||||
|
|
|
@ -170,27 +170,18 @@
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.result = this.$get(this.deletePath + row.id, () => {
|
this.result = this.$get(this.deletePath + row.id, () => {
|
||||||
this.$message({
|
this.$success(this.$t('commons.delete_success'));
|
||||||
type: 'success',
|
|
||||||
message: this.$t('commons.delete_success')
|
|
||||||
});
|
|
||||||
this.search();
|
this.search();
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.$message({
|
this.$info(this.$t('commons.delete_cancel'));
|
||||||
type: 'info',
|
|
||||||
message: this.$t('commons.delete_cancel')
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
createUser(createUserForm) {
|
createUser(createUserForm) {
|
||||||
this.$refs[createUserForm].validate(valide => {
|
this.$refs[createUserForm].validate(valid => {
|
||||||
if (valide) {
|
if (valid) {
|
||||||
this.result = this.$post(this.createPath, this.form, () => {
|
this.result = this.$post(this.createPath, this.form, () => {
|
||||||
this.$message({
|
this.$success(this.$t('commons.save_success'));
|
||||||
type: 'success',
|
|
||||||
message: this.$t('commons.save_success')
|
|
||||||
});
|
|
||||||
this.search();
|
this.search();
|
||||||
this.createVisible = false;
|
this.createVisible = false;
|
||||||
});
|
});
|
||||||
|
@ -200,13 +191,10 @@
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
updateUser(updateUserForm) {
|
updateUser(updateUserForm) {
|
||||||
this.$refs[updateUserForm].validate(valide => {
|
this.$refs[updateUserForm].validate(valid => {
|
||||||
if (valide) {
|
if (valid) {
|
||||||
this.result = this.$post(this.updatePath, this.form, () => {
|
this.result = this.$post(this.updatePath, this.form, () => {
|
||||||
this.$message({
|
this.$success(this.$t('commons.modify_success'));
|
||||||
type: 'success',
|
|
||||||
message: this.$t('commons.modify_success')
|
|
||||||
});
|
|
||||||
this.updateVisible = false;
|
this.updateVisible = false;
|
||||||
this.search();
|
this.search();
|
||||||
});
|
});
|
||||||
|
@ -227,10 +215,7 @@
|
||||||
},
|
},
|
||||||
changeSwitch(row) {
|
changeSwitch(row) {
|
||||||
this.$post(this.updatePath, row, () => {
|
this.$post(this.updatePath, row, () => {
|
||||||
this.$message({
|
this.$success(this.$t('commons.modify_success'));
|
||||||
type: 'success',
|
|
||||||
message: this.$t('commons.modify_success')
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
buildPagePath(path) {
|
buildPagePath(path) {
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<div v-loading="result.loading">
|
||||||
|
<el-card>
|
||||||
|
<template v-slot:header>
|
||||||
|
<ms-table-header :condition.sync="condition" @search="initData"
|
||||||
|
:title="'测试报告模版'"
|
||||||
|
:create-tip="'新建模版'" @create="templateEdit">
|
||||||
|
|
||||||
|
</ms-table-header>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-main>
|
||||||
|
<testcase-template-item v-for="item in templates" :key="item.id"
|
||||||
|
:template="item" @templateEdit="templateEdit"/>
|
||||||
|
</el-main>
|
||||||
|
|
||||||
|
<test-case-report-template-edit ref="templateEdit"/>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import MsTableHeader from "../../common/components/MsTableHeader";
|
||||||
|
import TestCaseReportTemplateEdit from "./components/TestCaseReportTemplateEdit";
|
||||||
|
import TestcaseTemplateItem from "./components/TestcaseTemplateItem";
|
||||||
|
import {WORKSPACE_ID} from '../../../../common/js/constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TestCaseReportTemplate",
|
||||||
|
components: {TestcaseTemplateItem, TestCaseReportTemplateEdit, MsTableHeader},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
result: {},
|
||||||
|
condition: {},
|
||||||
|
templates: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.initData();
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
'$route'(to) {
|
||||||
|
if (to.path.indexOf("setting/testcase/report/template") >= 0) {
|
||||||
|
this.initData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initData() {
|
||||||
|
this.condition.workspaceId = localStorage.getItem(WORKSPACE_ID);
|
||||||
|
this.result = this.$post('/case/report/template/list', this.condition, response => {
|
||||||
|
this.templates = response.data;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
templateCreate() {
|
||||||
|
|
||||||
|
},
|
||||||
|
templateEdit(template) {
|
||||||
|
this.$refs.templateEdit.open(template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
|
@ -2,7 +2,7 @@
|
||||||
<div v-loading="result.loading">
|
<div v-loading="result.loading">
|
||||||
<el-card>
|
<el-card>
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<ms-table-header :condition.sync="condition" @search="search" @create="create"
|
<ms-table-header :condition.sync="condition" @search="initTableData" @create="create"
|
||||||
:create-tip="btnTips" :title="$t('commons.member')"/>
|
:create-tip="btnTips" :title="$t('commons.member')"/>
|
||||||
</template>
|
</template>
|
||||||
<el-table :data="tableData" style="width: 100%">
|
<el-table :data="tableData" style="width: 100%">
|
||||||
|
@ -167,15 +167,12 @@
|
||||||
buildPagePath(path) {
|
buildPagePath(path) {
|
||||||
return path + "/" + this.currentPage + "/" + this.pageSize;
|
return path + "/" + this.currentPage + "/" + this.pageSize;
|
||||||
},
|
},
|
||||||
search() {
|
|
||||||
this.initTableData();
|
|
||||||
},
|
|
||||||
closeFunc() {
|
closeFunc() {
|
||||||
this.form = {};
|
this.form = {};
|
||||||
this.initTableData();
|
this.initTableData();
|
||||||
},
|
},
|
||||||
del(row) {
|
del(row) {
|
||||||
this.$confirm('移除该成员, 是否继续?', '提示', {
|
this.$confirm(this.$t('member.delete_confirm'), '', {
|
||||||
confirmButtonText: this.$t('commons.confirm'),
|
confirmButtonText: this.$t('commons.confirm'),
|
||||||
cancelButtonText: this.$t('commons.cancel'),
|
cancelButtonText: this.$t('commons.cancel'),
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
|
@ -224,7 +221,7 @@
|
||||||
};
|
};
|
||||||
let wsId = this.currentUser().lastWorkspaceId;
|
let wsId = this.currentUser().lastWorkspaceId;
|
||||||
if (typeof wsId == "undefined" || wsId == null || wsId == "") {
|
if (typeof wsId == "undefined" || wsId == null || wsId == "") {
|
||||||
this.$warning("请先选择工作空间!");
|
this.$warning(this.$t('workspace.please_select_a_workspace_first'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.$post('/user/org/member/list/all', param, response => {
|
this.$post('/user/org/member/list/all', param, response => {
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
|
||||||
|
<common-component :title="'基础信息'">
|
||||||
|
|
||||||
|
<el-row type="flex" justify="space-between">
|
||||||
|
<el-col :span="12">
|
||||||
|
<span>所属项目:</span>
|
||||||
|
<span class="item-value">{{reportInfo.project}}</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<span>测试负责人:</span>
|
||||||
|
<span class="item-value">{{reportInfo.principal}}</span>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row type="flex" justify="space-between">
|
||||||
|
<el-col :span="12">
|
||||||
|
<span>开始时间:</span>
|
||||||
|
<span class="item-value">{{reportInfo.startTime}}</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<span>结束时间:</span>
|
||||||
|
<span class="item-value">{{reportInfo.endTime}}</span>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row type="flex" justify="space-between">
|
||||||
|
<el-col :span="12">
|
||||||
|
<span>测试执行人:</span>
|
||||||
|
<span v-for="item in reportInfo.executors" :key="item">{{item}}</span>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
</common-component>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CommonComponent from "./CommonComponent";
|
||||||
|
export default {
|
||||||
|
name: "BaseInfoComponent",
|
||||||
|
components: {CommonComponent},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
reportInfo: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {
|
||||||
|
project: '项目名称',
|
||||||
|
principal: '由丽媛',
|
||||||
|
executors: ['由丽媛','王振','陈建星'],
|
||||||
|
startTime: '2020-6-18',
|
||||||
|
endTime: '2020-6-18'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
span {
|
||||||
|
margin-right: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-col span:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-row {
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<template>
|
||||||
|
<el-card class="template-component">
|
||||||
|
|
||||||
|
<template v-slot:header>
|
||||||
|
<slot name="header">
|
||||||
|
<span class="title">{{title}}</span>
|
||||||
|
</slot>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-main>
|
||||||
|
|
||||||
|
<slot></slot>
|
||||||
|
|
||||||
|
</el-main>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "CommonComponent",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '标题'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.el-main {
|
||||||
|
min-height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,67 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<common-component :title="'测试结果统计'">
|
||||||
|
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<ms-pie-chart :text="'测试结果统计图'" :name="'测试结果'" :data="charData"/>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</common-component>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CommonComponent from "./CommonComponent";
|
||||||
|
import MsPieChart from "../../../../common/components/MsPieChart";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TestResultChartComponent",
|
||||||
|
components: {MsPieChart, CommonComponent},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
charData: [
|
||||||
|
{
|
||||||
|
value:235, name:'通过',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#67C23A'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:274, name:'阻塞',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#E6A23C'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:310, name:'失败',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#F56C6C'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:335, name:'跳过',
|
||||||
|
itemStyle: {
|
||||||
|
color: '#909399'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value:400, name:'未完成',
|
||||||
|
itemStyle: {
|
||||||
|
color: 'lightskyblue'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.echarts {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,76 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<common-component :title="'测试结果'">
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-table
|
||||||
|
:data="testResults"
|
||||||
|
stripe
|
||||||
|
style="width: 100%">
|
||||||
|
<el-table-column
|
||||||
|
prop="module"
|
||||||
|
:label="'模块'"
|
||||||
|
width="180">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="caseCount"
|
||||||
|
:label="'用例数'"
|
||||||
|
width="180">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="passRate"
|
||||||
|
:label="'通过率'">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="flawCount"
|
||||||
|
:label="'缺陷数'">
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</common-component>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CommonComponent from "./CommonComponent";
|
||||||
|
export default {
|
||||||
|
name: "TestResultComponent",
|
||||||
|
components: {CommonComponent},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
testResults: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
module: '模块1',
|
||||||
|
caseCount: '14',
|
||||||
|
passRate: 10.8,
|
||||||
|
flawCount: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
module: '模块2',
|
||||||
|
caseCount: '24',
|
||||||
|
passRate: 40,
|
||||||
|
flawCount: 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
module: '模块3',
|
||||||
|
caseCount: '50',
|
||||||
|
passRate: 76.9,
|
||||||
|
flawCount: 8
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,55 @@
|
||||||
|
<template>
|
||||||
|
<el-button class="template-component">
|
||||||
|
<i class="el-icon-s-unfold"/>
|
||||||
|
<span>{{ component.name }}</span>
|
||||||
|
<el-tag v-if="component.type == 'system'" size="mini" type="success">系统</el-tag>
|
||||||
|
<el-tag v-if="component.type == 'custom'" size="mini">自定义</el-tag>
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "TemplateComponentBar",
|
||||||
|
props: {
|
||||||
|
component: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.template-component i {
|
||||||
|
float: left;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-component .el-tag {
|
||||||
|
float: right;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-component span {
|
||||||
|
display: inline-block;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-component {
|
||||||
|
display: block;
|
||||||
|
margin-left: 10px;
|
||||||
|
width: 90%;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-component {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,221 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<el-drawer
|
||||||
|
:before-close="handleClose"
|
||||||
|
:visible.sync="showDialog"
|
||||||
|
:with-header="false"
|
||||||
|
size="100%"
|
||||||
|
ref="drawer"
|
||||||
|
v-loading="result.loading">
|
||||||
|
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
|
||||||
|
<el-row type="flex" class="head-bar">
|
||||||
|
|
||||||
|
<el-col :span="12">
|
||||||
|
|
||||||
|
<div class="name-edit">
|
||||||
|
<el-input :placeholder="'请填写模版名称'" v-model="name"/>
|
||||||
|
<span v-if="name != ''">{{name}}</span>
|
||||||
|
<span v-if="name == ''">请填写模版名称</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="12" class="head-right">
|
||||||
|
<el-button plain size="mini" @click="handleClose">{{$t('test_track.return')}}</el-button>
|
||||||
|
<el-button type="primary" size="mini" @click="handleClose">{{$t('test_track.save')}}</el-button>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
|
||||||
|
<el-aside>
|
||||||
|
|
||||||
|
<div class="description">
|
||||||
|
<span class="title">组件库</span>
|
||||||
|
<span>从组件库把需要使用的组件拖到右侧,预览测试报告的效果。系统组件只能添加一次。自定义组件,可以设定默认的标题和内容。</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<draggable
|
||||||
|
class="component-group"
|
||||||
|
:list="components"
|
||||||
|
:group="{ name: 'people', pull: 'clone', put: false }"
|
||||||
|
:clone="cloneDog"
|
||||||
|
@change="log">
|
||||||
|
<template-component-bar v-for="item in components" :key="item.id" :component="item"/>
|
||||||
|
</draggable>
|
||||||
|
|
||||||
|
</el-aside>
|
||||||
|
|
||||||
|
<el-main>
|
||||||
|
<draggable
|
||||||
|
class="preview-group"
|
||||||
|
:list="previews"
|
||||||
|
group="people"
|
||||||
|
@change="log">
|
||||||
|
|
||||||
|
<base-info-component/>
|
||||||
|
<test-result-component/>
|
||||||
|
<test-result-chart-component/>
|
||||||
|
|
||||||
|
<el-card class="template-component" v-for="item in previews" :key="item.id">
|
||||||
|
|
||||||
|
<template v-slot:header>
|
||||||
|
{{item.name}}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<ckeditor :editor="editor" v-model="editorData" :config="editorConfig"></ckeditor>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
</draggable>
|
||||||
|
|
||||||
|
</el-main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import draggable from 'vuedraggable';
|
||||||
|
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
|
||||||
|
import BaseInfoComponent from "./TemplateComponent/BaseInfoComponent";
|
||||||
|
import TestResultComponent from "./TemplateComponent/TestResultComponent";
|
||||||
|
import TestResultChartComponent from "./TemplateComponent/TestResultChartComponent";
|
||||||
|
import TemplateComponentBar from "./TemplateComponentBar";
|
||||||
|
|
||||||
|
let idGlobal = 8;
|
||||||
|
export default {
|
||||||
|
name: "TestCaseReportTemplateEdit",
|
||||||
|
components: {
|
||||||
|
TemplateComponentBar,
|
||||||
|
TestResultChartComponent,
|
||||||
|
TestResultComponent,
|
||||||
|
BaseInfoComponent,
|
||||||
|
draggable
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showDialog: false,
|
||||||
|
template: {},
|
||||||
|
result: {},
|
||||||
|
name: '',
|
||||||
|
type: 'edit',
|
||||||
|
components: [
|
||||||
|
{ name: "基础信息", id: 1 , type: 'system'},
|
||||||
|
{ name: "测试结果", id: 2 , type: 'system'},
|
||||||
|
{ name: "测试结果分布", id: 3 ,type: 'system'},
|
||||||
|
{ name: "自定义模块", id: 4 ,type: 'custom'}
|
||||||
|
],
|
||||||
|
previews: [
|
||||||
|
{ name: "cat 5", id: 5 },
|
||||||
|
{ name: "cat 6", id: 6 },
|
||||||
|
{ name: "cat 7", id: 7 }
|
||||||
|
],
|
||||||
|
|
||||||
|
editor: ClassicEditor,
|
||||||
|
editorData: '<p>Content of the editor.</p>',
|
||||||
|
editorConfig: {
|
||||||
|
// The configuration of the editor.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
open() {
|
||||||
|
this.showDialog = true;
|
||||||
|
},
|
||||||
|
handleClose() {
|
||||||
|
this.showDialog = false;
|
||||||
|
},
|
||||||
|
log: function(evt) {
|
||||||
|
window.console.log(evt);
|
||||||
|
},
|
||||||
|
cloneDog({ id }) {
|
||||||
|
return {
|
||||||
|
id: idGlobal++,
|
||||||
|
name: `cat ${id}`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.head-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.head-bar {
|
||||||
|
background: white;
|
||||||
|
height: 45px;
|
||||||
|
line-height: 45px;
|
||||||
|
padding: 0 10px;
|
||||||
|
border: 1px solid #EBEEF5;
|
||||||
|
box-shadow: 0 0 2px 0 rgba(31,31,31,0.15), 0 1px 2px 0 rgba(31,31,31,0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.name-edit:hover span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name-edit .el-input {
|
||||||
|
display: none;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name-edit:hover .el-input{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-aside {
|
||||||
|
border: 1px solid #EBEEF5;
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-height: calc(100vh - 70px);
|
||||||
|
padding: 20px 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: white;
|
||||||
|
position: absolute;
|
||||||
|
width: 250px;
|
||||||
|
box-shadow: 0 0 2px 0 rgba(31,31,31,0.15), 0 1px 2px 0 rgba(31,31,31,0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-main {
|
||||||
|
height: calc(100vh - 70px);
|
||||||
|
width: calc(100vw - 320px);
|
||||||
|
margin-left: 300px;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-card {
|
||||||
|
margin: 5px auto;
|
||||||
|
min-height: 300px;
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description > span {
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
height: 100vh;
|
||||||
|
background: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,85 @@
|
||||||
|
<template>
|
||||||
|
<div class="testcase-template" @click="templateEdit">
|
||||||
|
<div class="template-img" @click="templateDelete">
|
||||||
|
<i class="el-icon-error" v-if="template.workspaceId"/>
|
||||||
|
</div>
|
||||||
|
<span class="demonstration">{{ template.name }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "TestcaseTemplateItem",
|
||||||
|
props: {
|
||||||
|
template: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
templateEdit() {
|
||||||
|
this.$emit('templateEdit', this.template);
|
||||||
|
},
|
||||||
|
templateDelete() {
|
||||||
|
this.post('/case/report/template/delete/' + this.template.id, () => {
|
||||||
|
this.$success('删除成功');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.testcase-template {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 10px 30px;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demonstration {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px auto;
|
||||||
|
width: 150px;
|
||||||
|
white-space:nowrap;
|
||||||
|
overflow:hidden;
|
||||||
|
text-overflow:ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-img {
|
||||||
|
height: 100px;
|
||||||
|
width: 80px;
|
||||||
|
margin: 0 auto;
|
||||||
|
box-shadow: 0 0 2px 0 rgba(31,31,31,0.15), 0 1px 2px 0 rgba(31,31,31,0.15);
|
||||||
|
border: solid 2px #fff;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: url(../../../../../assets/template.png) no-repeat center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-img:hover {
|
||||||
|
border: solid 1px #4b8fdf;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: deepskyblue;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-img > i {
|
||||||
|
display:none;
|
||||||
|
float: right;
|
||||||
|
color: gray;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-img > i:hover {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-img:hover > .el-icon-error {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -33,8 +33,20 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
border: 1px solid #EBEEF5;
|
border: 1px solid #EBEEF5;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
min-height: calc(100vh - 80px);
|
||||||
background: white;
|
background: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.node-tree {
|
||||||
|
margin: 3%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.case-container {
|
||||||
|
min-height: 600px;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
|
@ -223,17 +223,6 @@
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.node-tree {
|
|
||||||
margin: 3%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.case-container {
|
|
||||||
height: calc(100vh - 150px);
|
|
||||||
min-height: 600px;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.test-case-list {
|
.test-case-list {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<el-container class="view-container">
|
<el-container class="case-container">
|
||||||
<el-aside class="tree-aside">
|
<el-aside class="tree-aside">
|
||||||
<select-menu
|
<select-menu
|
||||||
:data="testPlans"
|
:data="testPlans"
|
||||||
|
@ -112,16 +112,6 @@
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
|
|
||||||
.node-tree {
|
|
||||||
margin: 3%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.view-container {
|
|
||||||
height: calc(100vh - 150px);
|
|
||||||
min-height: 600px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-main {
|
.el-main {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {permission} from './permission'
|
||||||
import chart from "../common/js/chart";
|
import chart from "../common/js/chart";
|
||||||
import '../common/css/menu-header.css';
|
import '../common/css/menu-header.css';
|
||||||
import '../common/css/main.css';
|
import '../common/css/main.css';
|
||||||
|
import CKEditor from '@ckeditor/ckeditor5-vue';
|
||||||
|
|
||||||
Vue.config.productionTip = false;
|
Vue.config.productionTip = false;
|
||||||
Vue.use(icon);
|
Vue.use(icon);
|
||||||
|
@ -23,7 +24,8 @@ Vue.use(ElementUI, {
|
||||||
Vue.use(filters);
|
Vue.use(filters);
|
||||||
Vue.use(ajax);
|
Vue.use(ajax);
|
||||||
Vue.use(chart);
|
Vue.use(chart);
|
||||||
Vue.use(message)
|
Vue.use(message);
|
||||||
|
Vue.use(CKEditor);
|
||||||
|
|
||||||
// v-permission
|
// v-permission
|
||||||
Vue.directive('permission', permission);
|
Vue.directive('permission', permission);
|
||||||
|
|
|
@ -60,6 +60,7 @@ export default {
|
||||||
'search_by_name': 'Search by name',
|
'search_by_name': 'Search by name',
|
||||||
'organization_name': 'Organization Name',
|
'organization_name': 'Organization Name',
|
||||||
'please_choose_organization': 'Please Choose Organization',
|
'please_choose_organization': 'Please Choose Organization',
|
||||||
|
'please_select_a_workspace_first': 'Please select a workspace first!',
|
||||||
},
|
},
|
||||||
organization: {
|
organization: {
|
||||||
'create': 'Create',
|
'create': 'Create',
|
||||||
|
|
|
@ -62,6 +62,7 @@ export default {
|
||||||
'search_by_name': '根据名称搜索',
|
'search_by_name': '根据名称搜索',
|
||||||
'organization_name': '所属组织',
|
'organization_name': '所属组织',
|
||||||
'please_choose_organization': '请选择组织',
|
'please_choose_organization': '请选择组织',
|
||||||
|
'please_select_a_workspace_first': '请先选择工作空间!',
|
||||||
},
|
},
|
||||||
organization: {
|
organization: {
|
||||||
'create': '创建组织',
|
'create': '创建组织',
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"lockfileVersion": 1
|
|
||||||
}
|
|
Loading…
Reference in New Issue