提交 beb34e41 authored 作者: 黄夏豪's avatar 黄夏豪

fix(base): HTTP执行器中HTTP执行时假如URL不存在协议://域名 时,会自动根据当前的环境进行 URL的拼接了

上级 a59c40b8
...@@ -20,7 +20,10 @@ import org.apache.http.entity.mime.MultipartEntityBuilder; ...@@ -20,7 +20,10 @@ import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair; import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.matrix.database.entity.Environment;
import org.matrix.database.service.IEnvironmentService;
import org.matrix.exception.HttpRequestException; import org.matrix.exception.HttpRequestException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -35,6 +38,7 @@ import java.time.ZoneOffset; ...@@ -35,6 +38,7 @@ import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -44,15 +48,24 @@ import java.util.stream.Collectors; ...@@ -44,15 +48,24 @@ import java.util.stream.Collectors;
@Component @Component
public class HttpClientActuator implements Actuator { public class HttpClientActuator implements Actuator {
/**
* 正则表达式,匹配 URL 是否符合HTTP协议
*/
private static final String PATTERN_URL = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
final final
CloseableHttpClient client; CloseableHttpClient client;
final final
CompleteExpressionUtil completeExpressionUtil; CompleteExpressionUtil completeExpressionUtil;
public HttpClientActuator(CloseableHttpClient client, CompleteExpressionUtil completeExpressionUtil) { final
IEnvironmentService environmentService;
public HttpClientActuator(CloseableHttpClient client, CompleteExpressionUtil completeExpressionUtil, IEnvironmentService environmentService) {
this.client = client; this.client = client;
this.completeExpressionUtil = completeExpressionUtil; this.completeExpressionUtil = completeExpressionUtil;
this.environmentService = environmentService;
} }
/** /**
...@@ -100,6 +113,11 @@ public class HttpClientActuator implements Actuator { ...@@ -100,6 +113,11 @@ public class HttpClientActuator implements Actuator {
httpRequestDetail.getUrl(), httpRequestDetail.getUrl(),
envId, envId,
projectId)); projectId));
boolean urlMatch = Pattern.matches(PATTERN_URL, httpRequestDetail.getUrl());
if (!urlMatch){
Environment environment = environmentService.getById(envId);
httpRequestDetail.setUrl(environment.getIp()+httpRequestDetail.getUrl());
}
} }
/** /**
...@@ -253,12 +271,12 @@ public class HttpClientActuator implements Actuator { ...@@ -253,12 +271,12 @@ public class HttpClientActuator implements Actuator {
} }
} }
url = uriBuilder.build().toString(); url = uriBuilder.build().toString();
}else if(httpRequestDetail.getRequestType() == HttpRequestType.PATH){
List<RequestBody> requestBodies = httpRequestDetail.getRequestBodies();
Map<String, String> requestMap =
requestBodies.stream().collect(Collectors.toMap(RequestBody::getKey, RequestBody::getValue));
url = completeExpressionUtil.completePathVariable(url,requestMap);
} }
}else if(httpRequestDetail.getRequestType() == HttpRequestType.PATH){
List<RequestBody> requestBodies = httpRequestDetail.getRequestBodies();
Map<String, String> requestMap =
requestBodies.stream().collect(Collectors.toMap(RequestBody::getKey, RequestBody::getValue));
url = completeExpressionUtil.completePathVariable(url,requestMap);
} }
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new HttpRequestException(String.format("URL格式不正确,不正确的URL为: %s",url)); throw new HttpRequestException(String.format("URL格式不正确,不正确的URL为: %s",url));
......
...@@ -290,14 +290,8 @@ public class CaseActuator implements Actuator { ...@@ -290,14 +290,8 @@ public class CaseActuator implements Actuator {
throw new GlobalException("本次执行中,存在非相同项目的测试用例"); throw new GlobalException("本次执行中,存在非相同项目的测试用例");
} }
} }
//建立执行历史(ExecutionHistory)
if (caseExecuteVo.getJobId() != -1L) { Boolean hasInit = false;
if (!LogQueueRuntime.checkJobIsInRun(caseExecuteVo.getJobId(), caseExecuteVo.getUserId(), caseExecuteVo.getType())) {
insertExecutionHistory(uniqueKey, caseExecuteVo);
}
} else {
insertExecutionHistory(uniqueKey, caseExecuteVo);
}
for (TestCaseListDataBto testCaseListDataBto : testCaseListDataBtoList) { for (TestCaseListDataBto testCaseListDataBto : testCaseListDataBtoList) {
LocalDateTime caseStartTime = LocalDateTime.now(); LocalDateTime caseStartTime = LocalDateTime.now();
try { try {
...@@ -309,6 +303,17 @@ public class CaseActuator implements Actuator { ...@@ -309,6 +303,17 @@ public class CaseActuator implements Actuator {
, caseExecuteVo.getType() , caseExecuteVo.getType()
, uniqueKey , uniqueKey
); );
if (!hasInit){
//建立执行历史(ExecutionHistory)
if (caseExecuteVo.getJobId() != -1L) {
if (!LogQueueRuntime.checkJobIsInRun(caseExecuteVo.getJobId(), caseExecuteVo.getUserId(), caseExecuteVo.getType())) {
insertExecutionHistory(uniqueKey, caseExecuteVo);
}
} else {
insertExecutionHistory(uniqueKey, caseExecuteVo);
}
hasInit = true;
}
//执行测试用例 //执行测试用例
if (testCaseListDataBto.getTestDataList() != null && testCaseListDataBto.getTestDataList().size() > 0) { if (testCaseListDataBto.getTestDataList() != null && testCaseListDataBto.getTestDataList().size() > 0) {
List<TestDataExecuteResult> resultList = List<TestDataExecuteResult> resultList =
......
...@@ -140,7 +140,12 @@ public class ExecutionSocketHandler extends TextWebSocketHandler { ...@@ -140,7 +140,12 @@ public class ExecutionSocketHandler extends TextWebSocketHandler {
//执行总时间 //执行总时间
String allTime = caseResult.getDurationTimeStr(); String allTime = caseResult.getDurationTimeStr();
//用例通过率 //用例通过率
Integer probability = BigDecimal.valueOf(passNum).divide(BigDecimal.valueOf(total), 2, RoundingMode.UP).multiply(BigDecimal.valueOf(100)).intValue(); Integer probability;
if (total==0L){
probability = 0;
}else {
probability = BigDecimal.valueOf(passNum).divide(BigDecimal.valueOf(total), 2, RoundingMode.UP).multiply(BigDecimal.valueOf(100)).intValue();
}
DataBean dataBean = new DataBean(total, passNum, failNum, allTime, probability); DataBean dataBean = new DataBean(total, passNum, failNum, allTime, probability);
List<DataBeansMoveVo> dataBeansMoveVos = new ArrayList<>(); List<DataBeansMoveVo> dataBeansMoveVos = new ArrayList<>();
for (TestCaseReport caseReport : caseResult.getCaseReports()) { for (TestCaseReport caseReport : caseResult.getCaseReports()) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论