Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
4eac6ed9
M
metersphere
项目概览
MeterSphere
/
metersphere
上一次同步 3 年多
通知
25
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
metersphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4eac6ed9
编写于
3月 25, 2021
作者:
F
fit2-zhao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/metersphere/metersphere
上级
9f6e1992
f721b219
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
223 addition
and
161 deletion
+223
-161
backend/src/main/java/io/metersphere/track/controller/TestPlanReportController.java
...etersphere/track/controller/TestPlanReportController.java
+8
-6
backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java
...a/io/metersphere/track/service/TestPlanReportService.java
+124
-112
backend/src/main/java/io/metersphere/track/service/TestPlanService.java
...in/java/io/metersphere/track/service/TestPlanService.java
+91
-43
未找到文件。
backend/src/main/java/io/metersphere/track/controller/TestPlanReportController.java
浏览文件 @
4eac6ed9
...
...
@@ -2,22 +2,20 @@ package io.metersphere.track.controller;
import
com.github.pagehelper.Page
;
import
com.github.pagehelper.PageHelper
;
import
io.metersphere.base.domain.TestCaseReport
;
import
io.metersphere.base.domain.TestPlanReport
;
import
io.metersphere.commons.constants.ReportTriggerMode
;
import
io.metersphere.commons.utils.PageUtils
;
import
io.metersphere.commons.utils.Pager
;
import
io.metersphere.commons.utils.SessionUtils
;
import
io.metersphere.track.dto.TestCaseReportMetricDTO
;
import
io.metersphere.track.dto.TestPlanDTOWithMetric
;
import
io.metersphere.track.dto.TestPlanReportDTO
;
import
io.metersphere.track.request.report.QueryTestPlanReportRequest
;
import
io.metersphere.track.request.
testcase.QueryTestPlan
Request
;
import
io.metersphere.track.request.
report.TestPlanReportSave
Request
;
import
io.metersphere.track.service.TestPlanReportService
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.UUID
;
/**
* @author song.tianyang
...
...
@@ -62,14 +60,18 @@ public class TestPlanReportController {
@GetMapping
(
"/apiExecuteFinish/{planId}/{userId}"
)
public
void
apiExecuteFinish
(
@PathVariable
String
planId
,
@PathVariable
String
userId
)
{
TestPlanReport
report
=
testPlanReportService
.
genTestPlanReport
(
planId
,
userId
,
ReportTriggerMode
.
API
.
name
());
String
reportId
=
UUID
.
randomUUID
().
toString
();
TestPlanReportSaveRequest
saveRequest
=
new
TestPlanReportSaveRequest
(
reportId
,
planId
,
userId
,
ReportTriggerMode
.
API
.
name
());
TestPlanReport
report
=
testPlanReportService
.
genTestPlanReport
(
saveRequest
);
testPlanReportService
.
countReportByTestPlanReportId
(
report
.
getId
(),
null
,
ReportTriggerMode
.
API
.
name
());
}
@GetMapping
(
"/saveTestPlanReport/{planId}/{triggerMode}"
)
public
String
saveTestPlanReport
(
@PathVariable
String
planId
,
@PathVariable
String
triggerMode
)
{
String
userId
=
SessionUtils
.
getUser
().
getId
();
TestPlanReport
report
=
testPlanReportService
.
genTestPlanReport
(
planId
,
userId
,
triggerMode
);
String
reportId
=
UUID
.
randomUUID
().
toString
();
TestPlanReportSaveRequest
saveRequest
=
new
TestPlanReportSaveRequest
(
reportId
,
planId
,
userId
,
triggerMode
);
TestPlanReport
report
=
testPlanReportService
.
genTestPlanReport
(
saveRequest
);
testPlanReportService
.
countReportByTestPlanReportId
(
report
.
getId
(),
null
,
triggerMode
);
return
"success"
;
}
...
...
backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java
浏览文件 @
4eac6ed9
此差异已折叠。
点击以展开。
backend/src/main/java/io/metersphere/track/service/TestPlanService.java
浏览文件 @
4eac6ed9
...
...
@@ -33,6 +33,7 @@ import io.metersphere.service.SystemParameterService;
import
io.metersphere.track.Factory.ReportComponentFactory
;
import
io.metersphere.track.domain.ReportComponent
;
import
io.metersphere.track.dto.*
;
import
io.metersphere.track.request.report.TestPlanReportSaveRequest
;
import
io.metersphere.track.request.testcase.PlanCaseRelevanceRequest
;
import
io.metersphere.track.request.testcase.QueryTestPlanRequest
;
import
io.metersphere.track.request.testplan.AddTestPlanRequest
;
...
...
@@ -128,6 +129,8 @@ public class TestPlanService {
private
ApiScenarioMapper
apiScenarioMapper
;
@Resource
private
TestCaseTestMapper
testCaseTestMapper
;
@Resource
private
ApiScenarioReportMapper
apiScenarioReportMapper
;
public
synchronized
String
addTestPlan
(
AddTestPlanRequest
testPlan
)
{
if
(
getTestPlanByName
(
testPlan
.
getName
()).
size
()
>
0
)
{
...
...
@@ -863,12 +866,13 @@ public class TestPlanService {
* @return
*/
public
String
runScenarioCase
(
SchedulePlanScenarioExecuteRequest
request
)
{
String
returnId
=
""
;
MsTestPlan
testPlan
=
new
MsTestPlan
();
testPlan
.
setHashTree
(
new
LinkedList
<>());
HashTree
jmeterHashTree
=
new
ListedHashTree
();
Map
<
String
,
Map
<
String
,
String
>>
testPlanScenarioIdMap
=
request
.
getTestPlanScenarioIDMap
();
for
(
Map
.
Entry
<
String
,
Map
<
String
,
String
>>
entry
:
testPlanScenarioIdMap
.
entrySet
())
{
String
testPlanID
=
entry
.
getKey
();
Map
<
String
,
String
>
planScenarioIdMap
=
entry
.
getValue
();
List
<
ApiScenarioWithBLOBs
>
apiScenarios
=
extApiScenarioMapper
.
selectIds
(
new
ArrayList
<>(
planScenarioIdMap
.
keySet
()));
try
{
...
...
@@ -918,23 +922,27 @@ public class TestPlanService {
scenarios
.
add
(
scenario
);
// 创建场景报告
//不同的运行模式,第二个参数入参不同
apiAutomationService
.
createScenarioReport
(
group
.
getName
(),
APIScenarioReportResult
report
=
apiAutomationService
.
createScenarioReport
(
group
.
getName
(),
planScenarioID
+
":"
+
request
.
getTestPlanReportId
(),
item
.
getName
(),
request
.
getTriggerMode
()
==
null
?
ReportTriggerMode
.
MANUAL
.
name
()
:
request
.
getTriggerMode
(),
request
.
getExecuteType
(),
item
.
getProjectId
(),
request
.
getReportUserID
());
group
.
setHashTree
(
scenarios
);
testPlan
.
getHashTree
().
add
(
group
);
apiScenarioReportMapper
.
insert
(
report
);
returnId
=
request
.
getId
();
}
}
catch
(
Exception
ex
)
{
MSException
.
throwException
(
ex
.
getMessage
());
}
testPlan
.
toHashTree
(
jmeterHashTree
,
testPlan
.
getHashTree
(),
new
ParameterConfig
());
String
runMode
=
ApiRunMode
.
SCHEDULE_SCENARIO_PLAN
.
name
();
// 调用执行方法
jMeterService
.
runDefinition
(
request
.
getId
(),
jmeterHashTree
,
request
.
getReportId
(),
runMode
);
}
testPlan
.
toHashTree
(
jmeterHashTree
,
testPlan
.
getHashTree
(),
new
ParameterConfig
());
String
runMode
=
ApiRunMode
.
SCHEDULE_SCENARIO_PLAN
.
name
();
// 调用执行方法
jMeterService
.
runDefinition
(
request
.
getId
(),
jmeterHashTree
,
request
.
getReportId
(),
runMode
);
return
request
.
getId
();
return
returnId
;
}
public
void
run
(
String
testPlanID
,
String
projectID
,
String
userId
,
String
triggerMode
)
{
...
...
@@ -966,37 +974,21 @@ public class TestPlanService {
LogUtil
.
info
(
"-------------- start testplan schedule ----------"
);
TestPlanReportService
testPlanReportService
=
CommonBeanFactory
.
getBean
(
TestPlanReportService
.
class
);
//首先创建testPlanReport,然后返回的ID重新赋值为resourceID,作为后续的参数
TestPlanReport
testPlanReport
=
testPlanReportService
.
genTestPlanReport
(
testPlanID
,
userId
,
triggerMode
);
//执行接口案例任务
for
(
Map
.
Entry
<
String
,
String
>
entry
:
apiTestCaseIdMap
.
entrySet
())
{
String
apiCaseID
=
entry
.
getKey
();
String
planCaseID
=
entry
.
getValue
();
ApiTestCaseWithBLOBs
blobs
=
apiTestCaseService
.
get
(
apiCaseID
);
//需要更新这里来保证PlanCase的状态能正常更改
apiTestCaseService
.
run
(
blobs
,
UUID
.
randomUUID
().
toString
(),
testPlanReport
.
getId
(),
testPlanID
,
ApiRunMode
.
SCHEDULE_API_PLAN
.
name
());
}
//执行场景执行任务
if
(!
planScenarioIdMap
.
isEmpty
())
{
LogUtil
.
info
(
"-------------- testplan schedule ---------- api case over -----------------"
);
SchedulePlanScenarioExecuteRequest
scenarioRequest
=
new
SchedulePlanScenarioExecuteRequest
();
String
senarionReportID
=
UUID
.
randomUUID
().
toString
();
scenarioRequest
.
setId
(
senarionReportID
);
scenarioRequest
.
setReportId
(
senarionReportID
);
scenarioRequest
.
setProjectId
(
projectID
);
scenarioRequest
.
setTriggerMode
(
ReportTriggerMode
.
SCHEDULE
.
name
());
scenarioRequest
.
setExecuteType
(
ExecuteType
.
Saved
.
name
());
Map
<
String
,
Map
<
String
,
String
>>
testPlanScenarioIdMap
=
new
HashMap
<>();
testPlanScenarioIdMap
.
put
(
testPlanID
,
planScenarioIdMap
);
scenarioRequest
.
setTestPlanScenarioIDMap
(
testPlanScenarioIdMap
);
scenarioRequest
.
setReportUserID
(
userId
);
scenarioRequest
.
setTestPlanID
(
testPlanID
);
scenarioRequest
.
setRunMode
(
ApiRunMode
.
SCHEDULE_SCENARIO_PLAN
.
name
());
scenarioRequest
.
setTestPlanReportId
(
testPlanReport
.
getId
());
this
.
runScenarioCase
(
scenarioRequest
);
LogUtil
.
info
(
"-------------- testplan schedule ---------- scenario case over -----------------"
);
}
boolean
apiCaseIsExcuting
=
false
;
boolean
scenarioIsExcuting
=
false
;
boolean
performaceIsExcuting
=
false
;
String
apiCaseIdArray
=
""
;
String
scenarioCaseIdArray
=
""
;
String
performanceCaseIdArray
=
""
;
String
planReportId
=
UUID
.
randomUUID
().
toString
();
//创建测试报告,然后返回的ID重新赋值为resourceID,作为后续的参数
TestPlanReportSaveRequest
saveRequest
=
new
TestPlanReportSaveRequest
(
planReportId
,
testPlanID
,
userId
,
triggerMode
,
apiTestCaseIdMap
.
size
()>
0
,
planScenarioIdMap
.
size
()>
0
,
performanceIdMap
.
size
()>
0
,
JSONArray
.
toJSONString
(
new
ArrayList
<>(
apiTestCaseIdMap
.
keySet
())),
JSONArray
.
toJSONString
(
new
ArrayList
<>(
planScenarioIdMap
.
keySet
())),
JSONArray
.
toJSONString
(
new
ArrayList
<>(
performanceIdMap
.
values
())));
TestPlanReport
testPlanReport
=
testPlanReportService
.
genTestPlanReport
(
saveRequest
);
//执行性能测试任务
List
<
String
>
performaneReportIDList
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
performanceIdMap
.
entrySet
())
{
...
...
@@ -1016,20 +1008,76 @@ public class TestPlanService {
testPlanLoadCase
.
setId
(
performanceRequest
.
getTestPlanLoadId
());
testPlanLoadCase
.
setLoadReportId
(
reportId
);
testPlanLoadCaseService
.
update
(
testPlanLoadCase
);
//更新关联处的报告
TestPlanLoadCase
loadCase
=
new
TestPlanLoadCaseDTO
();
loadCase
.
setId
(
id
);
loadCase
.
setLoadReportId
(
reportId
);
testPlanLoadCaseService
.
update
(
loadCase
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
//更新关联处的报告
TestPlanLoadCase
loadCase
=
new
TestPlanLoadCaseDTO
();
loadCase
.
setId
(
id
);
loadCase
.
setLoadReportId
(
reportId
);
testPlanLoadCaseService
.
update
(
loadCase
);
if
(
StringUtils
.
isEmpty
(
reportId
)){
performaceIsExcuting
=
false
;
}
}
if
(
performaceIsExcuting
){
performanceCaseIdArray
=
JSONArray
.
toJSONString
(
new
ArrayList
<>(
performanceIdMap
.
values
()));
}
if
(!
performaneReportIDList
.
isEmpty
())
{
//性能测试时保存性能测试报告ID,在结果返回时用于捕捉并进行
testPlanReportService
.
updatePerformanceInfo
(
testPlanReport
,
performaneReportIDList
,
ReportTriggerMode
.
SCHEDULE
.
name
());
}
//执行接口案例任务
for
(
Map
.
Entry
<
String
,
String
>
entry
:
apiTestCaseIdMap
.
entrySet
())
{
String
apiCaseID
=
entry
.
getKey
();
String
planCaseID
=
entry
.
getValue
();
ApiTestCaseWithBLOBs
blobs
=
apiTestCaseService
.
get
(
apiCaseID
);
//需要更新这里来保证PlanCase的状态能正常更改
apiTestCaseService
.
run
(
blobs
,
UUID
.
randomUUID
().
toString
(),
planReportId
,
testPlanID
,
ApiRunMode
.
SCHEDULE_API_PLAN
.
name
());
apiCaseIsExcuting
=
true
;
}
if
(
apiCaseIsExcuting
){
apiCaseIdArray
=
JSONArray
.
toJSONString
(
new
ArrayList
<>(
apiTestCaseIdMap
.
keySet
()));
}
//执行场景执行任务
if
(!
planScenarioIdMap
.
isEmpty
())
{
LogUtil
.
info
(
"-------------- testplan schedule ---------- api case over -----------------"
);
SchedulePlanScenarioExecuteRequest
scenarioRequest
=
new
SchedulePlanScenarioExecuteRequest
();
String
senarionReportID
=
UUID
.
randomUUID
().
toString
();
scenarioRequest
.
setId
(
senarionReportID
);
scenarioRequest
.
setReportId
(
senarionReportID
);
scenarioRequest
.
setProjectId
(
projectID
);
scenarioRequest
.
setTriggerMode
(
ReportTriggerMode
.
SCHEDULE
.
name
());
scenarioRequest
.
setExecuteType
(
ExecuteType
.
Saved
.
name
());
Map
<
String
,
Map
<
String
,
String
>>
testPlanScenarioIdMap
=
new
HashMap
<>();
testPlanScenarioIdMap
.
put
(
testPlanID
,
planScenarioIdMap
);
scenarioRequest
.
setTestPlanScenarioIDMap
(
testPlanScenarioIdMap
);
scenarioRequest
.
setReportUserID
(
userId
);
scenarioRequest
.
setTestPlanID
(
testPlanID
);
scenarioRequest
.
setRunMode
(
ApiRunMode
.
SCHEDULE_SCENARIO_PLAN
.
name
());
scenarioRequest
.
setTestPlanReportId
(
planReportId
);
String
scenarioReportID
=
this
.
runScenarioCase
(
scenarioRequest
);
if
(
StringUtils
.
isNotEmpty
(
scenarioReportID
)){
scenarioIsExcuting
=
true
;
scenarioCaseIdArray
=
JSONArray
.
toJSONString
(
new
ArrayList
<>(
planScenarioIdMap
.
keySet
()));
}
LogUtil
.
info
(
"-------------- testplan schedule ---------- scenario case over -----------------"
);
}
//如果report参数和预期不对(某些原因执行失败),则更新report
if
(
saveRequest
.
isApiCaseIsExecuting
()
!=
apiCaseIsExcuting
||
saveRequest
.
isScenarioIsExecuting
()!=
scenarioIsExcuting
||
saveRequest
.
isPerformanceIsExecuting
()
!=
performaceIsExcuting
){
testPlanReport
.
setIsApiCaseExecuting
(
apiCaseIsExcuting
);
testPlanReport
.
setIsScenarioExecuting
(
scenarioIsExcuting
);
testPlanReport
.
setIsPerformanceExecuting
(
performaceIsExcuting
);
testPlanReportService
.
update
(
testPlanReport
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录