Merge branch 'master' of https://github.com/metersphere/server
This commit is contained in:
commit
42d3e2098b
|
@ -13,12 +13,10 @@ import io.metersphere.notice.service.MailService;
|
||||||
import io.metersphere.notice.service.NoticeService;
|
import io.metersphere.notice.service.NoticeService;
|
||||||
import io.metersphere.track.service.TestPlanTestCaseService;
|
import io.metersphere.track.service.TestPlanTestCaseService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.protocol.HTTP;
|
|
||||||
import org.apache.jmeter.assertions.AssertionResult;
|
import org.apache.jmeter.assertions.AssertionResult;
|
||||||
import org.apache.jmeter.samplers.SampleResult;
|
import org.apache.jmeter.samplers.SampleResult;
|
||||||
import org.apache.jmeter.visualizers.backend.AbstractBackendListenerClient;
|
import org.apache.jmeter.visualizers.backend.AbstractBackendListenerClient;
|
||||||
import org.apache.jmeter.visualizers.backend.BackendListenerContext;
|
import org.apache.jmeter.visualizers.backend.BackendListenerContext;
|
||||||
import org.pac4j.core.context.HttpConstants;
|
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
@ -41,6 +39,12 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
|
|
||||||
private APIReportService apiReportService;
|
private APIReportService apiReportService;
|
||||||
|
|
||||||
|
private TestPlanTestCaseService testPlanTestCaseService;
|
||||||
|
|
||||||
|
private NoticeService noticeService;
|
||||||
|
|
||||||
|
private MailService mailService;
|
||||||
|
|
||||||
public String runMode = ApiRunMode.RUN.name();
|
public String runMode = ApiRunMode.RUN.name();
|
||||||
|
|
||||||
// 测试ID
|
// 测试ID
|
||||||
|
@ -60,6 +64,18 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
if (apiReportService == null) {
|
if (apiReportService == null) {
|
||||||
LogUtil.error("apiReportService is required");
|
LogUtil.error("apiReportService is required");
|
||||||
}
|
}
|
||||||
|
testPlanTestCaseService = CommonBeanFactory.getBean(TestPlanTestCaseService.class);
|
||||||
|
if (testPlanTestCaseService == null) {
|
||||||
|
LogUtil.error("testPlanTestCaseService is required");
|
||||||
|
}
|
||||||
|
noticeService = CommonBeanFactory.getBean(NoticeService.class);
|
||||||
|
if (noticeService == null) {
|
||||||
|
LogUtil.error("noticeService is required");
|
||||||
|
}
|
||||||
|
mailService = CommonBeanFactory.getBean(MailService.class);
|
||||||
|
if (mailService == null) {
|
||||||
|
LogUtil.error("mailService is required");
|
||||||
|
}
|
||||||
super.setupTest(context);
|
super.setupTest(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +128,7 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
|
|
||||||
testResult.getScenarios().addAll(scenarios.values());
|
testResult.getScenarios().addAll(scenarios.values());
|
||||||
testResult.getScenarios().sort(Comparator.comparing(ScenarioResult::getId));
|
testResult.getScenarios().sort(Comparator.comparing(ScenarioResult::getId));
|
||||||
ApiTestReport report = null;
|
ApiTestReport report;
|
||||||
if (StringUtils.equals(this.runMode, ApiRunMode.DEBUG.name())) {
|
if (StringUtils.equals(this.runMode, ApiRunMode.DEBUG.name())) {
|
||||||
report = apiReportService.get(debugReportId);
|
report = apiReportService.get(debugReportId);
|
||||||
} else {
|
} else {
|
||||||
|
@ -123,7 +139,6 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
queue.clear();
|
queue.clear();
|
||||||
super.teardownTest(context);
|
super.teardownTest(context);
|
||||||
|
|
||||||
TestPlanTestCaseService testPlanTestCaseService = CommonBeanFactory.getBean(TestPlanTestCaseService.class);
|
|
||||||
List<String> ids = testPlanTestCaseService.getTestPlanTestCaseIds(testResult.getTestId());
|
List<String> ids = testPlanTestCaseService.getTestPlanTestCaseIds(testResult.getTestId());
|
||||||
if (ids.size() > 0) {
|
if (ids.size() > 0) {
|
||||||
try {
|
try {
|
||||||
|
@ -137,10 +152,8 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
NoticeService noticeService = CommonBeanFactory.getBean(NoticeService.class);
|
|
||||||
try {
|
try {
|
||||||
List<NoticeDetail> noticeList = noticeService.queryNotice(testResult.getTestId());
|
List<NoticeDetail> noticeList = noticeService.queryNotice(testResult.getTestId());
|
||||||
MailService mailService = CommonBeanFactory.getBean(MailService.class);
|
|
||||||
mailService.sendApiNotification(report, noticeList);
|
mailService.sendApiNotification(report, noticeList);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit cf6b06526324326a563d933e07118fac014a63b4
|
Subproject commit ee74568be0beba46da19616f5832e83f9164c688
|
|
@ -555,14 +555,6 @@ export class TCPRequest extends Request {
|
||||||
}
|
}
|
||||||
|
|
||||||
isValid() {
|
isValid() {
|
||||||
if (this.enable) {
|
|
||||||
if (!this.server) {
|
|
||||||
return {
|
|
||||||
isValid: false,
|
|
||||||
info: 'api_test.request.tcp.server_cannot_be_empty'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
isValid: true
|
isValid: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,7 +243,7 @@
|
||||||
:label="$t('load_test.file_type')">
|
:label="$t('load_test.file_type')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:label="$t('load_test.last_modify_time')">
|
:label="$t('test_track.case.upload_time')">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<i class="el-icon-time"/>
|
<i class="el-icon-time"/>
|
||||||
<span class="last-modified">{{ scope.row.updateTime | timestampFormatDate }}</span>
|
<span class="last-modified">{{ scope.row.updateTime | timestampFormatDate }}</span>
|
||||||
|
@ -664,7 +664,7 @@ export default {
|
||||||
name: file.name,
|
name: file.name,
|
||||||
size: file.size + ' Bytes', /// todo: 按照大小显示Byte、KB、MB等
|
size: file.size + ' Bytes', /// todo: 按照大小显示Byte、KB、MB等
|
||||||
type: type.toUpperCase(),
|
type: type.toUpperCase(),
|
||||||
updateTime: file.lastModified,
|
updateTime: new Date().getTime(),
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -401,8 +401,7 @@ export default {
|
||||||
this.$success(this.$t('commons.save_success'));
|
this.$success(this.$t('commons.save_success'));
|
||||||
this.updateTestCases(param);
|
this.updateTestCases(param);
|
||||||
this.setPlanStatus(this.testCase.planId);
|
this.setPlanStatus(this.testCase.planId);
|
||||||
// 结果为Pass时 自动跳转到下一用例
|
if (this.index < this.testCases.length - 1) {
|
||||||
if (this.testCase.status === 'Pass' && this.index < this.testCases.length - 1) {
|
|
||||||
this.handleNext();
|
this.handleNext();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -39,11 +39,11 @@
|
||||||
<el-divider direction="vertical"></el-divider>
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
|
||||||
<el-button type="success" size="mini"
|
<el-button type="success" size="mini"
|
||||||
:disabled="isReadOnly" :plain="testCase.reviewStatus !== 'Pass'" @click="saveCase('Pass')">
|
:disabled="isReadOnly" :icon="testCase.reviewStatus === 'Pass' ? 'el-icon-check' : ''" @click="saveCase('Pass')">
|
||||||
{{ $t('test_track.review.pass') }}
|
{{ $t('test_track.review.pass') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="danger" size="mini"
|
<el-button type="danger" size="mini"
|
||||||
:disabled="isReadOnly" :plain="testCase.reviewStatus !== 'UnPass'" @click="saveCase('UnPass')">
|
:disabled="isReadOnly" :icon="testCase.reviewStatus === 'UnPass' ? 'el-icon-check' : ''" @click="saveCase('UnPass')">
|
||||||
{{ $t('test_track.review.un_pass') }}
|
{{ $t('test_track.review.un_pass') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -296,6 +296,9 @@ export default {
|
||||||
this.testCase.reviewStatus = status;
|
this.testCase.reviewStatus = status;
|
||||||
// 修改当前用例在整个用例列表的状态
|
// 修改当前用例在整个用例列表的状态
|
||||||
this.testCases[this.index].reviewStatus = status;
|
this.testCases[this.index].reviewStatus = status;
|
||||||
|
if (this.index < this.testCases.length - 1) {
|
||||||
|
this.handleNext();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
updateTestCases(param) {
|
updateTestCases(param) {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 06d935cd1d22ab36f09763745c2aff8ad3fb08c1
|
Subproject commit cc38137a69a0f20fadece9c0f9f50a9468c4ace9
|
|
@ -748,6 +748,7 @@ export default {
|
||||||
pdf_loading_fail: "PDF loading failed",
|
pdf_loading_fail: "PDF loading failed",
|
||||||
upload_tip: "Only jpg, jpeg, png, docx, doc, pdf, xlsx files can be uploaded",
|
upload_tip: "Only jpg, jpeg, png, docx, doc, pdf, xlsx files can be uploaded",
|
||||||
attachment: "Attachment",
|
attachment: "Attachment",
|
||||||
|
upload_time: "Upload Time",
|
||||||
import: {
|
import: {
|
||||||
import: "Import test case",
|
import: "Import test case",
|
||||||
case_import: "Import test case",
|
case_import: "Import test case",
|
||||||
|
|
|
@ -752,6 +752,7 @@ export default {
|
||||||
pdf_loading_fail: "PDF加载失败",
|
pdf_loading_fail: "PDF加载失败",
|
||||||
upload_tip: "只能上传jpg、jpeg、png、docx、doc、pdf、xlsx文件",
|
upload_tip: "只能上传jpg、jpeg、png、docx、doc、pdf、xlsx文件",
|
||||||
attachment: "附件",
|
attachment: "附件",
|
||||||
|
upload_time: "上传时间",
|
||||||
import: {
|
import: {
|
||||||
import: "导入用例",
|
import: "导入用例",
|
||||||
case_import: "导入测试用例",
|
case_import: "导入测试用例",
|
||||||
|
|
|
@ -752,6 +752,7 @@ export default {
|
||||||
pdf_loading_fail: "PDF加載失敗",
|
pdf_loading_fail: "PDF加載失敗",
|
||||||
upload_tip: "只能上傳jpg、jpeg、png、docx、doc、pdf、xlsx文件",
|
upload_tip: "只能上傳jpg、jpeg、png、docx、doc、pdf、xlsx文件",
|
||||||
attachment: "附件",
|
attachment: "附件",
|
||||||
|
upload_time: "上傳時間",
|
||||||
import: {
|
import: {
|
||||||
import: "導入用例",
|
import: "導入用例",
|
||||||
case_import: "導入測試用例",
|
case_import: "導入測試用例",
|
||||||
|
|
Loading…
Reference in New Issue