Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
xiaofang li
MeterSphere
Commits
7ee6a77d
Commit
7ee6a77d
authored
3 years ago
by
fit2-zhao
Committed by
fit2-zhao
3 years ago
Browse files
Options
Download
Email Patches
Plain Diff
feat (接口定义): 返回参数增加日志优化处理
parent
6c90ff32
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
backend/src/main/java/io/metersphere/log/utils/ReflexObjectUtil.java
+22
-3
.../main/java/io/metersphere/log/utils/ReflexObjectUtil.java
backend/src/main/java/io/metersphere/log/utils/dff/ApiDefinitionDiffUtil.java
+84
-0
...a/io/metersphere/log/utils/dff/ApiDefinitionDiffUtil.java
frontend/src/business/components/history/ChangeHistory.vue
+1
-1
frontend/src/business/components/history/ChangeHistory.vue
frontend/src/business/components/history/api/ApiHistoryDetail.vue
+23
-1
.../src/business/components/history/api/ApiHistoryDetail.vue
frontend/src/business/components/history/api/ApiHttpRequestParams.vue
+22
-16
.../business/components/history/api/ApiHttpRequestParams.vue
with
152 additions
and
21 deletions
+152
-21
backend/src/main/java/io/metersphere/log/utils/ReflexObjectUtil.java
+
22
-
3
View file @
7ee6a77d
...
...
@@ -164,9 +164,28 @@ public class ReflexObjectUtil {
}
// 深度对比
else
if
(
StringUtils
.
equals
(
module
,
"api_definition"
))
{
String
newValue
=
newColumns
.
get
(
i
).
getOriginalValue
().
toString
();
String
oldValue
=
column
.
getOriginalValue
().
toString
();
column
.
setDiffValue
(
ApiDefinitionDiffUtil
.
diff
(
newValue
,
oldValue
));
if
(
originalColumns
.
get
(
i
).
getColumnName
().
equals
(
"request"
))
{
String
newValue
=
newColumns
.
get
(
i
).
getOriginalValue
().
toString
();
String
oldValue
=
column
.
getOriginalValue
().
toString
();
column
.
setDiffValue
(
ApiDefinitionDiffUtil
.
diff
(
newValue
,
oldValue
));
}
else
if
(
originalColumns
.
get
(
i
).
getColumnName
().
equals
(
"response"
))
{
String
newValue
=
newColumns
.
get
(
i
).
getOriginalValue
().
toString
();
String
oldValue
=
column
.
getOriginalValue
().
toString
();
column
.
setDiffValue
(
ApiDefinitionDiffUtil
.
diffResponse
(
newValue
,
oldValue
));
}
}
else
{
try
{
String
newValue
=
column
.
getNewValue
().
toString
();
if
(
StringUtils
.
isNotEmpty
(
newValue
))
{
column
.
setNewValue
(
newValue
.
replaceAll
(
"\\n"
,
" "
));
}
String
oldValue
=
column
.
getOriginalValue
().
toString
();
if
(
StringUtils
.
isNotEmpty
(
oldValue
))
{
column
.
setOriginalValue
(
oldValue
.
replaceAll
(
"\\n"
,
" "
));
}
}
catch
(
Exception
e
)
{
}
}
comparedColumns
.
add
(
column
);
}
...
...
This diff is collapsed.
Click to expand it.
backend/src/main/java/io/metersphere/log/utils/dff/ApiDefinitionDiffUtil.java
+
84
-
0
View file @
7ee6a77d
...
...
@@ -6,6 +6,7 @@ import io.metersphere.api.dto.definition.request.sampler.MsDubboSampler;
import
io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy
;
import
io.metersphere.api.dto.definition.request.sampler.MsJDBCSampler
;
import
io.metersphere.api.dto.definition.request.sampler.MsTCPSampler
;
import
io.metersphere.api.dto.scenario.Body
;
import
io.metersphere.log.utils.ReflexObjectUtil
;
import
io.metersphere.log.utils.json.diff.JacksonDiff
;
import
io.metersphere.log.utils.json.diff.JsonDiff
;
...
...
@@ -23,6 +24,23 @@ public class ApiDefinitionDiffUtil {
static
final
String
JSON_START
=
"{\"root\":"
;
static
final
String
JSON_END
=
"}"
;
public
static
String
diffResponse
(
String
newValue
,
String
oldValue
)
{
Map
<
String
,
String
>
diffMap
=
new
LinkedHashMap
<>();
JSONObject
bloBsNew
=
JSON
.
parseObject
(
newValue
);
JSONObject
bloBsOld
=
JSON
.
parseObject
(
oldValue
);
if
(
bloBsNew
==
null
||
StringUtils
.
isEmpty
(
bloBsNew
.
getString
(
"type"
)))
{
return
null
;
}
JsonDiff
jsonDiff
=
new
JacksonDiff
();
if
(
bloBsNew
.
getString
(
"type"
).
equals
(
"HTTP"
))
{
diffHttpResponse
(
bloBsNew
,
bloBsOld
,
jsonDiff
,
diffMap
);
if
(
diffMap
.
size
()
>
0
)
{
diffMap
.
put
(
"type"
,
bloBsNew
.
getString
(
"type"
));
}
}
return
JSON
.
toJSONString
(
diffMap
);
}
public
static
String
diff
(
String
newValue
,
String
oldValue
)
{
try
{
JSONObject
bloBsNew
=
JSON
.
parseObject
(
newValue
);
...
...
@@ -141,6 +159,11 @@ public class ApiDefinitionDiffUtil {
if
(
CollectionUtils
.
isNotEmpty
(
authDiffColumns
))
{
diffMap
.
put
(
"body_auth"
,
JSON
.
toJSONString
(
authDiffColumns
));
}
else
if
(
CollectionUtils
.
isEmpty
(
authDiffColumns
)
&&
CollectionUtils
.
isEmpty
(
authColumnsOld
)
&&
CollectionUtils
.
isNotEmpty
(
authColumns
))
{
authColumns
.
forEach
(
item
->
{
Object
value
=
item
.
getOriginalValue
();
item
.
setNewValue
(
value
);
item
.
setOriginalValue
(
""
);
});
diffMap
.
put
(
"body_auth"
,
JSON
.
toJSONString
(
authColumns
));
}
}
...
...
@@ -155,6 +178,67 @@ public class ApiDefinitionDiffUtil {
}
}
private
static
void
diffHttpResponse
(
JSONObject
httpNew
,
JSONObject
httpOld
,
JsonDiff
jsonDiff
,
Map
<
String
,
String
>
diffMap
)
{
// 请求头对比 old/new
if
(
httpNew
.
get
(
"headers"
)
!=
null
&&
httpOld
.
get
(
"headers"
)
!=
null
)
{
String
headerNew
=
JSON_START
+
httpNew
.
get
(
"headers"
).
toString
()
+
JSON_END
;
String
headerOld
=
JSON_START
+
httpOld
.
get
(
"headers"
).
toString
()
+
JSON_END
;
if
(!
StringUtils
.
equals
(
headerNew
,
headerOld
))
{
String
patch
=
jsonDiff
.
diff
(
headerOld
,
headerNew
);
String
diffPatch
=
jsonDiff
.
apply
(
headerNew
,
patch
);
if
(
StringUtils
.
isNotEmpty
(
diffPatch
))
{
diffMap
.
put
(
"header"
,
diffPatch
);
}
}
}
// 对比statusCode参数
if
(
httpNew
.
get
(
"statusCode"
)
!=
null
&&
httpOld
.
get
(
"statusCode"
)
!=
null
)
{
String
statusCodeNew
=
JSON_START
+
httpNew
.
get
(
"statusCode"
).
toString
()
+
JSON_END
;
String
statusCodeOld
=
JSON_START
+
httpOld
.
get
(
"statusCode"
).
toString
()
+
JSON_END
;
if
(!
StringUtils
.
equals
(
statusCodeNew
,
statusCodeOld
))
{
String
patch
=
jsonDiff
.
diff
(
statusCodeOld
,
statusCodeNew
);
String
diff
=
jsonDiff
.
apply
(
statusCodeNew
,
patch
);
if
(
StringUtils
.
isNotEmpty
(
diff
))
{
diffMap
.
put
(
"statusCode"
,
diff
);
}
}
}
// 对比BODY-JSON参数
if
(
httpNew
.
get
(
"body"
)
!=
null
&&
httpOld
.
get
(
"body"
)
!=
null
)
{
String
bodyStrNew
=
httpNew
.
get
(
"body"
).
toString
();
String
bodyStrOld
=
httpOld
.
get
(
"body"
).
toString
();
if
(!
StringUtils
.
equals
(
bodyStrNew
,
bodyStrOld
))
{
String
patch
=
jsonDiff
.
diff
(
bodyStrOld
,
bodyStrNew
);
String
diff
=
jsonDiff
.
apply
(
bodyStrNew
,
patch
);
if
(
StringUtils
.
isNotEmpty
(
diff
))
{
diffMap
.
put
(
"body"
,
diff
);
}
}
// 对比BODY-FORM参数
Body
bodyNew
=
JSON
.
parseObject
(
bodyStrNew
,
Body
.
class
);
Body
bodyOld
=
JSON
.
parseObject
(
bodyStrOld
,
Body
.
class
);
if
(
CollectionUtils
.
isNotEmpty
(
bodyNew
.
getKvs
())
&&
CollectionUtils
.
isNotEmpty
(
bodyOld
.
getKvs
()))
{
bodyNew
.
getKvs
().
remove
(
bodyNew
.
getKvs
().
size
()
-
1
);
bodyOld
.
getKvs
().
remove
(
bodyOld
.
getKvs
().
size
()
-
1
);
}
String
bodyFormNew
=
JSON_START
+
JSON
.
toJSONString
(
bodyNew
.
getKvs
())
+
JSON_END
;
String
bodyFormOld
=
JSON_START
+
JSON
.
toJSONString
(
bodyOld
.
getKvs
())
+
JSON_END
;
if
(!
StringUtils
.
equals
(
bodyFormNew
,
bodyFormOld
))
{
String
patch
=
jsonDiff
.
diff
(
bodyFormOld
,
bodyFormNew
);
String
diff
=
jsonDiff
.
apply
(
bodyFormNew
,
patch
);
if
(
StringUtils
.
isNotEmpty
(
diff
))
{
diffMap
.
put
(
"body_form"
,
diff
);
}
}
// 对比BODY-XML参数
if
(!
StringUtils
.
equals
(
bodyNew
.
getRaw
(),
bodyOld
.
getRaw
()))
{
diffMap
.
put
(
"body_raw_1"
,
bodyNew
.
getRaw
());
diffMap
.
put
(
"body_raw_2"
,
bodyOld
.
getRaw
());
}
}
}
private
static
void
diffTcp
(
MsTCPSampler
tcpNew
,
MsTCPSampler
tcpOld
,
JsonDiff
jsonDiff
,
Map
<
String
,
String
>
diffMap
)
{
// 对比请求参数
if
(
CollectionUtils
.
isNotEmpty
(
tcpNew
.
getParameters
()))
{
...
...
This diff is collapsed.
Click to expand it.
frontend/src/business/components/history/ChangeHistory.vue
+
1
-
1
View file @
7ee6a77d
...
...
@@ -93,7 +93,7 @@ export default {
value
.
operTime
=
row
.
operTime
;
if
(
value
.
columnName
===
"
tags
"
)
{
this
.
$refs
.
tagsHistoryDetail
.
open
(
value
);
}
else
if
(
value
.
columnName
===
"
request
"
&&
}
else
if
(
(
value
.
columnName
===
"
request
"
||
value
.
columnName
===
"
response
"
)
&&
(
row
.
operModule
===
"
接口定义
"
||
row
.
operModule
===
"
接口定義
"
||
row
.
operModule
===
"
Api definition
"
))
{
this
.
$refs
.
apiHistoryDetail
.
open
(
value
);
}
else
{
...
...
This diff is collapsed.
Click to expand it.
frontend/src/business/components/history/api/ApiHistoryDetail.vue
+
23
-
1
View file @
7ee6a77d
...
...
@@ -11,7 +11,7 @@
</div>
<div
style=
"overflow: auto"
>
<p
class=
"tip"
>
{{
this
.
$t
(
'
report.test_log_details
'
)
}}
</p>
<ms-api-http-request-params
:request=
"detail"
v-if=
"detail.type === 'HTTPSamplerProxy'"
/>
<ms-api-http-request-params
:request=
"detail"
v-if=
"detail.type === 'HTTPSamplerProxy'
|| detail.type === 'HTTP'
"
/>
<ms-api-tcp-parameters
:request=
"detail"
v-if=
"detail.type === 'TCPSampler'"
/>
<ms-api-jdbc-parameters
:request=
"detail"
v-if=
"detail.type === 'JDBCSampler'"
/>
<ms-api-dubbo-parameters
:request=
"detail"
v-if=
"detail.type === 'DubboSampler'"
/>
...
...
@@ -65,6 +65,8 @@ export default {
this
.
formatJdbc
(
diffValue
);
}
else
if
(
diffValue
.
type
===
'
DubboSampler
'
)
{
this
.
formatDubbo
(
diffValue
);
}
else
{
this
.
formatHttp
(
diffValue
);
}
this
.
detail
.
type
=
diffValue
.
type
;
}
...
...
@@ -97,6 +99,11 @@ export default {
}
}
},
removeBlankLines
(
array
)
{
if
(
array
&&
array
.
length
>
0
&&
!
array
[
array
.
length
-
1
].
name
&&
!
array
[
array
.
length
-
1
].
value
)
{
array
.
splice
(
array
.
length
-
1
,
1
);
}
},
formatHttp
(
diffValue
)
{
this
.
detail
.
body
=
{};
this
.
detail
.
headerId
=
getUUID
();
...
...
@@ -112,6 +119,7 @@ export default {
}
if
(
diffValue
.
body_form
)
{
let
form
=
(
JSON
.
parse
(
diffValue
.
body_form
)).
root
;
this
.
removeBlankLines
(
form
);
this
.
detail
.
body
.
form
=
form
;
this
.
detail
.
headerId
=
getUUID
();
}
...
...
@@ -122,16 +130,25 @@ export default {
}
if
(
diffValue
.
header
)
{
let
header
=
(
JSON
.
parse
(
diffValue
.
header
)).
root
;
this
.
removeBlankLines
(
header
);
this
.
detail
.
header
=
header
;
this
.
detail
.
headerId
=
getUUID
();
}
if
(
diffValue
.
statusCode
)
{
let
statusCode
=
(
JSON
.
parse
(
diffValue
.
statusCode
)).
root
;
this
.
removeBlankLines
(
statusCode
);
this
.
detail
.
statusCode
=
statusCode
;
this
.
detail
.
headerId
=
getUUID
();
}
if
(
diffValue
.
query
)
{
let
query
=
(
JSON
.
parse
(
diffValue
.
query
)).
root
;
this
.
removeBlankLines
(
query
);
this
.
detail
.
query
=
query
;
this
.
detail
.
headerId
=
getUUID
();
}
if
(
diffValue
.
rest
)
{
let
rest
=
(
JSON
.
parse
(
diffValue
.
rest
)).
root
;
this
.
removeBlankLines
(
rest
);
this
.
detail
.
rest
=
rest
;
this
.
detail
.
headerId
=
getUUID
();
}
...
...
@@ -150,6 +167,7 @@ export default {
}
if
(
diffValue
.
query
)
{
let
parameters
=
(
JSON
.
parse
(
diffValue
.
query
)).
root
;
this
.
removeBlankLines
(
parameters
);
this
.
detail
.
parameters
=
parameters
;
this
.
detail
.
headerId
=
getUUID
();
}
...
...
@@ -161,6 +179,7 @@ export default {
}
if
(
diffValue
.
body_xml
)
{
let
parameters
=
(
JSON
.
parse
(
diffValue
.
body_xml
)).
root
;
this
.
removeBlankLines
(
parameters
);
this
.
detail
.
body
.
xml
=
parameters
;
this
.
detail
.
body
.
xml_1
=
diffValue
.
body_xml_1
;
this
.
detail
.
body
.
xml_2
=
diffValue
.
body_xml_2
;
...
...
@@ -189,6 +208,7 @@ export default {
}
if
(
diffValue
.
variables
)
{
let
parameters
=
(
JSON
.
parse
(
diffValue
.
variables
)).
root
;
this
.
removeBlankLines
(
parameters
);
this
.
detail
.
variables
=
parameters
;
this
.
detail
.
headerId
=
getUUID
();
}
...
...
@@ -213,11 +233,13 @@ export default {
}
if
(
diffValue
.
args
)
{
let
parameters
=
(
JSON
.
parse
(
diffValue
.
args
)).
root
;
this
.
removeBlankLines
(
parameters
);
this
.
detail
.
args
=
parameters
;
this
.
detail
.
headerId
=
getUUID
();
}
if
(
diffValue
.
attachment
)
{
let
parameters
=
(
JSON
.
parse
(
diffValue
.
attachment
)).
root
;
this
.
removeBlankLines
(
parameters
);
this
.
detail
.
attachment
=
parameters
;
this
.
detail
.
headerId
=
getUUID
();
}
...
...
This diff is collapsed.
Click to expand it.
frontend/src/business/components/history/api/ApiHttpRequestParams.vue
+
22
-
16
View file @
7ee6a77d
...
...
@@ -6,7 +6,9 @@
<el-tab-pane
:label=
"$t('api_test.request.headers')"
name=
"headers"
v-if=
"request.header"
>
<ms-api-key-value-detail
:items=
"request.header"
:showDesc=
"true"
:format=
"request.headerId"
/>
</el-tab-pane>
<el-tab-pane
:label=
"$t('api_test.definition.request.status_code')"
name=
"statusCode"
v-if=
"request.statusCode"
>
<ms-api-key-value-detail
:items=
"request.statusCode"
:showDesc=
"true"
:format=
"request.headerId"
/>
</el-tab-pane>
<!--query 参数-->
<el-tab-pane
:label=
"$t('api_test.definition.request.query_param')"
name=
"parameters"
v-if=
"request.query"
>
<ms-api-key-value-detail
:show-required=
"true"
:items=
"request.query"
:showDesc=
"true"
:format=
"request.headerId"
/>
...
...
@@ -97,7 +99,13 @@ export default {
}
},
created
()
{
if
(
this
.
request
.
body
&&
(
this
.
request
.
body
.
jsonSchema
||
this
.
request
.
body
.
form
||
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
))
{
if
(
this
.
request
.
header
)
{
this
.
activeName
=
"
headers
"
;
}
else
if
(
this
.
request
.
query
)
{
this
.
activeName
=
"
parameters
"
;
}
else
if
(
this
.
request
.
rest
)
{
this
.
activeName
=
"
rest
"
;
}
else
if
(
this
.
request
.
body
&&
(
this
.
request
.
body
.
jsonSchema
||
this
.
request
.
body
.
form
||
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
))
{
this
.
activeName
=
"
body
"
;
if
(
this
.
request
.
body
.
jsonSchema
)
{
this
.
activeBody
=
"
json
"
;
...
...
@@ -108,24 +116,26 @@ export default {
if
(
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
)
{
this
.
activeBody
=
"
raw
"
;
}
}
else
if
(
this
.
request
.
query
)
{
this
.
activeName
=
"
parameters
"
;
}
else
if
(
this
.
request
.
header
)
{
this
.
activeName
=
"
headers
"
;
}
else
if
(
this
.
request
.
rest
)
{
this
.
activeName
=
"
rest
"
;
}
else
if
(
this
.
request
.
body_config
)
{
this
.
activeName
=
"
advancedConfig
"
;
}
else
if
(
this
.
request
.
body_auth
)
{
this
.
activeName
=
"
authConfig
"
;
}
else
if
(
this
.
request
.
statusCode
)
{
this
.
activeName
=
"
statusCode
"
;
}
this
.
reloadCodeEdit
();
},
watch
:
{
'
request.headerId
'
()
{
if
(
this
.
request
.
body
&&
(
this
.
request
.
body
.
jsonSchema
||
this
.
request
.
body
.
form
||
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
))
{
if
(
this
.
request
.
header
)
{
this
.
activeName
=
"
headers
"
;
}
else
if
(
this
.
request
.
query
)
{
this
.
activeName
=
"
parameters
"
;
}
else
if
(
this
.
request
.
rest
)
{
this
.
activeName
=
"
rest
"
;
}
else
if
(
this
.
request
.
body
&&
(
this
.
request
.
body
.
jsonSchema
||
this
.
request
.
body
.
form
||
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
))
{
this
.
activeName
=
"
body
"
;
if
(
this
.
request
.
body
.
json
)
{
if
(
this
.
request
.
body
.
json
Schema
)
{
this
.
activeBody
=
"
json
"
;
}
if
(
this
.
request
.
body
.
form
)
{
...
...
@@ -134,16 +144,12 @@ export default {
if
(
this
.
request
.
body
.
raw_1
||
this
.
request
.
body
.
raw_2
)
{
this
.
activeBody
=
"
raw
"
;
}
}
else
if
(
this
.
request
.
query
)
{
this
.
activeName
=
"
parameters
"
;
}
else
if
(
this
.
request
.
header
)
{
this
.
activeName
=
"
headers
"
;
}
else
if
(
this
.
request
.
rest
)
{
this
.
activeName
=
"
rest
"
;
}
else
if
(
this
.
request
.
body_config
)
{
this
.
activeName
=
"
advancedConfig
"
;
}
else
if
(
this
.
request
.
body_auth
)
{
this
.
activeName
=
"
authConfig
"
;
}
else
if
(
this
.
request
.
statusCode
)
{
this
.
activeName
=
"
statusCode
"
;
}
this
.
reloadCodeEdit
();
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment