Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
0ed00218
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,发现更多精彩内容 >>
提交
0ed00218
编写于
4月 17, 2020
作者:
S
shiziyuan9527
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改响应时间图表
上级
eb7c2ddb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
131 deletion
+60
-131
backend/src/main/java/io/metersphere/report/JtlResolver.java
backend/src/main/java/io/metersphere/report/JtlResolver.java
+34
-119
frontend/src/business/components/performance/report/components/TestOverview.vue
...components/performance/report/components/TestOverview.vue
+26
-12
未找到文件。
backend/src/main/java/io/metersphere/report/JtlResolver.java
浏览文件 @
0ed00218
...
...
@@ -11,10 +11,7 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.jmeter.report.core.Sample
;
import
org.apache.jmeter.report.core.SampleMetadata
;
import
org.apache.jmeter.report.dashboard.JsonizerVisitor
;
import
org.apache.jmeter.report.processor.ListResultData
;
import
org.apache.jmeter.report.processor.MapResultData
;
import
org.apache.jmeter.report.processor.ResultData
;
import
org.apache.jmeter.report.processor.SampleContext
;
import
org.apache.jmeter.report.processor.*
;
import
org.apache.jmeter.report.processor.graph.AbstractOverTimeGraphConsumer
;
import
org.apache.jmeter.report.processor.graph.impl.ActiveThreadsGraphConsumer
;
import
org.apache.jmeter.report.processor.graph.impl.HitsPerSecondGraphConsumer
;
...
...
@@ -346,61 +343,6 @@ public class JtlResolver {
return
testOverview
;
}
// public static List<ChartsData> getLoadChartData(String jtlString) {
// List<ChartsData> chartsDataList = new ArrayList<>();
// List<Metric> totalMetricList = JtlResolver.resolver(jtlString);
//
// if (totalMetricList != null) {
// for (Metric metric : totalMetricList) {
// metric.setTimestamp(stampToDate(DATE_TIME_PATTERN, metric.getTimestamp()));
// }
// }
// Map<String, List<Metric>> collect = Objects.requireNonNull(totalMetricList).stream().collect(Collectors.groupingBy(Metric::getTimestamp));
// List<Map.Entry<String, List<Metric>>> entries = new ArrayList<>(collect.entrySet());
//
// for (Map.Entry<String, List<Metric>> entry : entries) {
// int failSize = 0;
// List<Metric> metrics = entry.getValue();
// Map<String, List<Metric>> metricsMap = metrics.stream().collect(Collectors.groupingBy(Metric::getThreadName));
// int maxUsers = metricsMap.size();
// for (Metric metric : metrics) {
// String isSuccess = metric.getSuccess();
// if (!"true".equals(isSuccess)) {
// failSize++;
// }
// }
//
// String timeStamp = "";
// try {
// timeStamp = formatDate(entry.getKey());
// } catch (ParseException e) {
// e.printStackTrace();
// }
//
// ChartsData chartsData = new ChartsData();
// chartsData.setxAxis(timeStamp);
// chartsData.setGroupName("hits");
// chartsData.setyAxis(new BigDecimal(metrics.size() * 1.0 / maxUsers));
// chartsDataList.add(chartsData);
//
// chartsData = new ChartsData();
// chartsData.setxAxis(timeStamp);
// chartsData.setGroupName("users");
// chartsData.setyAxis(new BigDecimal(maxUsers));
// chartsDataList.add(chartsData);
//
// chartsData = new ChartsData();
// chartsData.setxAxis(timeStamp);
// chartsData.setGroupName("errors");
// chartsData.setyAxis(new BigDecimal(failSize));
// chartsDataList.add(chartsData);
//
// }
//
// return chartsDataList;
// }
public
static
List
<
ChartsData
>
getLoadChartData
(
String
jtlString
)
{
Map
<
String
,
Object
>
activeThreadMap
=
getResultDataMap
(
jtlString
,
new
ActiveThreadsGraphConsumer
());
Map
<
String
,
Object
>
hitsMap
=
getResultDataMap
(
jtlString
,
new
HitsPerSecondGraphConsumer
());
...
...
@@ -412,45 +354,6 @@ public class JtlResolver {
return
activeThreadList
;
}
// public static List<ChartsData> getResponseTimeChartData(String jtlString) {
// List<ChartsData> chartsDataList = new ArrayList<>();
// List<Metric> totalMetricList = JtlResolver.resolver(jtlString);
//
// totalMetricList.forEach(metric -> {
// metric.setTimestamp(stampToDate(DATE_TIME_PATTERN, metric.getTimestamp()));
// });
//
// Map<String, List<Metric>> metricMap = totalMetricList.stream().collect(Collectors.groupingBy(Metric::getTimestamp));
// List<Map.Entry<String, List<Metric>>> entries = new ArrayList<>(metricMap.entrySet());
//
// for (Map.Entry<String, List<Metric>> entry : entries) {
// List<Metric> metricList = entry.getValue();
// Map<String, List<Metric>> metricsMap = metricList.stream().collect(Collectors.groupingBy(Metric::getThreadName));
// int maxUsers = metricsMap.size();
// int sumElapsedTime = metricList.stream().mapToInt(metric -> Integer.parseInt(metric.getElapsed())).sum();
// String timeStamp = "";
// try {
// timeStamp = formatDate(entry.getKey());
// } catch (ParseException e) {
// e.printStackTrace();
// }
//
// ChartsData chartsData = new ChartsData();
// chartsData.setxAxis(timeStamp);
// chartsData.setGroupName("users");
// chartsData.setyAxis(new BigDecimal(maxUsers));
// chartsDataList.add(chartsData);
//
// ChartsData chartsData2 = new ChartsData();
// chartsData2.setxAxis(timeStamp);
// chartsData2.setGroupName("responseTime");
// chartsData2.setyAxis(new BigDecimal(sumElapsedTime * 1.0 / metricList.size()));
// chartsDataList.add(chartsData2);
//
// }
//
// return chartsDataList;
// }
public
static
List
<
ChartsData
>
getResponseTimeChartData
(
String
jtlString
)
{
Map
<
String
,
Object
>
activeThreadMap
=
getResultDataMap
(
jtlString
,
new
ActiveThreadsGraphConsumer
());
Map
<
String
,
Object
>
responseTimeMap
=
getResultDataMap
(
jtlString
,
new
ResponseTimeOverTimeGraphConsumer
());
...
...
@@ -464,40 +367,52 @@ public class JtlResolver {
}
public
static
void
mapResolver
(
Map
<
String
,
Object
>
map
,
List
list
,
String
seriesName
)
{
// ThreadGroup-1
for
(
String
key
:
map
.
keySet
())
{
MapResultData
mapResultData
=
(
MapResultData
)
map
.
get
(
key
);
ResultData
maxY
=
mapResultData
.
getResult
(
"maxY"
);
ListResultData
series
=
(
ListResultData
)
mapResultData
.
getResult
(
"series"
);
if
(
series
.
getSize
()
>
0
)
{
MapResultData
resultData
=
(
MapResultData
)
series
.
get
(
0
);
ListResultData
data
=
(
ListResultData
)
resultData
.
getResult
(
"data"
);
if
(
data
.
getSize
()
>
0
)
{
for
(
int
i
=
0
;
i
<
data
.
getSize
();
i
++)
{
ListResultData
listResultData
=
(
ListResultData
)
data
.
get
(
i
);
String
result
=
listResultData
.
accept
(
new
JsonizerVisitor
());
result
=
result
.
substring
(
1
,
result
.
length
()
-
1
);
String
[]
split
=
result
.
split
(
","
);
ChartsData
chartsData
=
new
ChartsData
();
BigDecimal
bigDecimal
=
new
BigDecimal
(
split
[
0
]);
String
timeStamp
=
bigDecimal
.
toPlainString
();
String
time
=
null
;
try
{
time
=
formatDate
(
stampToDate
(
DATE_TIME_PATTERN
,
timeStamp
));
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
for
(
int
j
=
0
;
j
<
series
.
getSize
();
j
++)
{
MapResultData
resultData
=
(
MapResultData
)
series
.
get
(
j
);
// data, isOverall, label, isController
ListResultData
data
=
(
ListResultData
)
resultData
.
getResult
(
"data"
);
ValueResultData
label
=
(
ValueResultData
)
resultData
.
getResult
(
"label"
);
if
(
data
.
getSize
()
>
0
)
{
for
(
int
i
=
0
;
i
<
data
.
getSize
();
i
++)
{
ListResultData
listResultData
=
(
ListResultData
)
data
.
get
(
i
);
String
result
=
listResultData
.
accept
(
new
JsonizerVisitor
());
result
=
result
.
substring
(
1
,
result
.
length
()
-
1
);
String
[]
split
=
result
.
split
(
","
);
ChartsData
chartsData
=
new
ChartsData
();
BigDecimal
bigDecimal
=
new
BigDecimal
(
split
[
0
]);
String
timeStamp
=
bigDecimal
.
toPlainString
();
String
time
=
null
;
try
{
time
=
formatDate
(
stampToDate
(
DATE_TIME_PATTERN
,
timeStamp
));
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
chartsData
.
setxAxis
(
time
);
chartsData
.
setyAxis
(
new
BigDecimal
(
split
[
1
].
trim
()));
if
(
series
.
getSize
()
==
1
)
{
chartsData
.
setGroupName
(
seriesName
);
}
else
{
chartsData
.
setGroupName
((
String
)
label
.
getValue
());
}
list
.
add
(
chartsData
);
}
chartsData
.
setxAxis
(
time
);
chartsData
.
setyAxis
(
new
BigDecimal
(
split
[
1
].
trim
()));
chartsData
.
setGroupName
(
seriesName
);
list
.
add
(
chartsData
);
}
}
}
}
}
public
static
Map
<
String
,
Object
>
getResultDataMap
(
String
jtlString
,
AbstractOverTimeGraphConsumer
timeGraphConsumer
)
{
int
row
=
0
;
AbstractOverTimeGraphConsumer
abstractOverTimeGraphConsumer
=
timeGraphConsumer
;
abstractOverTimeGraphConsumer
.
setGranularity
(
60000
);
// 这个路径不存在
...
...
@@ -513,7 +428,7 @@ public class JtlResolver {
while
(
tokenizer
.
hasMoreTokens
())
{
String
line
=
tokenizer
.
nextToken
();
String
[]
data
=
line
.
split
(
","
,
-
1
);
Sample
sample
=
new
Sample
(
0
,
sampleMetaData
,
data
);
Sample
sample
=
new
Sample
(
row
++
,
sampleMetaData
,
data
);
abstractOverTimeGraphConsumer
.
consume
(
sample
,
0
);
}
abstractOverTimeGraphConsumer
.
stopConsuming
();
...
...
frontend/src/business/components/performance/report/components/TestOverview.vue
浏览文件 @
0ed00218
...
...
@@ -157,7 +157,8 @@
this
.
$get
(
"
/performance/report/content/res_chart/
"
+
this
.
id
,
res
=>
{
let
data
=
res
.
data
;
let
userList
=
data
.
filter
(
m
=>
m
.
groupName
===
"
users
"
).
map
(
m
=>
m
.
yAxis
);
let
responseTimeList
=
data
.
filter
(
m
=>
m
.
groupName
===
"
responseTime
"
).
map
(
m
=>
m
.
yAxis
);
let
responseTimeList
=
data
.
filter
(
m
=>
m
.
groupName
!=
"
users
"
).
map
(
m
=>
m
.
yAxis
);
let
responseGroupNameList
=
data
.
filter
(
m
=>
m
.
groupName
!=
"
users
"
).
map
(
m
=>
m
.
groupName
);
let
userMax
=
this
.
_getChartMax
(
userList
);
let
resMax
=
this
.
_getChartMax
(
responseTimeList
);
let
resOption
=
{
...
...
@@ -171,7 +172,24 @@
},
tooltip
:
{
show
:
true
,
trigger
:
'
axis
'
trigger
:
'
axis
'
,
extraCssText
:
'
z-index: 999;
'
,
formatter
:
function
(
params
,
ticket
,
callback
)
{
let
result
=
""
;
let
name
=
params
[
0
].
name
;
result
+=
name
+
"
<br/>
"
;
for
(
let
i
=
0
;
i
<
params
.
length
;
i
++
)
{
let
seriesName
=
params
[
i
].
seriesName
;
if
(
seriesName
.
length
>
100
)
{
seriesName
=
seriesName
.
substring
(
0
,
100
);
}
let
value
=
params
[
i
].
value
;
let
marker
=
params
[
i
].
marker
;
result
+=
marker
+
seriesName
+
"
:
"
+
value
[
1
]
+
"
<br/>
"
;
}
return
result
;
}
},
legend
:
{},
xAxis
:
{},
...
...
@@ -197,14 +215,12 @@
{
name
:
'
users
'
,
color
:
'
#0CA74A
'
,
},
{
name
:
"
responseTime
"
,
yAxisIndex
:
'
1
'
,
color
:
'
#99743C
'
,
}
]
}
responseGroupNameList
.
forEach
(
item
=>
{
setting
[
"
series
"
].
splice
(
0
,
0
,
{
name
:
item
,
yAxisIndex
:
'
1
'
})
})
this
.
resOption
=
this
.
generateOption
(
resOption
,
data
,
setting
);
})
},
...
...
@@ -229,10 +245,11 @@
legend
.
push
(
name
)
series
[
name
]
=
[]
}
series
[
name
].
splice
(
xAxis
.
indexOf
(
item
.
xAxis
),
0
,
[
item
.
xAxis
,
Math
.
round
(
item
.
yAxis
.
toFixed
(
2
)
)]);
series
[
name
].
splice
(
xAxis
.
indexOf
(
item
.
xAxis
),
0
,
[
item
.
xAxis
,
item
.
yAxis
.
toFixed
(
2
)]);
})
this
.
$set
(
option
.
legend
,
"
data
"
,
legend
);
this
.
$set
(
option
.
legend
,
"
bottom
"
,
10
);
this
.
$set
(
option
.
legend
,
"
type
"
,
"
scroll
"
);
this
.
$set
(
option
.
legend
,
"
bottom
"
,
"
10px
"
);
this
.
$set
(
option
.
xAxis
,
"
data
"
,
xAxis
);
for
(
let
name
in
series
)
{
let
d
=
series
[
name
];
...
...
@@ -259,9 +276,6 @@
_getChartMax
(
arr
)
{
const
max
=
Math
.
max
(...
arr
);
return
Math
.
ceil
(
max
/
4.5
)
*
5
;
},
_arraySort
(
a
,
b
)
{
return
a
[
0
]
>
b
[
0
];
}
},
watch
:
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录