Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
f42e7ac3
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,发现更多精彩内容 >>
提交
f42e7ac3
编写于
2月 19, 2021
作者:
C
chenjianxing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 场景用例导出
上级
a003eb56
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
69 addition
and
50 deletion
+69
-50
backend/src/main/java/io/metersphere/api/controller/ApiAutomationController.java
...o/metersphere/api/controller/ApiAutomationController.java
+9
-0
backend/src/main/java/io/metersphere/api/dto/automation/ApiScenarioBatchRequest.java
...tersphere/api/dto/automation/ApiScenarioBatchRequest.java
+0
-3
backend/src/main/java/io/metersphere/api/dto/automation/ApiScenrioExportResult.java
...etersphere/api/dto/automation/ApiScenrioExportResult.java
+15
-0
backend/src/main/java/io/metersphere/api/dto/automation/RunScenarioRequest.java
...io/metersphere/api/dto/automation/RunScenarioRequest.java
+5
-24
backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java
...java/io/metersphere/api/service/ApiAutomationService.java
+20
-10
backend/src/main/java/io/metersphere/job/sechedule/ApiScenarioTestJob.java
...java/io/metersphere/job/sechedule/ApiScenarioTestJob.java
+1
-1
backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java
...etersphere/track/service/TestPlanScenarioCaseService.java
+1
-1
frontend/src/business/components/api/automation/ApiAutomation.vue
.../src/business/components/api/automation/ApiAutomation.vue
+1
-1
frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue
...ss/components/api/automation/scenario/ApiScenarioList.vue
+10
-6
frontend/src/business/components/api/automation/scenario/ScenarioExtendBtns.vue
...components/api/automation/scenario/ScenarioExtendBtns.vue
+1
-1
frontend/src/i18n/en-US.js
frontend/src/i18n/en-US.js
+2
-1
frontend/src/i18n/zh-CN.js
frontend/src/i18n/zh-CN.js
+2
-1
frontend/src/i18n/zh-TW.js
frontend/src/i18n/zh-TW.js
+2
-1
未找到文件。
backend/src/main/java/io/metersphere/api/controller/ApiAutomationController.java
浏览文件 @
f42e7ac3
...
...
@@ -5,6 +5,8 @@ import com.github.pagehelper.PageHelper;
import
io.metersphere.api.dto.ApiTestImportRequest
;
import
io.metersphere.api.dto.JmxInfoDTO
;
import
io.metersphere.api.dto.automation.*
;
import
io.metersphere.api.dto.definition.ApiBatchRequest
;
import
io.metersphere.api.dto.definition.ApiExportResult
;
import
io.metersphere.api.dto.definition.RunDefinitionRequest
;
import
io.metersphere.api.dto.definition.parse.ApiDefinitionImport
;
import
io.metersphere.api.service.ApiAutomationService
;
...
...
@@ -154,5 +156,12 @@ public class ApiAutomationController {
public
ApiDefinitionImport
testCaseImport
(
@RequestPart
(
value
=
"file"
,
required
=
false
)
MultipartFile
file
,
@RequestPart
(
"request"
)
ApiTestImportRequest
request
)
{
return
apiAutomationService
.
scenarioImport
(
file
,
request
);
}
@PostMapping
(
value
=
"/export"
)
@RequiresRoles
(
value
=
{
RoleConstants
.
TEST_USER
,
RoleConstants
.
TEST_MANAGER
},
logical
=
Logical
.
OR
)
public
ApiScenrioExportResult
export
(
@RequestBody
ApiScenarioBatchRequest
request
)
{
return
apiAutomationService
.
export
(
request
);
}
}
backend/src/main/java/io/metersphere/api/dto/automation/ApiScenarioBatchRequest.java
浏览文件 @
f42e7ac3
...
...
@@ -13,9 +13,6 @@ public class ApiScenarioBatchRequest extends ApiScenarioWithBLOBs {
private
List
<
String
>
ids
;
private
String
projectId
;
private
String
environmentId
;
private
String
executeStatus
;
private
boolean
notInTestPlan
;
private
String
planId
;
private
ApiScenarioRequest
condition
;
}
backend/src/main/java/io/metersphere/api/dto/automation/ApiScenrioExportResult.java
0 → 100644
浏览文件 @
f42e7ac3
package
io.metersphere.api.dto.automation
;
import
io.metersphere.base.domain.ApiScenarioWithBLOBs
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.List
;
@Getter
@Setter
public
class
ApiScenrioExportResult
{
private
String
projectId
;
private
String
version
;
private
List
<
ApiScenarioWithBLOBs
>
data
;
}
backend/src/main/java/io/metersphere/api/dto/automation/RunScenarioRequest.java
浏览文件 @
f42e7ac3
package
io.metersphere.api.dto.automation
;
import
io.metersphere.base.domain.ApiScenarioWithBLOBs
;
import
lombok.Getter
;
import
lombok.Setter
;
...
...
@@ -8,14 +9,10 @@ import java.util.Map;
@Setter
@Getter
public
class
RunScenarioRequest
{
private
String
id
;
public
class
RunScenarioRequest
extends
ApiScenarioWithBLOBs
{
private
String
reportId
;
private
String
projectId
;
private
String
environmentId
;
private
String
triggerMode
;
...
...
@@ -29,28 +26,12 @@ public class RunScenarioRequest {
private
List
<
String
>
planCaseIds
;
private
String
reportUserID
;
private
List
<
String
>
ids
;
private
List
<
String
>
scenarioIds
;
private
String
reportUserID
;
private
Map
<
String
,
String
>
scenarioTestPlanIdMap
;
/**
* isSelectAllDate:选择的数据是否是全部数据(全部数据是不受分页影响的数据)
* filters: 数据状态
* name:如果是全部数据,那么表格如果历经查询,查询参数是什么
* moduleIds: 哪些模块的数据
* unSelectIds:是否在页面上有未勾选的数据,有的话他们的ID是哪些。
* filters/name/moduleIds/unSeelctIds 只在isSelectAllDate为true时需要。为了让程序能明确批量的范围。
*/
private
boolean
isSelectAllDate
;
private
Map
<
String
,
List
<
String
>>
filters
;
private
String
name
;
private
List
<
String
>
moduleIds
;
private
List
<
String
>
unSelectIds
;
private
ApiScenarioRequest
condition
;
}
backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java
浏览文件 @
f42e7ac3
...
...
@@ -10,6 +10,7 @@ import io.metersphere.api.dto.DeleteAPIReportRequest;
import
io.metersphere.api.dto.JmxInfoDTO
;
import
io.metersphere.api.dto.automation.*
;
import
io.metersphere.api.dto.datacount.ApiDataCountResult
;
import
io.metersphere.api.dto.definition.ApiExportResult
;
import
io.metersphere.api.dto.definition.RunDefinitionRequest
;
import
io.metersphere.api.dto.definition.parse.ApiDefinitionImport
;
import
io.metersphere.api.dto.definition.request.*
;
...
...
@@ -443,11 +444,11 @@ public class ApiAutomationService {
* @return
*/
public
String
run
(
RunScenarioRequest
request
)
{
List
<
String
>
ids
=
request
.
getScenarioIds
();
if
(
request
.
isSelectAllDate
())
{
ids
=
this
.
getAllScenarioIdsByFontedSelect
(
request
.
getModuleIds
(),
request
.
getName
(),
request
.
getProjectId
(),
request
.
getFilters
(),
request
.
getUnSelectIds
());
}
ServiceUtils
.
getSelectAllIds
(
request
,
request
.
getCondition
(),
(
query
)
->
extApiScenarioMapper
.
selectIdsByQuery
((
ApiScenarioRequest
)
query
));
List
<
String
>
ids
=
request
.
getIds
();
//检查是否有正在执行中的情景
this
.
checkScenarioIsRunnng
(
ids
);
List
<
ApiScenarioWithBLOBs
>
apiScenarios
=
extApiScenarioMapper
.
selectIds
(
ids
);
...
...
@@ -656,11 +657,7 @@ public class ApiAutomationService {
public
JmxInfoDTO
genPerformanceTestJmx
(
RunScenarioRequest
request
)
throws
Exception
{
List
<
ApiScenarioWithBLOBs
>
apiScenarios
=
null
;
List
<
String
>
ids
=
request
.
getScenarioIds
();
if
(
request
.
isSelectAllDate
())
{
ids
=
this
.
getAllScenarioIdsByFontedSelect
(
request
.
getModuleIds
(),
request
.
getName
(),
request
.
getProjectId
(),
request
.
getFilters
(),
request
.
getUnSelectIds
());
}
List
<
String
>
ids
=
request
.
getIds
();
apiScenarios
=
extApiScenarioMapper
.
selectIds
(
ids
);
String
testName
=
""
;
if
(!
apiScenarios
.
isEmpty
())
{
...
...
@@ -743,4 +740,17 @@ public class ApiAutomationService {
create
(
saveReq
,
new
ArrayList
<>());
return
apiImport
;
}
public
ApiScenrioExportResult
export
(
ApiScenarioBatchRequest
request
)
{
ServiceUtils
.
getSelectAllIds
(
request
,
request
.
getCondition
(),
(
query
)
->
extApiScenarioMapper
.
selectIdsByQuery
((
ApiScenarioRequest
)
query
));
ApiScenarioExample
example
=
new
ApiScenarioExample
();
example
.
createCriteria
().
andIdIn
(
request
.
getIds
());
List
<
ApiScenarioWithBLOBs
>
apiScenarioWithBLOBs
=
apiScenarioMapper
.
selectByExampleWithBLOBs
(
example
);
ApiScenrioExportResult
result
=
new
ApiScenrioExportResult
();
result
.
setData
(
apiScenarioWithBLOBs
);
result
.
setProjectId
(
request
.
getProjectId
());
result
.
setVersion
(
System
.
getenv
(
"MS_VERSION"
));
return
result
;
}
}
backend/src/main/java/io/metersphere/job/sechedule/ApiScenarioTestJob.java
浏览文件 @
f42e7ac3
...
...
@@ -56,7 +56,7 @@ public class ApiScenarioTestJob extends MsScheduleJob {
request
.
setProjectId
(
projectID
);
request
.
setTriggerMode
(
ReportTriggerMode
.
SCHEDULE
.
name
());
request
.
setExecuteType
(
ExecuteType
.
Saved
.
name
());
request
.
set
Scenario
Ids
(
this
.
scenarioIds
);
request
.
setIds
(
this
.
scenarioIds
);
request
.
setReportUserID
(
this
.
userId
);
apiAutomationService
.
run
(
request
);
...
...
backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java
浏览文件 @
f42e7ac3
...
...
@@ -96,7 +96,7 @@ public class TestPlanScenarioCaseService {
scenarioIds
.
add
(
apiScenario
.
getApiScenarioId
());
scenarioIdApiScarionMap
.
put
(
apiScenario
.
getApiScenarioId
(),
apiScenario
.
getId
());
}
request
.
set
Scenario
Ids
(
scenarioIds
);
request
.
setIds
(
scenarioIds
);
request
.
setScenarioTestPlanIdMap
(
scenarioIdApiScarionMap
);
request
.
setRunMode
(
ApiRunMode
.
SCENARIO_PLAN
.
name
());
return
apiAutomationService
.
run
(
request
);
...
...
frontend/src/business/components/api/automation/ApiAutomation.vue
浏览文件 @
f42e7ac3
...
...
@@ -270,7 +270,7 @@
this
.
trashEnable
=
data
;
},
exportAPI
()
{
this
.
$refs
.
apiScenarioList
[
0
]
.
exportApi
();
this
.
$refs
.
apiScenarioList
.
exportApi
();
}
}
}
...
...
frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue
浏览文件 @
f42e7ac3
...
...
@@ -614,13 +614,17 @@ export default {
this
.
$emit
(
'
openScenario
'
,
item
)
},
exportApi
()
{
let
param
=
this
.
buildBatchParam
();
param
.
protocol
=
this
.
currentProtocol
;
this
.
result
=
this
.
$post
(
"
/api/definition/export
"
,
param
,
response
=>
{
let
param
=
{};
this
.
buildBatchParam
(
param
);
this
.
loading
=
true
;
if
(
param
.
ids
===
undefined
||
param
.
ids
.
length
<
1
)
{
this
.
$warning
(
this
.
$t
(
"
api_test.automation.scenario.check_case
"
));
return
;
}
this
.
result
=
this
.
$post
(
"
/api/automation/export
"
,
param
,
response
=>
{
this
.
loading
=
false
;
let
obj
=
response
.
data
;
obj
.
protocol
=
this
.
currentProtocol
;
this
.
buildApiPath
(
obj
.
data
);
downloadFile
(
"
Metersphere_Api_
"
+
localStorage
.
getItem
(
PROJECT_NAME
)
+
"
.json
"
,
JSON
.
stringify
(
obj
));
downloadFile
(
"
Metersphere_Scenario_
"
+
localStorage
.
getItem
(
PROJECT_NAME
)
+
"
.json
"
,
JSON
.
stringify
(
obj
));
});
}
}
...
...
frontend/src/business/components/api/automation/scenario/ScenarioExtendBtns.vue
浏览文件 @
f42e7ac3
...
...
@@ -48,7 +48,7 @@
let
scenarioIds
=
[];
scenarioIds
.
push
(
row
.
id
);
run
.
projectId
=
getCurrentProjectID
();
run
.
scenarioI
ds
=
scenarioIds
;
run
.
i
ds
=
scenarioIds
;
run
.
id
=
getUUID
();
run
.
name
=
row
.
name
;
this
.
$post
(
url
,
run
,
response
=>
{
...
...
frontend/src/i18n/en-US.js
浏览文件 @
f42e7ac3
...
...
@@ -644,7 +644,8 @@ export default {
select_principal
:
"
Select principal
"
,
follow_people
:
"
Follow people
"
,
select_table
:
"
Select table
"
,
select_all
:
"
Select all
"
select_all
:
"
Select all
"
,
check_case
:
"
Please check the Scene Use Case
"
},
report_name_info
:
'
Please enter the registration name
'
,
save_case_info
:
'
Please save the use case first
'
,
...
...
frontend/src/i18n/zh-CN.js
浏览文件 @
f42e7ac3
...
...
@@ -645,7 +645,8 @@ export default {
select_principal
:
"
请选择责任人
"
,
follow_people
:
"
关注人
"
,
select_table
:
"
选择可见数据
"
,
select_all
:
"
选择全部数据
"
select_all
:
"
选择全部数据
"
,
check_case
:
"
请勾选场景用例
"
},
report_name_info
:
'
请输入报告名称
'
,
save_case_info
:
'
请先保存用例
'
,
...
...
frontend/src/i18n/zh-TW.js
浏览文件 @
f42e7ac3
...
...
@@ -644,7 +644,8 @@ export default {
select_principal
:
"
請選擇責任人
"
,
follow_people
:
"
關註人
"
,
select_table
:
"
選擇可見數據
"
,
select_all
:
"
選擇全部數據
"
select_all
:
"
選擇全部數據
"
,
check_case
:
"
請勾選場景用例
"
},
report_name_info
:
'
請輸入報告名稱
'
,
save_case_info
:
'
請先保存用例
'
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录