代码到20250102

hz_1122
darkmanlee 2025-01-06 19:49:38 +08:00
parent c9fac180e6
commit 795a83a563
28 changed files with 240 additions and 108 deletions

View File

@ -919,7 +919,7 @@ public class DefaultExecThread implements AtuExecThread{
}
}
try {
if (task.getRetryStrategy() != null && AtuExecConstant.TASK_RETRY_STRATEGY_PACKAGE.equals(task.getRetryStrategy())) {
if (task.getRetryStrategy() != null && AtuExecConstant.TASK_RETRY_STRATEGY_PACKAGE.equals(task.getRetryStrategy())) { //
count = task.getCurrentRetryNum();
}
if(null==executeResult){

View File

@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"]
#CMD [""]

View File

@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"]
#CMD [""]

View File

@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"]
#CMD [""]

View File

@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} ${JACOCO_AGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} ${JACOCO_AGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"]
#CMD [""]

View File

@ -32,10 +32,6 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>

View File

@ -10,7 +10,7 @@ APP_VERSION=3.0-SNAPSHOT
JAR_FILE=${APP_NAME}-${APP_VERSION}.ms.jar
APP_PORT=8300
JAVA_OPTIONS="-Xmx256M -Dfile.encoding=UTF-8 -Dloader.path=.,lib"
JAVA_OPTIONS="-Xmx256M -Dfile.encoding=UTF-8 "
PORT_OPTIONS="--server.port=${APP_PORT}"
if [ 0"$NK_HOME" = "0" ]; then

View File

@ -1,6 +1,8 @@
package net.northking.cctp.executePlan.api;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.HashBiMap;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -9,12 +11,22 @@ import net.northking.cctp.executePlan.api.service.AtuPlanBatchApiService;
import net.northking.cctp.executePlan.api.service.AtuPlanInfoApiService;
import net.northking.cctp.executePlan.api.service.AtuPlanTaskApiService;
import net.northking.cctp.executePlan.dto.planBatch.AtuExceptionCase;
import org.redisson.client.RedisConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -46,6 +58,9 @@ public class AtuPlanInfoPubCtrl {
@Autowired
private AtuPlanBatchApiService planBatchApiService;
@Autowired
private RedisTemplate redisTemplate;
/**
*
* @param params {taskId:"", "filePath": ""}
@ -105,4 +120,26 @@ public class AtuPlanInfoPubCtrl {
return responseVO;
}
/**
* redisKey
*
* @return
*/
@ApiOperation(value = "获取redis指定Key的数据")
@GetMapping(value = "/getRedisKey/{key}")
public ResultWrapper<Object> getRedisKey(@PathVariable("key") String key)
{
ResultWrapper<Object> wrapper = new ResultWrapper<>();
Object info = redisTemplate.execute((RedisCallback<Map<String,Object>>) connection->{
byte[] bytes = connection.get(key.getBytes(StandardCharsets.UTF_8));
if (bytes==null) {
return Collections.emptyMap();
}
return JSON.parseObject(bytes, HashMap.class);
});
wrapper.success(info);
return wrapper;
}
}

View File

@ -1,13 +1,13 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.executePlan.api.execplanTag;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.constants.BaseDefineDependencyConstants;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.TagDto;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.executePlan.api.execplanTag.service.AtuExecplanTagApiService;
@ -15,44 +15,50 @@ import net.northking.cctp.executePlan.constants.MsgConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.hzbank.testteam.autotest.dependencies.authDependency.constants.AuthDependencyConstants.REQUEST_HEADER_PROJECT_ID;
@Api(tags = "执行计划标签表")
@RequestMapping("/v1")
@RestController
public class AtuExecplanTagQueryCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(AtuExecplanTagQueryCtrl.class);
public class AtuExecplanTagQueryCtrl {
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(AtuExecplanTagQueryCtrl.class);
@Autowired
private AtuExecplanTagApiService apiService;
@Autowired
private AtuExecplanTagApiService apiService;
@RequiredPermissions("ui-queryPlanTag")
@ApiOperation(value = "获取执行计划引用的标签列表")
@GetMapping("/queryExecplanTag/{execplanId}")
public ResponseVO<List<TagDto>> queryExecplanTag(@PathVariable("execplanId") String execplanId)
{
logger.debug("start queryExecplanTag, execplanId:{}", execplanId);
ResponseVO<List<TagDto>> responseVO = new ResponseVO<>();
List<TagDto> tagDtos = apiService.queryExecplanTag(execplanId);
logger.debug("end queryExecplanTag");
responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS);
responseVO.setData(tagDtos);
responseVO.setMessage(MsgConstant.RESPONSE_VO_GET_EXE_PLAN_LAB_SUCCESSFULLY);
return responseVO;
}
@RequiredPermissions("ui-queryPlanTag")
@ApiOperation(value = "获取执行计划引用的标签列表")
@GetMapping("/queryExecplanTag/{execplanId}")
public ResponseVO<List<TagDto>> queryExecplanTag(@PathVariable("execplanId") String execplanId) {
logger.debug("start queryExecplanTag, execplanId:{}", execplanId);
ResponseVO<List<TagDto>> responseVO = new ResponseVO<>();
List<TagDto> tagDtos = apiService.queryExecplanTag(execplanId);
logger.debug("end queryExecplanTag");
responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS);
responseVO.setData(tagDtos);
responseVO.setMessage(MsgConstant.RESPONSE_VO_GET_EXE_PLAN_LAB_SUCCESSFULLY);
return responseVO;
}
@ApiOperation(value = "获取UI计划类型标签列表")
@GetMapping("/queryUIPlanTagOptions")
public ResponseVO<List<String>> queryUIPlanTagOptions(@RequestHeader(value = REQUEST_HEADER_PROJECT_ID) Long projectId) {
logger.debug("start queryUIScriptTagOptions, projectId:{}", projectId);
ResponseVO<List<String>> responseVO = new ResponseVO<>();
List<String> res = apiService.queryUIPlanTagOptions(projectId);
logger.debug("end queryScriptTag");
responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS);
responseVO.setData(res);
return responseVO;
}
}

View File

@ -38,4 +38,5 @@ public interface AtuExecplanTagApiService
*/
Integer deleteByExecplanIdAndTagId(String execplanId,Long tagId);
List<String> queryUIPlanTagOptions(Long projectId);
}

View File

@ -11,6 +11,7 @@ import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.form.TagFo
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.executePlan.constants.MsgConstant;
import net.northking.cctp.executePlan.constants.PlanConstant;
import net.northking.cctp.executePlan.db.dao.AtuPlanInfoDao;
import net.northking.cctp.executePlan.db.entity.AtuPlanInfo;
import net.northking.cctp.executePlan.dto.execplanTag.AtuExecplanTagAddDto;
@ -24,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
@ -122,4 +124,13 @@ public class AtuExecplanTagApiServiceImpl implements AtuExecplanTagApiService
return 1;
}
@Override
public List<String> queryUIPlanTagOptions(Long projectId) {
List<String> tagsByTypeAndProjectId = apiTagService.getTagsByTypeAndProjectId(PlanConstant.UI_PLAN_TAG_TYPE, projectId);
if (CollectionUtils.isEmpty(tagsByTypeAndProjectId)){
return new ArrayList<>();
}
return tagsByTypeAndProjectId;
}
}

View File

@ -26,9 +26,11 @@ import com.github.pagehelper.page.PageMethod;
import com.google.common.collect.Sets;
import com.hzbank.testteam.autotest.dependencies.authDependency.utils.RequestUtil;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.constants.BaseDefineDependencyConstants;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.RequestDTO;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.TagDto;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.entity.Environment;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.exception.InvalidException;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.form.TagForm;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import com.hzbank.testteam.autotest.dependencies.monsterDependency.dto.TestGroupDTO;
import com.hzbank.testteam.autotest.dependencies.monsterDependency.dto.TestGroupUserDTO;
@ -221,6 +223,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
MonsterCommonFeignClient monsterCommonFeignClient;
@Autowired
private AttachmentFeignClient attachmentFeignClient;
@Autowired
private ApiMixHandlerService apiMixHandlerService;
/**
*
*/
@ -325,6 +329,15 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
PageMethod.orderBy(sort.toString());
}
Pagination<AtuPlanInfoDetailDto> query = this.atuPlanInfoService.queryPlanInfoPage(queryByPage);
Map<String, List<TagDto>> tagMap = new HashMap<>();
if (!CollectionUtils.isEmpty(query.getRecords())) {
List<String> planIds = query.getRecords().stream().map(AtuPlanInfoDetailDto::getId).collect(Collectors.toList());
ArrayList<RequestDTO> requestList = new ArrayList<>();
requestList.add(new RequestDTO(RequestDTO.RequestContent.tagByObjectIds, planIds));
List<Object> mixData = apiMixHandlerService.getMixData(requestList);
List<TagDto> tagDtos = JSON.parseArray(JSON.toJSONString(mixData.get(0)), TagDto.class);
tagMap = tagDtos.stream().collect(Collectors.groupingBy(TagDto::getObjectId));
}
for (AtuPlanInfoDetailDto record : query.getRecords()) {
String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM, record.getProjectId());
String principalName = entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, record.getPrincipalId());
@ -346,6 +359,9 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
record.setNextExecTime(null);
}
}
if (!CollectionUtils.isEmpty(tagMap.get(record.getId()))) {
record.setTags(tagMap.get(record.getId()).stream().map(TagDto::getName).collect(Collectors.toList()));
}
}
return query;
}
@ -547,6 +563,13 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
dto.setAppIdList(appIdList);
}
}
List<TagDto> tagDtos = apiTagService.listTagByObjectId(uuid);
if (!CollectionUtils.isEmpty(tagDtos)) {
dto.setTags(tagDtos.stream().map(TagDto::getName).collect(Collectors.toList()));
}
if (dto.getPrincipalId() != null) {
dto.setPrincipalName(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER.name(), dto.getPrincipalId()));
}
return dto;
}
@ -664,6 +687,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
attachmentFeignClient.associatedFiles(associatedFilesDto);
}
atuPlanBatchService.deleteByExample(planBatch);
logger.debug("删除标签");
apiTagService.removeByObjectId(uuid);
});
}
return row;
@ -1057,6 +1082,10 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
@Override
public String savePlanData(AtuPlanInfoAddDto dto) {
logger.info("-------------------->开始保存计划信息");
//校验责任人
if (dto.getPrincipalId() == null || dto.getPrincipalId() == "") {
throw new PlatformRuntimeException(ExecPlanError.PRINCIPALID_IS_NULL);
}
//校验关联设备、应用是否为空
checkDeviceAndApp(dto);
logger.info("-------------------->校验关联设备、应用是否为空");
@ -1149,7 +1178,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
//判断是否存在
AtuPlanInfo planInfo = this.atuPlanInfoService.findByPrimaryKey(uuid);
if (planInfo != null) {
entity.setPrincipalId(planInfo.getPrincipalId());
entity.setPrincipalId(dto.getPrincipalId());
if (!entity.getHasCorn()) {
Scheduler scheduler = factoryBean.getScheduler();
if (ScheduleUtils.checkExists(scheduler, entity.getId())) {
@ -1241,7 +1270,15 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
savePlanScriptData(uuid, mdList);
logger.info("-------------------->保存用例集");
// 保存环境
saveEnv(uuid, dto.getEnvList());
saveEnv(uuid, dto.getProjectId(), dto.getEnvList());
logger.info("-------------------->保存环境");
// 保存标签
TagForm form = new TagForm();
form.setTags(dto.getTags());
form.setProjectId(RequestUtil.getProjectId());
form.setObjectId(uuid);
form.setType(PlanConstant.UI_PLAN_TAG_TYPE);
apiTagService.saveTags(form);
logger.info("-------------------->保存环境");
return uuid;
}
@ -1264,12 +1301,16 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
}
private void saveEnv(String planId, List<String> envList) {
private void saveEnv(String planId, String projectId, List<String> envList) {
if (envList == null || envList.isEmpty()) {
return;
}
Long projectId = RequestUtil.getProjectId();
ResponseVO<List<Environment>> responseVO = apiAtsEnviromentFeign.listByProject(projectId);
Long envProjectId = null;
if (StringUtils.isNotBlank(projectId)) {
envProjectId = Long.parseLong(projectId);
}
ResponseVO<List<Environment>> responseVO = apiAtsEnviromentFeign.listByProject(envProjectId);
List<Environment> data = responseVO.getData();
List<String> envIds = data.stream().map(e -> e.getId().toString()).collect(Collectors.toList());
for (String id : envList) {
@ -1691,8 +1732,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("scriptCode", "脚本编号");
writer.addHeaderAlias("scriptName", "脚本名称");
writer.addHeaderAlias("caseName", "用例名称");
writer.addHeaderAlias("caseType", "用例类型");
writer.addHeaderAlias("caseName", "轮次名称");
writer.addHeaderAlias("caseType", "轮次类型");
writer.addHeaderAlias("elapsedTime", "耗时(毫秒)");
writer.addHeaderAlias("deviceName", "执行设备");
writer.addHeaderAlias("status", "执行状态");
@ -1933,7 +1974,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
return new ArrayList<>();
}
List<String> tagNames = new ArrayList<>(data.values());
List<TagDto> tagDtos = apiTagService.getTagDtosByNameAndType(tagNames, 4);
List<TagDto> tagDtos = apiTagService.getTagDtosByNameAndType(tagNames, PlanConstant.UI_PLAN_TAG_TYPE);
if (tagDtos == null) {
logger.error("根据标签和类型获取关联计划Id异常,响应信息:" + JSON.toJSONString(responseVO));
throw new InvalidException("根据标签和类型获取关联计划Id异常");
@ -1958,7 +1999,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService<AtuPlanInfo>
PlanPageQueryDto queryDto = new PlanPageQueryDto();
Set<String> collect = atuPlanScriptLinkList.stream().map(AtuPlanScriptLink::getScriptId).collect(Collectors.toSet());
queryDto.setAllList(new ArrayList<>(collect));
//查询所有脚本类型
List<AtuCaseScriptResultDto> atuScriptInfoList = scriptCaseFeignClient.queryScriptByIds(new ArrayList<>(collect));

View File

@ -133,7 +133,6 @@ public class AtuPlanSceneCaseTaskApiServiceImpl implements AtuPlanSceneCaseTaskA
logger.debug("批次[" + planTask.getBatchId() + "]开始执行,更新计划的状态");
planInfoService.updatePlanByLastBatchId(planTask.getBatchId(), PlanConstant.PLAN_EXECUTING_STATUS);
}
// 更新批次统计数据
planBatchApiService.updateCacheBatchSumData(planTask);
}
@ -329,6 +328,7 @@ public class AtuPlanSceneCaseTaskApiServiceImpl implements AtuPlanSceneCaseTaskA
atuTaskExecDto.setAppSet(planInfo.getAppSet());
atuTaskExecDto.setScreenRecordSet(planInfo.getScreenRecordSet());
atuTaskExecDto.setScreenshotSet(planInfo.getScreenshotSet());
// TODO: 是不是要先做判断是否勾选了失败重试才去设置这两个值
atuTaskExecDto.setFailRetryNum(planInfo.getFailRetryCount());
// 重试策略
atuTaskExecDto.setRetryStrategy(planInfo.getRetryStrategy());

View File

@ -1514,7 +1514,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
logger.info("普通脚本任务id{},执行结果文件:{}", task.getId(), task.getExecResultFile());
taskIds.add(task.getId());
String execResultFile = task.getExecResultFile();
if (StringUtils.isNotBlank(execResultFile)){
if (StringUtils.isNotBlank(execResultFile)) {
deletedFilePath.add(execResultFile);
getActualImagePath(deletedFilePath, execResultFile);
}
@ -1534,7 +1534,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
if (!CollectionUtils.isEmpty(taskIds)) {
List<AtuPlanSceneCaseTask> atuPlanSceneCaseTaskList = atuPlanSceneCaseTaskService.querySceneCaseTasksByTaskIds(taskIds);
atuPlanSceneCaseTaskList.forEach(atuPlanSceneCaseTask -> {
logger.info("场景任务id{}节点任务id{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(),atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile());
logger.info("场景任务id{}节点任务id{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(), atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile());
String videoUrl = atuPlanSceneCaseTask.getVideoUrl();
if (StringUtils.isNotBlank(videoUrl)) {
deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]);
@ -1613,8 +1613,8 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
planTask.setVersionName(atuScriptDetailDto.getVersionName());
planTask.setScriptName(atuScriptDetailDto.getScriptName());
planTask.setScriptJson(atuScriptDetailDto.getScriptPath());
planTask.setAppId(queryAppId(planInfo.getId(),atuScriptDetailDto.getPlatformType(),
atuScriptDetailDto.getAppPackage(),atuScriptDetailDto.getScriptType()));
planTask.setAppId(queryAppId(planInfo.getId(), atuScriptDetailDto.getPlatformType(),
atuScriptDetailDto.getAppPackage(), atuScriptDetailDto.getScriptType()));
}
logger.debug("生成任务执行信息");
@ -1729,7 +1729,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
planTask.setBugId("");
if (sceneNodeExecDto != null && sceneNodeExecDto.getSceneScriptUrl() != null) {
planTask.setScriptJson(sceneNodeExecDto.getSceneScriptUrl());
}else {
} else {
logger.info("首节点返回sceneScriptUrl为空" + sceneNodeExecDto);
}
int rows = atuPlanTaskService.updateByPrimaryKey(planTask);

View File

@ -75,8 +75,8 @@ public class MsgConstant {
//tableHeardList
public static final String TABLE_HEARD_LIST_SCRIPT_NUM= "脚本编号";
public static final String TABLE_HEARD_LIST_SCRIPT_NAME= "脚本名称";
public static final String TABLE_HEARD_LIST_TEST_CASE_NAME= "用例名称";
public static final String TABLE_HEARD_LIST_TEST_CASE_TYPE= "用例类型";
public static final String TABLE_HEARD_LIST_TEST_CASE_NAME= "轮次名称";
public static final String TABLE_HEARD_LIST_TEST_CASE_TYPE= "轮次类型";
public static final String TABLE_HEARD_LIST_TIME_CONSUMING= "耗时(毫秒)";
public static final String TABLE_HEARD_LIST_EXEC_DEVICE= "执行设备";
public static final String TABLE_HEARD_LIST_EXEC_STATUS= "执行状态";

View File

@ -323,5 +323,9 @@ public class PlanConstant {
* -
*/
public static final String INPUT_SET_QUOTE_TYPE_FUZZY = "2";
/**
* UI
*/
public static final Integer UI_PLAN_TAG_TYPE = 4;
}

View File

@ -59,18 +59,25 @@ public class TaskExecHeartbeatConsumer {
}
private void handleTaskHeartbeat(String taskId, String taskType){
AtuPlanTask planTask = new AtuPlanTask();
planTask.setId(taskId);
planTask.setLastHeartbeatTime(new Date());
if (PlanConstant.SCRIPT_TYPE_SCENE.equals(taskType)){
// 场景任务
AtuPlanSceneCaseTask sceneCaseTask = planSceneCaseTaskService.findByPrimaryKey(taskId);
sceneCaseTask.setLastHeartbeatTime(new Date());
planSceneCaseTaskService.updateByPrimaryKey(sceneCaseTask);
// 更新场景节点对应的任务心跳
planTask.setId(sceneCaseTask.getTaskId());
try {
AtuPlanTask planTask = new AtuPlanTask();
planTask.setId(taskId);
planTask.setLastHeartbeatTime(new Date());
if (PlanConstant.SCRIPT_TYPE_SCENE.equals(taskType)) {
// 场景任务
AtuPlanSceneCaseTask sceneCaseTask = planSceneCaseTaskService.findByPrimaryKey(taskId);
if (sceneCaseTask != null) {
sceneCaseTask.setLastHeartbeatTime(new Date());
planSceneCaseTaskService.updateByPrimaryKey(sceneCaseTask);
// 更新场景节点对应的任务心跳
planTask.setId(sceneCaseTask.getTaskId());
}
}
// 普通任务
planTaskService.updateByPrimaryKey(planTask);
} catch (Exception e) {
logger.error("更新{}任务心跳失败", taskId);
logger.error("更新任务心跳失败,原因", e);
}
// 普通任务
planTaskService.updateByPrimaryKey(planTask);
}
}

View File

@ -25,6 +25,4 @@ public interface AtuPlanTaskRecordDao extends AtuPlanTaskRecordMapper
{
List<PlanTaskRecordDto> queryTotalTake(@Param("taskIds") List<String> taskIds);
List<AtuPlanTaskRecord> queryReTryTaskByTaskIds(@Param("taskIds") List<String> taskIds);
}

View File

@ -64,11 +64,6 @@ public class AtuPlanTaskRecordServiceImpl extends PaginationService<AtuPlanTaskR
return atuPlanTaskRecordDao.queryTotalTake(ids);
}
@Override
public List<AtuPlanTaskRecord> queryReTryTaskByTaskIds(List<String> ids) {
return atuPlanTaskRecordDao.queryReTryTaskByTaskIds(ids);
}
}

View File

@ -25,6 +25,4 @@ public interface AtuPlanTaskRecordService extends BasicService<AtuPlanTaskRecord
// ---- The End by Generator ----//
List<PlanTaskRecordDto> queryTotalTake(List<String> ids);
List<AtuPlanTaskRecord> queryReTryTaskByTaskIds(List<String> ids);
}

View File

@ -143,6 +143,19 @@ public class AtuPlanInfoAddDto implements Serializable
@ApiModelProperty("是否存在移动脚本")
private boolean hasMob;
@ApiModelProperty("是否存在移动脚本")
private List<String> tags;
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
@ApiModelProperty("计划负责人")
private String principalId;
public boolean isHasAPI() {
return hasAPI;
@ -351,4 +364,12 @@ public class AtuPlanInfoAddDto implements Serializable
public void setRetryStrategy(String retryStrategy) {
this.retryStrategy = retryStrategy;
}
public String getPrincipalId() {
return principalId;
}
public void setPrincipalId(String principalId) {
this.principalId = principalId;
}
}

View File

@ -260,12 +260,25 @@ public class AtuPlanInfoDetailDto implements Serializable
@ApiModelProperty("负责人")
private String principalId;
@ApiModelProperty("负责人姓名")
private String principalName;
@ApiModelProperty("最后批次脚本统计数据")
private Map<String, Integer> lastBatchScriptSumMap;
@ApiModelProperty("绑定应用id集合")
private List<String> appIdList;
@ApiModelProperty("是否存在移动脚本")
private List<String> tags;
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
public List<String> getAppIdList() {
return appIdList;
}
@ -634,6 +647,14 @@ public class AtuPlanInfoDetailDto implements Serializable
this.principalId = principalId;
}
public String getPrincipalName() {
return principalName;
}
public void setPrincipalName(String principalName) {
this.principalName = principalName;
}
public Map<String, Integer> getLastBatchScriptSumMap() {
return lastBatchScriptSumMap;
}

View File

@ -21,6 +21,7 @@ public enum ExecPlanError implements PlatformError {
PLAN_NAME_ERROR("系统下的计划名称不能重复"),
PLAN_NAME_TOO_LONG("计划名称超过30位请修改计划名称"),
PRINCIPALID_IS_NULL("责任人不能为空"),
PLAN_IS_NULL("计划信息不存在"),
PLAN_CASE_SET_IS_NULL("计划用例集信息不存在"),
PLAN_IS_UN_ENABLE("计划被禁用,执行失败!"),
@ -85,10 +86,8 @@ public enum ExecPlanError implements PlatformError {
PARSE_DATE_ERROR("格式化日期出错,请检查参数"),
EMPTY_BATCH_ID("批次id不能为空"),
GET_FILE_FAIL("获取文件失败"),
EMPTY_BATCH_ID("批次id不能为空"),
BATCH_IS_DEALING_WITH_RETRY("批次的任务重试正在处理中..."),
/**

View File

@ -0,0 +1,21 @@
package net.northking.cctp.executePlan.feign;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.RequestDTO;
import net.northking.cctp.common.feign.FeignCctpConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(contextId = "apiMixHandleService", value = "common-center", path = "/common-center/api/mix-handler", configuration = {FeignCctpConfig.class})
public interface ApiMixHandlerService {
/**
*
*
* @return
*/
@PostMapping("/get")
List<Object> getMixData(@RequestBody List<RequestDTO> requestList);
}

View File

@ -7,9 +7,7 @@ import net.northking.cctp.executePlan.config.AtuPlanConfig;
import net.northking.cctp.executePlan.constants.PlanConstant;
import net.northking.cctp.executePlan.db.entity.AtuPlanSceneCaseTask;
import net.northking.cctp.executePlan.db.entity.AtuPlanTask;
import net.northking.cctp.executePlan.db.entity.AtuPlanTaskRecord;
import net.northking.cctp.executePlan.db.service.AtuPlanSceneCaseTaskService;
import net.northking.cctp.executePlan.db.service.AtuPlanTaskRecordService;
import net.northking.cctp.executePlan.dto.planTask.AtuPlanTaskExtendDto;
import net.northking.cctp.executePlan.dto.planTask.AtuTaskExecResultDto;
import org.slf4j.Logger;
@ -23,7 +21,6 @@ import org.springframework.scheduling.annotation.Scheduled;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.stream.Collectors;
@EnableScheduling
@Configuration
@ -48,9 +45,6 @@ public class TaskExecTimeoutJob {
@Autowired
private AtuPlanConfig atuPlanConfig;
@Autowired
private AtuPlanTaskRecordService atuPlanTaskRecordService;
/**
* 3
@ -73,9 +67,6 @@ public class TaskExecTimeoutJob {
taskTimeoutHandle(taskList, PlanConstant.TASK_TIMEOUT_STATUS, ERROR_MSG);
List<AtuPlanTask> waitTimeoutTask = planTaskApiService.queryWaitTimeoutTask(atuPlanConfig.getWaitTimeout());
List<AtuPlanTaskRecord> reTryTasks = atuPlanTaskRecordService.queryReTryTaskByTaskIds(waitTimeoutTask.stream().map(AtuPlanTask::getId).collect(Collectors.toList()));
List<String> reTryTaskIds = reTryTasks.stream().map(AtuPlanTaskRecord::getTaskId).collect(Collectors.toList());
waitTimeoutTask.removeIf(task -> reTryTaskIds.contains(task.getId()));
logger.debug("等待超时任务数量:{}", waitTimeoutTask.size());
taskTimeoutHandle(waitTimeoutTask, PlanConstant.TASK_CANCEL_STATUS, WAIT_TIMEOUT_ERROR_MSG);
@ -83,9 +74,6 @@ public class TaskExecTimeoutJob {
logger.debug("场景节点执行超时任务数量:{}", sceneCaseTaskList.size());
sceneTaskTimeoutHandle(sceneCaseTaskList, PlanConstant.TASK_TIMEOUT_STATUS, ERROR_MSG);
List<AtuPlanSceneCaseTask> sceneWaitTimeoutTask = sceneCaseTaskService.queryWaitTimeoutTask(atuPlanConfig.getWaitTimeout());
List<AtuPlanTaskRecord> reTrySceneCaseTask = atuPlanTaskRecordService.queryReTryTaskByTaskIds(sceneWaitTimeoutTask.stream().map(AtuPlanSceneCaseTask::getTaskId).collect(Collectors.toList()));
List<String> reTrySceneCaseTaskIds = reTrySceneCaseTask.stream().map(AtuPlanTaskRecord::getTaskId).collect(Collectors.toList());
sceneWaitTimeoutTask.removeIf(sceneCaseTask -> reTrySceneCaseTaskIds.contains(sceneCaseTask.getId()));
logger.debug("场景节点等待超时任务数量:{}", sceneWaitTimeoutTask.size());
sceneTaskTimeoutHandle(sceneWaitTimeoutTask, PlanConstant.TASK_CANCEL_STATUS, WAIT_TIMEOUT_ERROR_MSG);
}

View File

@ -24,16 +24,4 @@
) AS temp
GROUP BY task_id
</select>
<select id="queryReTryTaskByTaskIds"
resultType="net.northking.cctp.executePlan.db.entity.AtuPlanTaskRecord">
SELECT *
FROM <include refid="Table_Name" />
WHERE
task_id IN
<foreach collection="taskIds" item="id" open="(" separator="," close=")">
#{id, jdbcType=VARCHAR}
</foreach>
and execute_type = '2'
</select>
</mapper>

View File

@ -26,6 +26,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xmx256M -Dfile.encoding=UTF-8 -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
ENTRYPOINT ["sh", "-c", "java -jar -Xmx256M -Dfile.encoding=UTF-8 -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"]
#CMD [""]