Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
017f8640
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,发现更多精彩内容 >>
提交
017f8640
编写于
3月 18, 2020
作者:
C
chenjianxing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
测试报告同步
上级
147fba84
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
458 addition
and
400 deletion
+458
-400
backend/pom.xml
backend/pom.xml
+6
-0
backend/src/main/java/io/metersphere/base/domain/FucTestLog.java
.../src/main/java/io/metersphere/base/domain/FucTestLog.java
+1
-1
backend/src/main/java/io/metersphere/base/domain/ZaleniumTest.java
...rc/main/java/io/metersphere/base/domain/ZaleniumTest.java
+190
-0
backend/src/main/java/io/metersphere/base/mapper/ext/ExtFunctionalTestReportMapper.xml
...rsphere/base/mapper/ext/ExtFunctionalTestReportMapper.xml
+4
-3
backend/src/main/java/io/metersphere/config/ProxyServletConfiguration.java
...java/io/metersphere/config/ProxyServletConfiguration.java
+3
-6
backend/src/main/java/io/metersphere/config/RestTemplateConfig.java
...c/main/java/io/metersphere/config/RestTemplateConfig.java
+16
-0
backend/src/main/java/io/metersphere/controller/FunctionalReportController.java
...io/metersphere/controller/FunctionalReportController.java
+6
-2
backend/src/main/java/io/metersphere/job/ZaleniumJob.java
backend/src/main/java/io/metersphere/job/ZaleniumJob.java
+21
-0
backend/src/main/java/io/metersphere/proxy/ProxyServlet.java
backend/src/main/java/io/metersphere/proxy/ProxyServlet.java
+90
-388
backend/src/main/java/io/metersphere/service/FunctionalReportService.java
.../java/io/metersphere/service/FunctionalReportService.java
+13
-0
backend/src/main/java/io/metersphere/service/ZaleniumService.java
...src/main/java/io/metersphere/service/ZaleniumService.java
+89
-0
backend/src/test/java/io/metersphere/ZaleniumTest.java
backend/src/test/java/io/metersphere/ZaleniumTest.java
+19
-0
未找到文件。
backend/pom.xml
浏览文件 @
017f8640
...
...
@@ -146,6 +146,12 @@
<version>
2.9
</version>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<version>
4.5.3
</version>
</dependency>
</dependencies>
<build>
...
...
backend/src/main/java/io/metersphere/base/domain/FucTestLog.java
浏览文件 @
017f8640
package
io.metersphere.base.domain
;
public
class
FucLog
{
public
class
Fuc
Test
Log
{
private
String
seleniumLog
;
private
String
browserDriverLog
;
...
...
backend/src/main/java/io/metersphere/base/domain/ZaleniumTest.java
浏览文件 @
017f8640
package
io.metersphere.base.domain
;
public
class
ZaleniumTest
{
private
String
seleniumSessionId
;
private
String
testName
;
private
String
timestamp
;
private
String
addedToDashboardTime
;
private
String
browser
;
private
String
browserVersion
;
private
String
proxyName
;
private
String
platform
;
private
String
fileName
;
private
String
fileExtension
;
private
String
videoFolderPath
;
private
String
logsFolderPath
;
private
String
testNameNoExtension
;
private
String
screenDimension
;
private
String
timeZone
;
private
String
build
;
private
String
testFileNameTemplate
;
private
String
browserDriverLogFileName
;
private
String
retentionDate
;
private
String
testStatus
;
private
boolean
videoRecorded
;
public
String
getSeleniumSessionId
()
{
return
seleniumSessionId
;
}
public
void
setSeleniumSessionId
(
String
seleniumSessionId
)
{
this
.
seleniumSessionId
=
seleniumSessionId
;
}
public
String
getTestName
()
{
return
testName
;
}
public
void
setTestName
(
String
testName
)
{
this
.
testName
=
testName
;
}
public
String
getTimestamp
()
{
return
timestamp
;
}
public
void
setTimestamp
(
String
timestamp
)
{
this
.
timestamp
=
timestamp
;
}
public
String
getAddedToDashboardTime
()
{
return
addedToDashboardTime
;
}
public
void
setAddedToDashboardTime
(
String
addedToDashboardTime
)
{
this
.
addedToDashboardTime
=
addedToDashboardTime
;
}
public
String
getBrowser
()
{
return
browser
;
}
public
void
setBrowser
(
String
browser
)
{
this
.
browser
=
browser
;
}
public
String
getBrowserVersion
()
{
return
browserVersion
;
}
public
void
setBrowserVersion
(
String
browserVersion
)
{
this
.
browserVersion
=
browserVersion
;
}
public
String
getProxyName
()
{
return
proxyName
;
}
public
void
setProxyName
(
String
proxyName
)
{
this
.
proxyName
=
proxyName
;
}
public
String
getPlatform
()
{
return
platform
;
}
public
void
setPlatform
(
String
platform
)
{
this
.
platform
=
platform
;
}
public
String
getFileName
()
{
return
fileName
;
}
public
void
setFileName
(
String
fileName
)
{
this
.
fileName
=
fileName
;
}
public
String
getFileExtension
()
{
return
fileExtension
;
}
public
void
setFileExtension
(
String
fileExtension
)
{
this
.
fileExtension
=
fileExtension
;
}
public
String
getVideoFolderPath
()
{
return
videoFolderPath
;
}
public
void
setVideoFolderPath
(
String
videoFolderPath
)
{
this
.
videoFolderPath
=
videoFolderPath
;
}
public
String
getLogsFolderPath
()
{
return
logsFolderPath
;
}
public
void
setLogsFolderPath
(
String
logsFolderPath
)
{
this
.
logsFolderPath
=
logsFolderPath
;
}
public
String
getTestNameNoExtension
()
{
return
testNameNoExtension
;
}
public
void
setTestNameNoExtension
(
String
testNameNoExtension
)
{
this
.
testNameNoExtension
=
testNameNoExtension
;
}
public
String
getScreenDimension
()
{
return
screenDimension
;
}
public
void
setScreenDimension
(
String
screenDimension
)
{
this
.
screenDimension
=
screenDimension
;
}
public
String
getTimeZone
()
{
return
timeZone
;
}
public
void
setTimeZone
(
String
timeZone
)
{
this
.
timeZone
=
timeZone
;
}
public
String
getBuild
()
{
return
build
;
}
public
void
setBuild
(
String
build
)
{
this
.
build
=
build
;
}
public
String
getTestFileNameTemplate
()
{
return
testFileNameTemplate
;
}
public
void
setTestFileNameTemplate
(
String
testFileNameTemplate
)
{
this
.
testFileNameTemplate
=
testFileNameTemplate
;
}
public
String
getBrowserDriverLogFileName
()
{
return
browserDriverLogFileName
;
}
public
void
setBrowserDriverLogFileName
(
String
browserDriverLogFileName
)
{
this
.
browserDriverLogFileName
=
browserDriverLogFileName
;
}
public
String
getRetentionDate
()
{
return
retentionDate
;
}
public
void
setRetentionDate
(
String
retentionDate
)
{
this
.
retentionDate
=
retentionDate
;
}
public
String
getTestStatus
()
{
return
testStatus
;
}
public
void
setTestStatus
(
String
testStatus
)
{
this
.
testStatus
=
testStatus
;
}
public
boolean
isVideoRecorded
()
{
return
videoRecorded
;
}
public
void
setVideoRecorded
(
boolean
videoRecorded
)
{
this
.
videoRecorded
=
videoRecorded
;
}
}
backend/src/main/java/io/metersphere/base/mapper/ext/ExtFunctionalTestReportMapper.xml
浏览文件 @
017f8640
...
...
@@ -5,7 +5,7 @@
<select
id=
"getReportList"
resultType=
"io.metersphere.dto.FunctionalReportDTO"
>
select ltr.id, ltr.name, ltr.test_id as testId, ltr.description,
ltr.create_time as createTime, ltr.update_time as updateTime, ltr.status as status, lt.name as testName
from fuc_test_report ltr join fuc_test lt on ltr.test_id = lt.id
from fuc_test_report ltr
left
join fuc_test lt on ltr.test_id = lt.id
<where>
<if
test=
"reportRequest.name != null"
>
AND ltr.name like CONCAT('%', #{reportRequest.name},'%')
...
...
@@ -15,9 +15,10 @@
<select
id=
"getReportTestAndProInfo"
resultType=
"io.metersphere.dto.FunctionalReportDTO"
>
select ltr.id, ltr.name, ltr.test_id as testId, ltr.description,
ltr.create_time as createTime, ltr.update_time as updateTime, ltr.status as status, lt.name as testName,
ltr.create_time as createTime, ltr.update_time as updateTime, ltr.status as status, ltr.content as content,
lt.name as testName,
p.id as projectId, p.name as projectName
from fuc_test_report ltr
join fuc_test lt on ltr.test_id = lt.id
join project p on lt.project_id = p.id
from fuc_test_report ltr
left join fuc_test lt on ltr.test_id = lt.id left
join project p on lt.project_id = p.id
where ltr.id = #{id}
</select>
...
...
backend/src/main/java/io/metersphere/config/ProxyServletConfiguration.java
浏览文件 @
017f8640
...
...
@@ -2,19 +2,16 @@ package io.metersphere.config;
import
io.metersphere.proxy.ProxyServlet
;
import
org.springframework.boot.web.servlet.ServletRegistrationBean
;
import
org.springframework.context.EnvironmentAware
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.env.Environment
;
@Configuration
public
class
Solr
ProxyServletConfiguration
{
public
class
ProxyServletConfiguration
{
@Bean
public
ServletRegistrationBean
servletRegistrationBean
(){
ServletRegistrationBean
servletRegistrationBean
=
new
ServletRegistrationBean
(
new
ProxyServlet
(),
"/solr/*"
);
// servletRegistrationBean.addInitParameter("targetUri", "http://localhost:4444");
// servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
//代理到hub节点获取录像
ServletRegistrationBean
servletRegistrationBean
=
new
ServletRegistrationBean
(
new
ProxyServlet
(),
"/proxy/*"
);
return
servletRegistrationBean
;
}
...
...
backend/src/main/java/io/metersphere/config/RestTemplateConfig.java
浏览文件 @
017f8640
package
io.metersphere.config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.client.HttpComponentsClientHttpRequestFactory
;
import
org.springframework.web.client.RestTemplate
;
@Configuration
public
class
RestTemplateConfig
{
@Bean
public
RestTemplate
getRestTemplate
()
{
HttpComponentsClientHttpRequestFactory
httpRequestFactory
=
new
HttpComponentsClientHttpRequestFactory
();
httpRequestFactory
.
setConnectionRequestTimeout
(
3000
);
httpRequestFactory
.
setConnectTimeout
(
3000
);
httpRequestFactory
.
setReadTimeout
(
3000
);
return
new
RestTemplate
(
httpRequestFactory
);
}
}
backend/src/main/java/io/metersphere/controller/FunctionalReportController.java
浏览文件 @
017f8640
...
...
@@ -2,6 +2,7 @@ package io.metersphere.controller;
import
com.github.pagehelper.Page
;
import
com.github.pagehelper.PageHelper
;
import
io.metersphere.base.domain.FucTestLog
;
import
io.metersphere.base.domain.FucTestReport
;
import
io.metersphere.commons.constants.RoleConstants
;
import
io.metersphere.commons.utils.PageUtils
;
...
...
@@ -30,7 +31,6 @@ public class FunctionalReportController {
String
currentWorkspaceId
=
SessionUtils
.
getCurrentWorkspaceId
();
ReportRequest
request
=
new
ReportRequest
();
request
.
setWorkspaceId
(
currentWorkspaceId
);
// 最近 `count` 个项目
PageHelper
.
startPage
(
1
,
count
);
return
functionalReportService
.
getRecentReportList
(
request
);
}
...
...
@@ -46,11 +46,15 @@ public class FunctionalReportController {
functionalReportService
.
deleteReport
(
reportId
);
}
@GetMapping
(
"/test/pro/info/{reportId}"
)
public
FunctionalReportDTO
getReportTestAndProInfo
(
@PathVariable
String
reportId
)
{
return
functionalReportService
.
getReportTestAndProInfo
(
reportId
);
}
@GetMapping
(
"/test/log/{reportId}"
)
public
FucTestLog
getTestLog
(
@PathVariable
String
reportId
)
{
return
functionalReportService
.
getTestLog
(
reportId
);
}
}
backend/src/main/java/io/metersphere/job/ZaleniumJob.java
浏览文件 @
017f8640
package
io.metersphere.job
;
import
io.metersphere.commons.utils.LogUtil
;
import
io.metersphere.service.ZaleniumService
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
javax.annotation.Resource
;
@Configuration
@EnableScheduling
public
class
ZaleniumJob
{
@Resource
ZaleniumService
zaleniumService
;
@Scheduled
(
cron
=
"0 0/1 * * * ?"
)
public
void
syncFucTestReport
(){
LogUtil
.
info
(
"============= start sync FucTestReport ============="
);
zaleniumService
.
syncTestResult
();
LogUtil
.
info
(
"============= end sync FucTestReport ============="
);
}
}
backend/src/main/java/io/metersphere/proxy/ProxyServlet.java
浏览文件 @
017f8640
此差异已折叠。
点击以展开。
backend/src/main/java/io/metersphere/service/FunctionalReportService.java
浏览文件 @
017f8640
package
io.metersphere.service
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
io.metersphere.base.domain.FucTestLog
;
import
io.metersphere.base.domain.FucTestReport
;
import
io.metersphere.base.domain.FucTestReportExample
;
import
io.metersphere.base.mapper.FucTestReportMapper
;
...
...
@@ -20,6 +23,8 @@ public class FunctionalReportService {
private
FucTestReportMapper
fucTestReportMapper
;
@Resource
private
ExtFunctionalTestReportMapper
extFunctionalTestReportMapper
;
@Resource
private
ZaleniumService
zaleniumService
;
public
List
<
FucTestReport
>
getRecentReportList
(
ReportRequest
request
)
{
FucTestReportExample
example
=
new
FucTestReportExample
();
...
...
@@ -38,4 +43,12 @@ public class FunctionalReportService {
public
FunctionalReportDTO
getReportTestAndProInfo
(
String
reportId
)
{
return
extFunctionalTestReportMapper
.
getReportTestAndProInfo
(
reportId
);
}
public
FucTestLog
getTestLog
(
String
reportId
)
{
FucTestReport
fucTestReport
=
fucTestReportMapper
.
selectByPrimaryKey
(
reportId
);
String
content
=
fucTestReport
.
getContent
();
String
endpoint
=
"http://localhost:4444"
;
FucTestLog
fucTestLogs
=
JSON
.
parseObject
(
content
,
FucTestLog
.
class
);
return
zaleniumService
.
getFucTestLog
(
endpoint
,
fucTestLogs
);
}
}
backend/src/main/java/io/metersphere/service/ZaleniumService.java
浏览文件 @
017f8640
package
io.metersphere.service
;
import
com.alibaba.fastjson.JSONObject
;
import
io.metersphere.base.domain.*
;
import
io.metersphere.base.mapper.FucTestMapper
;
import
io.metersphere.base.mapper.FucTestReportMapper
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
@Service
public
class
ZaleniumService
{
@Resource
RestTemplate
restTemplate
;
@Resource
FucTestReportMapper
fucTestReportMapper
;
@Resource
FucTestMapper
fucTestMapper
;
public
void
syncTestResult
(){
List
<
ZaleniumTest
>
zaleniumTests
=
getZaleniumTest
();
List
<
String
>
fucTestIds
=
zaleniumTests
.
stream
().
map
(
test
->
test
.
getTestName
())
.
collect
(
Collectors
.
toList
());
FucTestExample
fucTestExample
=
new
FucTestExample
();
fucTestExample
.
createCriteria
().
andIdIn
(
fucTestIds
);
List
<
FucTest
>
fucTests
=
fucTestMapper
.
selectByExample
(
fucTestExample
);
List
<
String
>
reportIds
=
fucTestReportMapper
.
selectByExample
(
new
FucTestReportExample
()).
stream
().
map
(
report
->
report
.
getId
()).
collect
(
Collectors
.
toList
());
Map
<
String
,
FucTest
>
fucTestMaps
=
fucTests
.
stream
()
.
collect
(
Collectors
.
toMap
(
FucTest:
:
getId
,
Function
.
identity
()));
zaleniumTests
.
forEach
(
item
->
{
if
(!
reportIds
.
contains
(
item
.
getTestName
())){
saveFucTestReport
(
item
,
fucTestMaps
.
get
(
item
.
getTestName
()));
}
});
}
private
void
saveFucTestReport
(
ZaleniumTest
item
,
FucTest
fucTest
)
{
FucTestReport
fucTestReport
=
new
FucTestReport
();
fucTestReport
.
setCreateTime
(
System
.
currentTimeMillis
());
fucTestReport
.
setUpdateTime
(
System
.
currentTimeMillis
());
fucTestReport
.
setTestId
(
item
.
getTestName
());
fucTestReport
.
setStatus
(
"1"
);
fucTestReport
.
setId
(
item
.
getTestName
());
JSONObject
content
=
new
JSONObject
();
content
.
put
(
"videoUrl"
,
"dashboard/"
+
item
.
getFileName
());
content
.
put
(
"seleniumLog"
,
"dashboard/logs/"
+
item
.
getTestNameNoExtension
()
+
"/selenium-multinode-stderr.log"
);
content
.
put
(
"browserDriverLog"
,
"dashboard/"
+
item
.
getBrowserDriverLogFileName
());
fucTestReport
.
setContent
(
content
.
toJSONString
());
if
(
fucTest
!=
null
){
fucTestReport
.
setDescription
(
fucTest
.
getDescription
());
fucTestReport
.
setName
(
fucTest
.
getName
());
}
else
{
fucTestReport
.
setDescription
(
"ZaleniumTest"
);
fucTestReport
.
setName
(
item
.
getTestName
());
}
fucTestReportMapper
.
insert
(
fucTestReport
);
}
private
List
<
ZaleniumTest
>
getZaleniumTest
()
{
List
<
ZaleniumTest
>
tests
=
new
ArrayList
<>();
String
url
=
"http://localhost:4444/dashboard/information?lastDateAddedToDashboard=0"
;
tests
.
addAll
(
Arrays
.
asList
(
restTemplate
.
getForObject
(
url
,
ZaleniumTest
[].
class
)));
return
tests
;
}
public
FucTestLog
getFucTestLog
(
String
endpoint
,
FucTestLog
logPaths
)
{
FucTestLog
testLog
=
new
FucTestLog
();
testLog
.
setSeleniumLog
(
getZaleniumTestLog
(
endpoint
,
logPaths
.
getSeleniumLog
()));
testLog
.
setBrowserDriverLog
(
getZaleniumTestLog
(
endpoint
,
logPaths
.
getBrowserDriverLog
()));
return
testLog
;
}
private
String
getZaleniumTestLog
(
String
endpoint
,
String
logPath
)
{
return
restTemplate
.
getForObject
(
endpoint
+
"/"
+
logPath
,
String
.
class
);
}
}
backend/src/test/java/io/metersphere/ZaleniumTest.java
浏览文件 @
017f8640
package
io.metersphere
;
import
io.metersphere.service.ZaleniumService
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
javax.annotation.Resource
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
public
class
ZaleniumTest
{
@Resource
ZaleniumService
zaleniumService
;
@Test
public
void
sysnZaleniumTest
(){
zaleniumService
.
syncTestResult
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录