Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
c5d52a69
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,体验更适合开发者的 AI 搜索 >>
提交
c5d52a69
编写于
9月 18, 2020
作者:
F
fit2-zhao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/metersphere/metersphere
上级
56db0e07
7a6151ab
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
125 addition
and
83 deletion
+125
-83
backend/pom.xml
backend/pom.xml
+1
-1
backend/src/main/java/io/metersphere/api/parse/ApiImportAbstractParser.java
...ava/io/metersphere/api/parse/ApiImportAbstractParser.java
+2
-7
backend/src/main/java/io/metersphere/api/parse/MsParser.java
backend/src/main/java/io/metersphere/api/parse/MsParser.java
+2
-1
backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java
...rc/main/java/io/metersphere/api/parse/Swagger2Parser.java
+25
-23
backend/src/main/java/io/metersphere/config/KafkaProperties.java
.../src/main/java/io/metersphere/config/KafkaProperties.java
+1
-1
backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
...java/io/metersphere/excel/listener/EasyExcelListener.java
+3
-1
backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java
...in/java/io/metersphere/excel/utils/EasyExcelExporter.java
+2
-2
backend/src/main/java/io/metersphere/track/controller/TestPlanController.java
...a/io/metersphere/track/controller/TestPlanController.java
+2
-2
backend/src/main/java/io/metersphere/track/dto/TestPlanDTO.java
...d/src/main/java/io/metersphere/track/dto/TestPlanDTO.java
+3
-0
backend/src/main/java/io/metersphere/track/service/TestCaseService.java
...in/java/io/metersphere/track/service/TestCaseService.java
+3
-15
backend/src/main/java/io/metersphere/track/service/TestPlanService.java
...in/java/io/metersphere/track/service/TestPlanService.java
+41
-1
backend/src/main/java/io/metersphere/xpack
backend/src/main/java/io/metersphere/xpack
+1
-1
backend/src/main/resources/application.properties
backend/src/main/resources/application.properties
+0
-1
frontend/src/business/components/api/test/components/request/ApiHttpRequestForm.vue
...onents/api/test/components/request/ApiHttpRequestForm.vue
+1
-4
frontend/src/business/components/api/test/components/request/condition/ConditionLabel.vue
.../api/test/components/request/condition/ConditionLabel.vue
+3
-3
frontend/src/business/components/api/test/model/ScenarioModel.js
...d/src/business/components/api/test/model/ScenarioModel.js
+2
-5
frontend/src/business/components/settings/system/User.vue
frontend/src/business/components/settings/system/User.vue
+1
-0
frontend/src/business/components/track/case/components/SwitchProject.vue
...siness/components/track/case/components/SwitchProject.vue
+1
-1
frontend/src/business/components/track/plan/components/TestPlanEdit.vue
...usiness/components/track/plan/components/TestPlanEdit.vue
+23
-8
frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue
...onents/track/plan/view/comonents/TestPlanTestCaseEdit.vue
+3
-3
frontend/src/business/components/track/review/components/TestCaseReviewEdit.vue
...components/track/review/components/TestCaseReviewEdit.vue
+4
-2
frontend/src/business/components/xpack
frontend/src/business/components/xpack
+1
-1
未找到文件。
backend/pom.xml
浏览文件 @
c5d52a69
...
...
@@ -15,7 +15,7 @@
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<shiro.version>
1.
5.1
</shiro.version>
<shiro.version>
1.
6.0
</shiro.version>
<java.version>
1.8
</java.version>
<jmeter.version>
5.2.1
</jmeter.version>
<nacos.version>
1.1.3
</nacos.version>
...
...
backend/src/main/java/io/metersphere/api/parse/ApiImportAbstractParser.java
浏览文件 @
c5d52a69
...
...
@@ -9,10 +9,7 @@ import io.metersphere.commons.utils.LogUtil;
import
org.apache.commons.lang3.StringUtils
;
import
org.eclipse.jetty.http.HttpHeader
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.*
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -21,10 +18,8 @@ import java.util.Optional;
public
abstract
class
ApiImportAbstractParser
implements
ApiImportParser
{
protected
String
getApiTestStr
(
InputStream
source
)
{
BufferedReader
bufferedReader
;
StringBuilder
testStr
=
null
;
try
{
bufferedReader
=
new
BufferedReader
(
new
InputStreamReader
(
source
,
StandardCharsets
.
UTF_8
));
try
(
BufferedReader
bufferedReader
=
new
BufferedReader
(
new
InputStreamReader
(
source
,
StandardCharsets
.
UTF_8
)))
{
testStr
=
new
StringBuilder
();
String
inputStr
;
while
((
inputStr
=
bufferedReader
.
readLine
())
!=
null
)
{
...
...
backend/src/main/java/io/metersphere/api/parse/MsParser.java
浏览文件 @
c5d52a69
...
...
@@ -3,6 +3,7 @@ package io.metersphere.api.parse;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.parser.Feature
;
import
io.metersphere.api.dto.ApiTestImportRequest
;
import
io.metersphere.api.dto.parse.ApiImport
;
import
io.metersphere.api.dto.scenario.request.RequestType
;
...
...
@@ -23,7 +24,7 @@ public class MsParser extends ApiImportAbstractParser {
}
private
String
parsePluginFormat
(
String
testStr
)
{
JSONObject
testObject
=
JSONObject
.
parseObject
(
testStr
);
JSONObject
testObject
=
JSONObject
.
parseObject
(
testStr
,
Feature
.
OrderedField
);
if
(
testObject
.
get
(
"scenarios"
)
!=
null
)
{
return
testStr
;
}
else
{
...
...
backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java
浏览文件 @
c5d52a69
...
...
@@ -159,32 +159,34 @@ public class Swagger2Parser extends ApiImportAbstractParser {
private
JSONObject
getBodyJSONObjectParameters
(
Map
<
String
,
Property
>
properties
,
Map
<
String
,
Model
>
definitions
,
HashSet
<
String
>
refSet
)
{
JSONObject
jsonObject
=
new
JSONObject
();
properties
.
forEach
((
key
,
value
)
->
{
if
(
value
instanceof
ObjectProperty
)
{
ObjectProperty
objectProperty
=
(
ObjectProperty
)
value
;
jsonObject
.
put
(
key
,
getBodyJSONObjectParameters
(
objectProperty
.
getProperties
(),
definitions
,
refSet
));
}
else
if
(
value
instanceof
ArrayProperty
)
{
ArrayProperty
arrayProperty
=
(
ArrayProperty
)
value
;
Property
items
=
arrayProperty
.
getItems
();
if
(
items
instanceof
RefProperty
)
{
RefProperty
refProperty
=
(
RefProperty
)
items
;
String
simpleRef
=
refProperty
.
getSimpleRef
();
if
(
refSet
.
contains
(
simpleRef
))
{
jsonObject
.
put
(
key
,
new
JSONArray
());
return
;
if
(
properties
!=
null
)
{
properties
.
forEach
((
key
,
value
)
->
{
if
(
value
instanceof
ObjectProperty
)
{
ObjectProperty
objectProperty
=
(
ObjectProperty
)
value
;
jsonObject
.
put
(
key
,
getBodyJSONObjectParameters
(
objectProperty
.
getProperties
(),
definitions
,
refSet
));
}
else
if
(
value
instanceof
ArrayProperty
)
{
ArrayProperty
arrayProperty
=
(
ArrayProperty
)
value
;
Property
items
=
arrayProperty
.
getItems
();
if
(
items
instanceof
RefProperty
)
{
RefProperty
refProperty
=
(
RefProperty
)
items
;
String
simpleRef
=
refProperty
.
getSimpleRef
();
if
(
refSet
.
contains
(
simpleRef
))
{
jsonObject
.
put
(
key
,
new
JSONArray
());
return
;
}
refSet
.
add
(
simpleRef
);
Model
model
=
definitions
.
get
(
simpleRef
);
JSONArray
propertyList
=
new
JSONArray
();
propertyList
.
add
(
getBodyJSONObjectParameters
(
model
.
getProperties
(),
definitions
,
refSet
));
jsonObject
.
put
(
key
,
propertyList
);
}
else
{
jsonObject
.
put
(
key
,
new
ArrayList
<>());
}
refSet
.
add
(
simpleRef
);
Model
model
=
definitions
.
get
(
simpleRef
);
JSONArray
propertyList
=
new
JSONArray
();
propertyList
.
add
(
getBodyJSONObjectParameters
(
model
.
getProperties
(),
definitions
,
refSet
));
jsonObject
.
put
(
key
,
propertyList
);
}
else
{
jsonObject
.
put
(
key
,
new
ArrayList
<>(
));
jsonObject
.
put
(
key
,
Optional
.
ofNullable
(
value
.
getDescription
()).
orElse
(
""
));
}
}
else
{
jsonObject
.
put
(
key
,
Optional
.
ofNullable
(
value
.
getDescription
()).
orElse
(
""
));
}
});
});
}
return
jsonObject
;
}
...
...
backend/src/main/java/io/metersphere/config/KafkaProperties.java
浏览文件 @
c5d52a69
...
...
@@ -10,7 +10,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
public
class
KafkaProperties
{
public
static
final
String
KAFKA_PREFIX
=
"kafka"
;
private
String
acks
;
private
String
acks
=
"all"
;
private
String
topic
;
private
String
fields
;
private
String
timestamp
;
...
...
backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
浏览文件 @
c5d52a69
...
...
@@ -17,7 +17,7 @@ import java.lang.reflect.ParameterizedType;
import
java.lang.reflect.Type
;
import
java.util.*
;
public
abstract
class
EasyExcelListener
<
T
>
extends
AnalysisEventListener
<
T
>
{
public
abstract
class
EasyExcelListener
<
T
>
extends
AnalysisEventListener
<
T
>
implements
AutoCloseable
{
protected
List
<
ExcelErrData
<
T
>>
errList
=
new
ArrayList
<>();
...
...
@@ -153,6 +153,8 @@ public abstract class EasyExcelListener<T> extends AnalysisEventListener<T> {
return
errList
;
}
@Override
public
void
close
()
{
this
.
easyExcelI18nTranslator
.
resetExcelProperty
();
}
...
...
backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java
浏览文件 @
c5d52a69
...
...
@@ -5,7 +5,6 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
io.metersphere.commons.utils.LogUtil
;
import
io.metersphere.exception.ExcelException
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
...
...
@@ -13,7 +12,7 @@ import java.io.UnsupportedEncodingException;
import
java.net.URLEncoder
;
import
java.util.List
;
public
class
EasyExcelExporter
{
public
class
EasyExcelExporter
implements
AutoCloseable
{
EasyExcelI18nTranslator
easyExcelI18nTranslator
;
...
...
@@ -47,6 +46,7 @@ public class EasyExcelExporter {
}
}
@Override
public
void
close
()
{
easyExcelI18nTranslator
.
resetExcelProperty
();
}
...
...
backend/src/main/java/io/metersphere/track/controller/TestPlanController.java
浏览文件 @
c5d52a69
...
...
@@ -81,8 +81,8 @@ public class TestPlanController {
@PostMapping
(
"/edit"
)
@RequiresRoles
(
value
=
{
RoleConstants
.
TEST_USER
,
RoleConstants
.
TEST_MANAGER
},
logical
=
Logical
.
OR
)
public
void
editTestPlan
(
@RequestBody
TestPlan
testPlan
)
{
testPlanService
.
editTestPlan
(
testPlan
);
public
void
editTestPlan
(
@RequestBody
TestPlan
DTO
testPlanDTO
)
{
testPlanService
.
editTestPlan
(
testPlan
DTO
);
}
@PostMapping
(
"/edit/status/{planId}"
)
...
...
backend/src/main/java/io/metersphere/track/dto/TestPlanDTO.java
浏览文件 @
c5d52a69
...
...
@@ -4,8 +4,11 @@ import io.metersphere.base.domain.TestPlan;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.List
;
@Getter
@Setter
public
class
TestPlanDTO
extends
TestPlan
{
private
String
projectName
;
private
List
<
String
>
projectIds
;
}
backend/src/main/java/io/metersphere/track/service/TestCaseService.java
浏览文件 @
c5d52a69
...
...
@@ -273,16 +273,12 @@ public class TestCaseService {
Set
<
String
>
userIds
=
userRoleMapper
.
selectByExample
(
userRoleExample
).
stream
().
map
(
UserRole:
:
getUserId
).
collect
(
Collectors
.
toSet
());
EasyExcelListener
easyExcelListener
=
null
;
try
{
easyExcelListener
=
new
TestCaseDataListener
(
this
,
projectId
,
testCaseNames
,
userIds
);
try
(
EasyExcelListener
easyExcelListener
=
new
TestCaseDataListener
(
this
,
projectId
,
testCaseNames
,
userIds
))
{
EasyExcelFactory
.
read
(
multipartFile
.
getInputStream
(),
TestCaseExcelData
.
class
,
easyExcelListener
).
sheet
().
doRead
();
errList
=
easyExcelListener
.
getErrList
();
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
e
.
getMessage
(),
e
);
MSException
.
throwException
(
e
.
getMessage
());
}
finally
{
easyExcelListener
.
close
();
}
}
...
...
@@ -316,15 +312,11 @@ public class TestCaseService {
}
public
void
testCaseTemplateExport
(
HttpServletResponse
response
)
{
EasyExcelExporter
easyExcelExporter
=
null
;
try
{
easyExcelExporter
=
new
EasyExcelExporter
(
TestCaseExcelData
.
class
);
try
(
EasyExcelExporter
easyExcelExporter
=
new
EasyExcelExporter
(
TestCaseExcelData
.
class
))
{
easyExcelExporter
.
export
(
response
,
generateExportTemplate
(),
Translator
.
get
(
"test_case_import_template_name"
),
Translator
.
get
(
"test_case_import_template_sheet"
));
}
catch
(
Exception
e
)
{
MSException
.
throwException
(
e
);
}
finally
{
easyExcelExporter
.
close
();
}
}
...
...
@@ -398,15 +390,11 @@ public class TestCaseService {
}
public
void
testCaseExport
(
HttpServletResponse
response
,
TestCaseBatchRequest
request
)
{
EasyExcelExporter
easyExcelExporter
=
null
;
try
{
easyExcelExporter
=
new
EasyExcelExporter
(
TestCaseExcelData
.
class
);
try
(
EasyExcelExporter
easyExcelExporter
=
new
EasyExcelExporter
(
TestCaseExcelData
.
class
))
{
easyExcelExporter
.
export
(
response
,
generateTestCaseExcel
(
request
),
Translator
.
get
(
"test_case_import_template_name"
),
Translator
.
get
(
"test_case_import_template_sheet"
));
}
catch
(
Exception
e
)
{
MSException
.
throwException
(
e
);
}
finally
{
easyExcelExporter
.
close
();
}
}
...
...
backend/src/main/java/io/metersphere/track/service/TestPlanService.java
浏览文件 @
c5d52a69
...
...
@@ -34,6 +34,7 @@ import org.apache.ibatis.session.SqlSessionFactory;
import
org.springframework.context.annotation.Lazy
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.*
;
...
...
@@ -110,12 +111,51 @@ public class TestPlanService {
return
Optional
.
ofNullable
(
testPlanMapper
.
selectByPrimaryKey
(
testPlanId
)).
orElse
(
new
TestPlan
());
}
public
int
editTestPlan
(
TestPlan
testPlan
)
{
public
int
editTestPlan
(
TestPlanDTO
testPlan
)
{
editTestPlanProject
(
testPlan
);
testPlan
.
setUpdateTime
(
System
.
currentTimeMillis
());
checkTestPlanExist
(
testPlan
);
return
testPlanMapper
.
updateByPrimaryKeySelective
(
testPlan
);
}
private
void
editTestPlanProject
(
TestPlanDTO
testPlan
)
{
List
<
String
>
projectIds
=
testPlan
.
getProjectIds
();
if
(!
CollectionUtils
.
isEmpty
(
projectIds
))
{
TestPlanProjectExample
testPlanProjectExample1
=
new
TestPlanProjectExample
();
testPlanProjectExample1
.
createCriteria
().
andTestPlanIdEqualTo
(
testPlan
.
getId
());
List
<
TestPlanProject
>
testPlanProjects
=
testPlanProjectMapper
.
selectByExample
(
testPlanProjectExample1
);
// 已经关联的项目idList
List
<
String
>
dbProjectIds
=
testPlanProjects
.
stream
().
map
(
TestPlanProject:
:
getProjectId
).
collect
(
Collectors
.
toList
());
// 修改后传过来的项目idList,如果还未关联,进行关联
projectIds
.
forEach
(
projectId
->
{
if
(!
dbProjectIds
.
contains
(
projectId
))
{
TestPlanProject
testPlanProject
=
new
TestPlanProject
();
testPlanProject
.
setTestPlanId
(
testPlan
.
getId
());
testPlanProject
.
setProjectId
(
projectId
);
testPlanProjectMapper
.
insert
(
testPlanProject
);
}
});
TestPlanProjectExample
testPlanProjectExample
=
new
TestPlanProjectExample
();
testPlanProjectExample
.
createCriteria
().
andTestPlanIdEqualTo
(
testPlan
.
getId
()).
andProjectIdNotIn
(
projectIds
);
testPlanProjectMapper
.
deleteByExample
(
testPlanProjectExample
);
// 关联的项目下的用例idList
TestCaseExample
example
=
new
TestCaseExample
();
example
.
createCriteria
().
andProjectIdIn
(
projectIds
);
List
<
TestCase
>
caseList
=
testCaseMapper
.
selectByExample
(
example
);
List
<
String
>
caseIds
=
caseList
.
stream
().
map
(
TestCase:
:
getId
).
collect
(
Collectors
.
toList
());
// 取消关联所属项目下的用例和计划的关系
TestPlanTestCaseExample
testPlanTestCaseExample
=
new
TestPlanTestCaseExample
();
TestPlanTestCaseExample
.
Criteria
criteria
=
testPlanTestCaseExample
.
createCriteria
().
andPlanIdEqualTo
(
testPlan
.
getId
());
if
(!
CollectionUtils
.
isEmpty
(
caseIds
))
{
criteria
.
andCaseIdNotIn
(
caseIds
);
}
testPlanTestCaseMapper
.
deleteByExample
(
testPlanTestCaseExample
);
}
}
private
void
checkTestPlanExist
(
TestPlan
testPlan
)
{
if
(
testPlan
.
getName
()
!=
null
)
{
TestPlanExample
example
=
new
TestPlanExample
();
...
...
xpack
@
321c8699
比较
d5b49696
...
321c8699
Subproject commit
d5b4969642fd8d10cc2f949d7377e0a0e5217a3a
Subproject commit
321c869938357e8c2253e5bd86c963828664ae23
backend/src/main/resources/application.properties
浏览文件 @
c5d52a69
...
...
@@ -40,7 +40,6 @@ spring.flyway.validate-on-migrate=false
spring.messages.basename
=
i18n/messages
# kafka
kafka.acks
=
1
kafka.fields
=
kafka.timestamp
=
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
kafka.sample-filter
=
...
...
frontend/src/business/components/api/test/components/request/ApiHttpRequestForm.vue
浏览文件 @
c5d52a69
...
...
@@ -57,7 +57,7 @@
<el-tab-pane
:label=
"$t('api_test.request.headers')"
name=
"headers"
>
<ms-api-key-value
:is-read-only=
"isReadOnly"
:isShowEnable=
"true"
:suggestions=
"headerSuggestions"
:items=
"request.headers"
/>
</el-tab-pane>
<el-tab-pane
:label=
"$t('api_test.request.body')"
name=
"body"
v-if=
"isNotGet"
>
<el-tab-pane
:label=
"$t('api_test.request.body')"
name=
"body"
>
<ms-api-body
:is-read-only=
"isReadOnly"
:body=
"request.body"
:scenario=
"scenario"
...
...
@@ -190,9 +190,6 @@ export default {
},
computed
:
{
isNotGet
()
{
return
this
.
request
.
method
!==
"
GET
"
;
},
displayUrl
()
{
return
(
this
.
request
.
environment
&&
this
.
request
.
environment
.
config
.
httpConfig
.
socket
)
?
this
.
request
.
environment
.
config
.
httpConfig
.
protocol
+
'
://
'
+
this
.
request
.
environment
.
config
.
httpConfig
.
socket
+
(
this
.
request
.
path
?
this
.
request
.
path
:
''
)
...
...
frontend/src/business/components/api/test/components/request/condition/ConditionLabel.vue
浏览文件 @
c5d52a69
...
...
@@ -4,7 +4,7 @@
<el-button
size=
"mini"
@
click=
"openController"
class=
"condition"
:class=
"controllerClass"
v-if=
"request.controller.isValid()"
>
v-if=
"request.controller
&& request.controller
.isValid()"
>
<el-row
type=
"flex"
align=
"middle"
>
<font-awesome-icon
:icon=
"['fas', 'random']"
/>
<div
class=
"condition-label"
>
{{
request
.
controller
.
label
()
}}
</div>
...
...
@@ -16,10 +16,10 @@
<el-button
size=
"mini"
@
click=
"openTimer"
class=
"condition"
:class=
"timerClass"
v-if=
"request.timer.isValid()"
>
v-if=
"request.timer
&& request.timer
.isValid()"
>
<el-row
type=
"flex"
align=
"middle"
>
<font-awesome-icon
:icon=
"['fas', 'clock']"
/>
<div
class=
"condition-label"
>
{{
request
.
timer
.
label
()
}}
</div>
<div
class=
"condition-label"
>
{{
request
.
timer
&&
request
.
timer
.
label
()
}}
</div>
</el-row>
</el-button>
</div>
...
...
frontend/src/business/components/api/test/model/ScenarioModel.js
浏览文件 @
c5d52a69
...
...
@@ -1065,11 +1065,8 @@ class JMXGenerator {
}
else
if
(
request
instanceof
HttpRequest
)
{
sampler
=
new
HTTPSamplerProxy
(
request
.
name
||
""
,
new
JMXHttpRequest
(
request
,
scenario
.
environment
));
this
.
addRequestHeader
(
sampler
,
request
);
if
(
request
.
method
.
toUpperCase
()
===
'
GET
'
)
{
this
.
addRequestArguments
(
sampler
,
request
);
}
else
{
this
.
addRequestBody
(
sampler
,
request
,
testId
);
}
this
.
addRequestArguments
(
sampler
,
request
);
this
.
addRequestBody
(
sampler
,
request
,
testId
);
}
else
if
(
request
instanceof
SqlRequest
)
{
request
.
dataSource
=
scenario
.
databaseConfigMap
.
get
(
request
.
dataSource
);
sampler
=
new
JDBCSampler
(
request
.
name
||
""
,
request
);
...
...
frontend/src/business/components/settings/system/User.vue
浏览文件 @
c5d52a69
...
...
@@ -342,6 +342,7 @@
{
min
:
2
,
max
:
50
,
message
:
this
.
$t
(
'
commons.input_limit
'
,
[
2
,
50
]),
trigger
:
'
blur
'
},
{
required
:
true
,
pattern
:
'
^[^
\
u4e00-
\
u9fa5]+$
'
,
message
:
this
.
$t
(
'
user.special_characters_are_not_supported
'
),
trigger
:
'
blur
'
}
...
...
frontend/src/business/components/track/case/components/SwitchProject.vue
浏览文件 @
c5d52a69
...
...
@@ -4,7 +4,7 @@
:close-on-click-modal=
"false"
class=
"ms-switch-project"
>
<ms-table-header
:condition.sync=
"condition"
@
search=
"initData"
title=
""
:show-create=
"false"
/>
<ms-table-header
:condition.sync=
"condition"
@
search=
"initData"
title=
"
切换项目
"
:show-create=
"false"
/>
<el-table
:data=
"tableData"
highlight-current-row
...
...
frontend/src/business/components/track/plan/components/TestPlanEdit.vue
浏览文件 @
c5d52a69
...
...
@@ -24,7 +24,6 @@
<el-col
:span=
"11"
:offset=
"2"
>
<el-form-item
:label=
"$t('test_track.plan.plan_project')"
:label-width=
"formLabelWidth"
prop=
"projectIds"
>
<el-select
:disabled=
"(form.status == null) ? false : true"
v-model=
"form.projectIds"
:placeholder=
"$t('test_track.plan.input_plan_project')"
multiple
...
...
@@ -175,18 +174,34 @@ export default {
return
;
}
param
.
workspaceId
=
localStorage
.
getItem
(
WORKSPACE_ID
);
this
.
$post
(
'
/test/plan/
'
+
this
.
operationType
,
param
,
()
=>
{
this
.
$success
(
this
.
$t
(
'
commons.save_success
'
));
this
.
dialogFormVisible
=
false
;
this
.
$emit
(
"
refresh
"
);
// 发送广播,刷新 head 上的最新列表
TrackEvent
.
$emit
(
LIST_CHANGE
);
});
if
(
this
.
operationType
===
'
edit
'
)
{
this
.
$confirm
(
'
取消项目关联会同时取消该项目下已关联的测试用例
'
,
'
提示
'
,
{
confirmButtonText
:
this
.
$t
(
'
commons.confirm
'
),
cancelButtonText
:
this
.
$t
(
'
commons.cancel
'
),
type
:
'
warning
'
}).
then
(()
=>
{
this
.
editTestPlan
(
param
);
}).
catch
(()
=>
{
this
.
$info
(
this
.
$t
(
'
commons.cancel
'
))
});
}
else
{
this
.
editTestPlan
(
param
);
}
}
else
{
return
false
;
}
});
},
editTestPlan
(
param
)
{
this
.
$post
(
'
/test/plan/
'
+
this
.
operationType
,
param
,
()
=>
{
this
.
$success
(
this
.
$t
(
'
commons.save_success
'
));
this
.
dialogFormVisible
=
false
;
this
.
$emit
(
"
refresh
"
);
// 发送广播,刷新 head 上的最新列表
TrackEvent
.
$emit
(
LIST_CHANGE
);
});
},
getProjects
()
{
this
.
$get
(
"
/project/listAll
"
,
(
response
)
=>
{
if
(
response
.
success
)
{
...
...
frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue
浏览文件 @
c5d52a69
...
...
@@ -490,14 +490,14 @@
if
(
this
.
issuesSwitch
)
{
let
desc
=
this
.
addPLabel
(
'
[
'
+
this
.
$t
(
'
test_track.plan_view.operate_step
'
)
+
'
]
'
);
let
result
=
this
.
addPLabel
(
'
[
'
+
this
.
$t
(
'
test_track.case.expected_results
'
)
+
'
]
'
);
let
execute
Result
=
this
.
addPLabel
(
'
[
'
+
this
.
$t
(
'
test_track.plan_view.actual_result
'
)
+
'
]
'
);
let
actual
Result
=
this
.
addPLabel
(
'
[
'
+
this
.
$t
(
'
test_track.plan_view.actual_result
'
)
+
'
]
'
);
this
.
testCase
.
steps
.
forEach
(
step
=>
{
let
stepPrefix
=
this
.
$t
(
'
test_track.plan_view.step
'
)
+
step
.
num
+
'
:
'
;
desc
+=
this
.
addPLabel
(
stepPrefix
+
(
step
.
desc
==
undefined
?
''
:
step
.
desc
));
result
+=
this
.
addPLabel
(
stepPrefix
+
(
step
.
result
==
undefined
?
''
:
step
.
result
));
executeResult
+=
this
.
addPLabel
(
stepPrefix
+
(
step
.
executeResult
==
undefined
?
''
:
step
.
execute
Result
));
actualResult
+=
this
.
addPLabel
(
stepPrefix
+
(
step
.
actualResult
==
undefined
?
''
:
step
.
actual
Result
));
});
this
.
testCase
.
issues
.
content
=
desc
+
this
.
addPLabel
(
''
)
+
result
+
this
.
addPLabel
(
''
)
+
execute
Result
+
this
.
addPLabel
(
''
);
this
.
testCase
.
issues
.
content
=
desc
+
this
.
addPLabel
(
''
)
+
result
+
this
.
addPLabel
(
''
)
+
actual
Result
+
this
.
addPLabel
(
''
);
this
.
$get
(
"
/test/case/project/
"
+
this
.
testCase
.
caseId
,
res
=>
{
const
project
=
res
.
data
;
...
...
frontend/src/business/components/track/review/components/TestCaseReviewEdit.vue
浏览文件 @
c5d52a69
...
...
@@ -6,6 +6,7 @@
:title=
"operationType === 'edit' ? '编辑用例评审' : '创建用例评审'"
:visible.sync=
"dialogFormVisible"
@
close=
"close"
v-loading=
"result.loading"
width=
"65%"
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"reviewForm"
>
...
...
@@ -122,6 +123,7 @@ export default {
data
()
{
return
{
dialogFormVisible
:
false
,
result
:
{},
form
:
{
name
:
''
,
projectIds
:
[],
...
...
@@ -187,7 +189,7 @@ export default {
});
},
getProjects
()
{
this
.
$get
(
"
/project/listAll
"
,
(
response
)
=>
{
this
.
result
=
this
.
$get
(
"
/project/listAll
"
,
(
response
)
=>
{
if
(
response
.
success
)
{
this
.
projects
=
response
.
data
;
}
else
{
...
...
@@ -197,7 +199,7 @@ export default {
},
setReviewerOptions
()
{
let
workspaceId
=
localStorage
.
getItem
(
WORKSPACE_ID
);
this
.
$post
(
'
/user/ws/member/tester/list
'
,
{
workspaceId
:
workspaceId
},
response
=>
{
this
.
result
=
this
.
$post
(
'
/user/ws/member/tester/list
'
,
{
workspaceId
:
workspaceId
},
response
=>
{
this
.
reviewerOptions
=
response
.
data
;
});
},
...
...
xpack
@
f2d5a342
比较
0a375848
...
f2d5a342
Subproject commit
0a375848d034d20eaf05caf11769e1c75c39235c
Subproject commit
f2d5a342c82e629f510550d5778d752bb73bf5e7
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录