Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
holmes
Commits
4a24277c
Commit
4a24277c
authored
Jun 11, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
使用全局变量Map来代替redis存储场景过程中的值
parent
e929afb7
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
117 additions
and
62 deletions
+117
-62
AutoUtilsService.java
...main/java/cn/qg/holmes/service/auto/AutoUtilsService.java
+5
-3
AutoUtilsServiceImpl.java
.../cn/qg/holmes/service/auto/impl/AutoUtilsServiceImpl.java
+83
-36
SceneTestcaseServiceImpl.java
...qg/holmes/service/auto/impl/SceneTestcaseServiceImpl.java
+29
-23
No files found.
src/main/java/cn/qg/holmes/service/auto/AutoUtilsService.java
View file @
4a24277c
...
@@ -6,13 +6,15 @@ import java.util.UUID;
...
@@ -6,13 +6,15 @@ import java.util.UUID;
public
interface
AutoUtilsService
{
public
interface
AutoUtilsService
{
Map
<
String
,
String
>
replaceHeaders
(
String
headers
,
String
variables
,
UUID
uuid
);
boolean
extractResponse
(
String
response
,
String
extract
,
UUID
uuid
);
Map
<
String
,
String
>
replaceParameters
(
String
parameters
,
String
variables
,
UUID
uuid
);
Map
<
String
,
Object
>
extractResponseNew
(
String
response
,
String
extract
);
Map
<
String
,
String
>
replaceVariables
(
String
parameters
,
UUID
uuid
);
Map
<
String
,
String
>
replaceVariables
(
String
parameters
,
UUID
uuid
);
boolean
extractResponse
(
String
response
,
String
extract
,
UUID
uuid
);
Map
<
String
,
String
>
replaceVariablesNew
(
String
parameters
,
Map
<
String
,
Object
>
globalMap
);
boolean
assertResponse
(
String
response
,
List
<
Map
>
validateList
);
boolean
assertResponse
(
String
response
,
List
<
Map
>
validateList
);
Map
<
String
,
Object
>
handlePreCondition
(
String
namespace
,
String
preString
,
UUID
uuid
);
}
}
src/main/java/cn/qg/holmes/service/auto/impl/AutoUtilsServiceImpl.java
View file @
4a24277c
package
cn
.
qg
.
holmes
.
service
.
auto
.
impl
;
package
cn
.
qg
.
holmes
.
service
.
auto
.
impl
;
import
cn.qg.holmes.service.auto.AutoUtilsService
;
import
cn.qg.holmes.service.auto.AutoUtilsService
;
import
cn.qg.holmes.utils.HttpClientUtils
;
import
cn.qg.holmes.utils.RedisUtils
;
import
cn.qg.holmes.utils.RedisUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.jayway.jsonpath.JsonPath
;
import
com.jayway.jsonpath.JsonPath
;
...
@@ -8,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -8,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.UUID
;
...
@@ -26,58 +28,38 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
...
@@ -26,58 +28,38 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
RedisUtils
redisUtils
;
RedisUtils
redisUtils
;
/**
/**
* 将请求headers中的变量替换成对应的值
* 参数替换-新
* @param headers 请求头json
* @param parameters headers或者parameters
* @param variables 参数json
* @param uuid 唯一标识
* @return
*/
public
Map
<
String
,
String
>
replaceHeaders
(
String
headers
,
String
variables
,
UUID
uuid
)
{
log
.
info
(
"开始执行请求头替换!"
);
Map
<
String
,
String
>
headersMap
=
JSON
.
parseObject
(
headers
,
Map
.
class
);
Map
<
String
,
String
>
varMap
=
JSON
.
parseObject
(
variables
,
Map
.
class
);
log
.
info
(
"替换之前的headers:{}"
,
headersMap
);
log
.
info
(
"参数列表:{}"
,
varMap
);
for
(
String
key:
varMap
.
keySet
())
{
String
value
=
varMap
.
get
(
key
);
headersMap
.
put
(
key
,
redisUtils
.
get
(
uuid
+
"_"
+
value
.
substring
(
1
)).
toString
());
}
log
.
info
(
"替换之后的headers:{}"
,
headersMap
);
return
headersMap
;
}
/**
* 将请求体中的变量替换成对应的值
* @param parameters 请求参数json
* @param variables 变量json
* @return 替换后的参数Map
*/
*/
public
Map
<
String
,
String
>
replaceParameters
(
String
parameters
,
String
variables
,
UUID
uuid
)
{
@Override
log
.
info
(
"开始执行请求参数替换!"
);
public
Map
<
String
,
String
>
replaceVariables
(
String
parameters
,
UUID
uuid
)
{
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
Map
<
String
,
String
>
varMap
=
JSON
.
parseObject
(
variables
,
Map
.
class
);
log
.
info
(
"替换之前的参数:{}"
,
parameterMap
);
log
.
info
(
"替换之前的参数:{}"
,
parameterMap
);
log
.
info
(
"参数列表:{}"
,
varMap
);
for
(
String
key:
parameterMap
.
keySet
())
{
for
(
String
key:
varMap
.
keySet
())
{
String
value
=
parameterMap
.
get
(
key
);
String
value
=
varMap
.
get
(
key
);
if
(
value
.
startsWith
(
"$"
))
{
parameterMap
.
put
(
key
,
redisUtils
.
get
(
uuid
+
"_"
+
value
.
substring
(
1
)).
toString
());
parameterMap
.
put
(
key
,
redisUtils
.
get
(
uuid
+
"_"
+
value
.
substring
(
1
)).
toString
());
}
}
}
log
.
info
(
"替换之后的参数:{}"
,
parameterMap
);
log
.
info
(
"替换之后的参数:{}"
,
parameterMap
);
return
parameterMap
;
return
parameterMap
;
}
}
/**
/**
* 参数替换-新
* 新的参数替换,不再从redis里取值,而是从全局Map中取值
* @param parameters headers或者parameters
* @param parameters
* @param uuid 唯一标识
* @param globalMap
* @return
*/
*/
@Override
@Override
public
Map
<
String
,
String
>
replaceVariables
(
String
parameters
,
UUID
uuid
)
{
public
Map
<
String
,
String
>
replaceVariables
New
(
String
parameters
,
Map
<
String
,
Object
>
globalMap
)
{
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
log
.
info
(
"替换之前的参数:{}"
,
parameterMap
);
log
.
info
(
"替换之前的参数:{}"
,
parameterMap
);
for
(
String
key:
parameterMap
.
keySet
())
{
for
(
String
key:
parameterMap
.
keySet
())
{
String
value
=
parameterMap
.
get
(
key
);
String
value
=
parameterMap
.
get
(
key
);
if
(
value
.
startsWith
(
"$"
))
{
if
(
value
.
startsWith
(
"$"
))
{
parameterMap
.
put
(
key
,
redisUtils
.
get
(
uuid
+
"_"
+
value
.
substring
(
1
)).
toString
());
parameterMap
.
put
(
key
,
globalMap
.
get
(
value
.
substring
(
1
)).
toString
());
}
}
}
}
log
.
info
(
"替换之后的参数:{}"
,
parameterMap
);
log
.
info
(
"替换之后的参数:{}"
,
parameterMap
);
...
@@ -119,6 +101,35 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
...
@@ -119,6 +101,35 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
return
true
;
return
true
;
}
}
@Override
public
Map
<
String
,
Object
>
extractResponseNew
(
String
response
,
String
extract
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
try
{
Map
<
String
,
String
>
extractMap
=
JSON
.
parseObject
(
extract
,
Map
.
class
);
for
(
String
key:
extractMap
.
keySet
())
{
String
value
=
extractMap
.
get
(
key
);
String
extractValue
=
""
;
// 如果以$开头,则使用JsonPath解析
if
(
value
.
startsWith
(
"$"
))
{
extractValue
=
JsonPath
.
read
(
response
,
value
);
}
else
{
Pattern
pattern
=
Pattern
.
compile
(
value
);
Matcher
matcher
=
pattern
.
matcher
(
response
);
if
(
matcher
.
find
())
{
extractValue
=
matcher
.
group
(
1
);
}
else
{
return
null
;
}
}
resultMap
.
put
(
key
,
extractValue
);
}
return
resultMap
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
resultMap
;
}
}
/**
/**
* 响应断言
* 响应断言
* @return
* @return
...
@@ -136,6 +147,42 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
...
@@ -136,6 +147,42 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
return
true
;
return
true
;
}
}
/**
*
* @param namespace
* @param preString
* @param uuid
* @return
*/
@Override
public
Map
<
String
,
Object
>
handlePreCondition
(
String
namespace
,
String
preString
,
UUID
uuid
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
try
{
List
<
Map
>
preList
=
JSON
.
parseArray
(
preString
,
Map
.
class
);
for
(
Map
<
String
,
Object
>
map:
preList
)
{
String
db
=
map
.
get
(
"db"
).
toString
();
String
sql
=
map
.
get
(
"sql"
).
toString
();
String
key
=
map
.
get
(
"key"
).
toString
();
String
type
=
map
.
get
(
"type"
).
toString
();
Map
<
String
,
String
>
params
=
new
HashMap
<>();
params
.
put
(
"namespace"
,
namespace
);
params
.
put
(
"database"
,
db
);
params
.
put
(
"sql"
,
sql
);
params
.
put
(
"type"
,
type
);
String
url
=
"http://localhost:8082/sql/execute"
;
String
result
=
HttpClientUtils
.
doGet
(
url
,
params
);
// String redisKey = uuid + "_" + key;
// redisUtils.set(redisKey, JsonPath.read("$.data", result));
// redisUtils.expire(redisKey, 120);
resultMap
.
put
(
key
,
JsonPath
.
read
(
"$.data"
,
result
));
}
return
resultMap
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
/**
*
*
* @param comparator
* @param comparator
...
...
src/main/java/cn/qg/holmes/service/auto/impl/SceneTestcaseServiceImpl.java
View file @
4a24277c
...
@@ -49,14 +49,21 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
...
@@ -49,14 +49,21 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
@Override
@Override
public
String
executeSceneTestcase
(
String
namespace
,
Integer
sceneId
,
String
batch
)
{
public
String
executeSceneTestcase
(
String
namespace
,
Integer
sceneId
,
String
batch
)
{
UUID
uuid
=
UUID
.
randomUUID
();
QueryWrapper
queryWrapper
=
new
QueryWrapper
();
QueryWrapper
queryWrapper
=
new
QueryWrapper
();
queryWrapper
.
eq
(
"scene_id"
,
sceneId
);
queryWrapper
.
eq
(
"scene_id"
,
sceneId
);
queryWrapper
.
orderByAsc
(
"sequence"
);
queryWrapper
.
orderByAsc
(
"sequence"
);
List
<
SceneTestcase
>
sceneTestcaseList
=
sceneTestcaseMapper
.
selectList
(
queryWrapper
);
List
<
SceneTestcase
>
sceneTestcaseList
=
sceneTestcaseMapper
.
selectList
(
queryWrapper
);
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
// 全局变量Map
Map
<
String
,
Object
>
globalMap
=
new
HashMap
<>();
for
(
SceneTestcase
sceneTestcase:
sceneTestcaseList
)
{
for
(
SceneTestcase
sceneTestcase:
sceneTestcaseList
)
{
resultList
.
add
(
JSON
.
parseObject
(
sceneTestcaseExecution
(
namespace
,
sceneId
,
sceneTestcase
.
getInterfaceId
(),
sceneTestcase
.
getSequence
(),
uuid
,
batch
),
Map
.
class
));
// resultList.add(JSON.parseObject(sceneTestcaseExecution(namespace, sceneId, sceneTestcase.getInterfaceId(), sceneTestcase.getSequence(), uuid, batch), Map.class));
Map
<
String
,
Object
>
tempMap
=
sceneTestcaseExecution
(
namespace
,
sceneId
,
sceneTestcase
.
getInterfaceId
(),
sceneTestcase
.
getSequence
(),
batch
,
globalMap
);
Map
<
String
,
Object
>
reportMap
=
(
Map
<
String
,
Object
>)
tempMap
.
get
(
"report"
);
Map
<
String
,
Object
>
extractMap
=
(
Map
<
String
,
Object
>)
tempMap
.
get
(
"extract"
);
resultList
.
add
(
reportMap
);
// 将解析出来的值放入全局变量Map
globalMap
.
putAll
(
extractMap
);
}
}
return
JSON
.
toJSONString
(
resultList
);
return
JSON
.
toJSONString
(
resultList
);
}
}
...
@@ -71,7 +78,7 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
...
@@ -71,7 +78,7 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
return
sceneTestcaseMapper
.
getSceneTestcaseListBySceneId
(
sceneId
);
return
sceneTestcaseMapper
.
getSceneTestcaseListBySceneId
(
sceneId
);
}
}
public
String
sceneTestcaseExecution
(
String
namespace
,
Integer
sceneId
,
Integer
interfaceId
,
Integer
sequence
,
UUID
uuid
,
String
batch
)
{
public
Map
<
String
,
Object
>
sceneTestcaseExecution
(
String
namespace
,
Integer
sceneId
,
Integer
interfaceId
,
Integer
sequence
,
String
batch
,
Map
<
String
,
Object
>
globalMap
)
{
QueryWrapper
<
SceneTestcase
>
queryWrapper
=
new
QueryWrapper
();
QueryWrapper
<
SceneTestcase
>
queryWrapper
=
new
QueryWrapper
();
queryWrapper
.
eq
(
"scene_id"
,
sceneId
);
queryWrapper
.
eq
(
"scene_id"
,
sceneId
);
queryWrapper
.
eq
(
"interface_id"
,
interfaceId
);
queryWrapper
.
eq
(
"interface_id"
,
interfaceId
);
...
@@ -91,19 +98,13 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
...
@@ -91,19 +98,13 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
String
validate
=
sceneTestcase
.
getValidate
();
String
validate
=
sceneTestcase
.
getValidate
();
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
Map
<
String
,
String
>
parameterMap
=
JSON
.
parseObject
(
parameters
,
Map
.
class
);
Map
<
String
,
String
>
headersMap
=
JSON
.
parseObject
(
headers
,
Map
.
class
);
Map
<
String
,
String
>
headersMap
=
JSON
.
parseObject
(
headers
,
Map
.
class
);
// 使用变量替换headers
// if (variables != null && !variables.isEmpty() && headers != null && !headers.isEmpty()) {
// headersMap = autoUtilsService.replaceHeaders(headers, variables, uuid);
// }
if
(
headers
!=
null
&&
!
headers
.
isEmpty
())
{
if
(
headers
!=
null
&&
!
headers
.
isEmpty
())
{
headersMap
=
autoUtilsService
.
replaceVariables
(
headers
,
uuid
);
// headersMap = autoUtilsService.replaceVariables(headers, uuid);
headersMap
=
autoUtilsService
.
replaceVariablesNew
(
headers
,
globalMap
);
}
}
// 使用变量替换参数
// if (variables != null && !variables.isEmpty() && parameters != null && !parameters.isEmpty()) {
// parameterMap = autoUtilsService.replaceParameters(parameters, variables, uuid);
// }
if
(
parameters
!=
null
&&
!
parameters
.
isEmpty
())
{
if
(
parameters
!=
null
&&
!
parameters
.
isEmpty
())
{
parameterMap
=
autoUtilsService
.
replaceVariables
(
parameters
,
uuid
);
// parameterMap = autoUtilsService.replaceVariables(parameters, uuid);
parameterMap
=
autoUtilsService
.
replaceVariablesNew
(
parameters
,
globalMap
);
}
}
// 创建断言列表
// 创建断言列表
List
<
Map
>
validateList
=
new
ArrayList
<>();
List
<
Map
>
validateList
=
new
ArrayList
<>();
...
@@ -137,17 +138,19 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
...
@@ -137,17 +138,19 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
assertResult
=
autoUtilsService
.
assertResponse
(
response
,
validateList
);
assertResult
=
autoUtilsService
.
assertResponse
(
response
,
validateList
);
}
}
// 解析响应
// 解析响应
Map
<
String
,
Object
>
extractMap
=
new
HashMap
<>();
if
(
extract
!=
null
&&
!
extract
.
isEmpty
())
{
if
(
extract
!=
null
&&
!
extract
.
isEmpty
())
{
autoUtilsService
.
extractResponse
(
response
,
extract
,
uuid
);
// autoUtilsService.extractResponse(response, extract, uuid);
extractMap
=
autoUtilsService
.
extractResponseNew
(
response
,
extract
);
}
}
Map
<
String
,
Object
>
m
ap
=
new
HashMap
<>();
Map
<
String
,
Object
>
reportM
ap
=
new
HashMap
<>();
m
ap
.
put
(
"url"
,
url
);
reportM
ap
.
put
(
"url"
,
url
);
m
ap
.
put
(
"name"
,
interfaceName
);
reportM
ap
.
put
(
"name"
,
interfaceName
);
m
ap
.
put
(
"headers"
,
headersMap
);
reportM
ap
.
put
(
"headers"
,
headersMap
);
m
ap
.
put
(
"parameters"
,
parameterMap
);
reportM
ap
.
put
(
"parameters"
,
parameterMap
);
m
ap
.
put
(
"assertResult"
,
assertResult
);
reportM
ap
.
put
(
"assertResult"
,
assertResult
);
m
ap
.
put
(
"response"
,
JSON
.
parseObject
(
response
,
Map
.
class
));
reportM
ap
.
put
(
"response"
,
JSON
.
parseObject
(
response
,
Map
.
class
));
m
ap
.
put
(
"elapsedTime"
,
elapsedTime
);
reportM
ap
.
put
(
"elapsedTime"
,
elapsedTime
);
// 插入测试报告
// 插入测试报告
SceneTestcaseReport
sceneTestcaseReport
=
new
SceneTestcaseReport
();
SceneTestcaseReport
sceneTestcaseReport
=
new
SceneTestcaseReport
();
...
@@ -173,7 +176,10 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
...
@@ -173,7 +176,10 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
sceneTestcaseReport
.
setNamespace
(
namespace
);
sceneTestcaseReport
.
setNamespace
(
namespace
);
log
.
info
(
"保存测试报告:{}"
,
sceneTestcaseReport
);
log
.
info
(
"保存测试报告:{}"
,
sceneTestcaseReport
);
sceneTestcaseReportService
.
save
(
sceneTestcaseReport
);
sceneTestcaseReportService
.
save
(
sceneTestcaseReport
);
return
JSON
.
toJSONString
(
map
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"report"
,
reportMap
);
resultMap
.
put
(
"extract"
,
extractMap
);
return
resultMap
;
}
}
}
}
Write
Preview
Markdown
is supported
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