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

fix(base): 修复了jsonPath无法正确替换的问题

fix(base): 修改了HttpClient执行器的作用域
上级 45ab62d4
......@@ -3,7 +3,22 @@ package org.matrix.actuators.httpclient;
import com.alibaba.fastjson.JSONObject;
import io.netty.handler.codec.http.HttpHeaderValues;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.NoConnectionReuseStrategy;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.matrix.actuators.Actuator;
import org.matrix.actuators.util.CompleteExpressionUtil;
import org.apache.http.Consts;
......@@ -20,6 +35,7 @@ import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.matrix.config.HttpRequestConfig;
import org.matrix.database.entity.Environment;
import org.matrix.database.service.IEnvironmentService;
import org.matrix.exception.GlobalException;
......@@ -29,16 +45,19 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.security.cert.X509Certificate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
......@@ -55,7 +74,7 @@ public class HttpClientActuator implements Actuator {
private static final String PATTERN_URL = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
final
CloseableHttpClient client;
HttpRequestConfig httpRequestConfig;
final
CompleteExpressionUtil completeExpressionUtil;
......@@ -63,10 +82,10 @@ public class HttpClientActuator implements Actuator {
final
IEnvironmentService environmentService;
public HttpClientActuator(CloseableHttpClient client, CompleteExpressionUtil completeExpressionUtil, IEnvironmentService environmentService) {
this.client = client;
public HttpClientActuator(CompleteExpressionUtil completeExpressionUtil, IEnvironmentService environmentService, HttpRequestConfig httpRequestConfig) {
this.completeExpressionUtil = completeExpressionUtil;
this.environmentService = environmentService;
this.httpRequestConfig = httpRequestConfig;
}
/**
......@@ -144,7 +163,7 @@ public class HttpClientActuator implements Actuator {
}
requestBase.setHeaders(httpRequestDetail.getHeadersArray());
try {
response = client.execute(requestBase);
response = httpRequestConfig.getClient().execute(requestBase);
Long endTime = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
return new HttpResponseDetail(
url,
......@@ -348,4 +367,6 @@ public class HttpClientActuator implements Actuator {
}
}
......@@ -14,6 +14,7 @@ import org.matrix.actuators.httpclient.HttpClientActuator;
import org.matrix.actuators.move.MoveActuator;
import org.matrix.actuators.move.MoveStrategy;
import org.matrix.actuators.util.ThreadUtil;
import org.matrix.config.HttpRequestConfig;
import org.matrix.database.entity.*;
import org.matrix.actuators.checkpoint.CheckPoint;
import org.matrix.actuators.checkpoint.CheckPointResult;
......@@ -48,6 +49,9 @@ import static org.matrix.enums.ModuleType.CASE_ACTUATOR;
@Component
public class CaseActuator implements Actuator {
@Autowired
HttpRequestConfig httpRequestConfig;
final
IDataSourceService dataSourceService;
......@@ -76,7 +80,6 @@ public class CaseActuator implements Actuator {
* 执行测试用例,这个方法对内使用,由其他执行器调用
*/
public TestDataExecuteResult executeTestCase(TestCaseBTO testCaseBto, Long envId, Long projectId) {
try {
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, "开始执行用例!!");
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, String.format("当前正在执行用例ID: %s 用例名: %s", testCaseBto.getTestCase().getId(), testCaseBto.getTestCase().getName()));
//执行前置动作
......@@ -116,9 +119,6 @@ public class CaseActuator implements Actuator {
//将线程中正在执行的DataId清除
LogQueueRuntime.clearTestData();
return testDataExecuteResult;
} finally {
LogQueueRuntime.remove(ThreadUtil.currentThreadId());
}
}
......@@ -128,7 +128,6 @@ public class CaseActuator implements Actuator {
public List<TestDataExecuteResult> executeTestCases(TestCaseListDataBto testCaseBto, Long envId, Long projectId) {
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, "[用例执行器] 开始执行用例!!");
List<TestDataExecuteResult> resultList = new ArrayList<>();
try {
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, String.format("[用例执行器] 当前正在执行用例ID: %s 用例名: %s", testCaseBto.getTestCase().getId(), testCaseBto.getTestCase().getName()));
//执行前置动作
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, "[用例执行器] 开始执行前置动作!!");
......@@ -160,7 +159,7 @@ public class CaseActuator implements Actuator {
TestDataExecuteResult testDataExecuteResult = new TestDataExecuteResult(
dataStartTime,
LocalDateTime.now(),
checkPointResult.getFailNum()>0?false:true,
checkPointResult.getFailNum() == null || checkPointResult.getFailNum() <= 0,
testCaseBto.getTestCase().getId(),
testData.getId(),
baseTestCaseResponseDetail,
......@@ -187,13 +186,14 @@ public class CaseActuator implements Actuator {
resultList.add(testDataExecuteResult);
changeExecutionHistoryStatus(ExecutionHistoryStatus.ERROR);
LogQueueRuntime.addNewLog(this.getClass(), CASE_ACTUATOR, String.format("[用例执行器] 执行数据组ID:%s 数据组名称:%s 产生错误:%s", testData.getId(), testData.getName(), e.getMessage()));
}finally {
clearMoveData();
//将线程中正在执行的DataId清除
LogQueueRuntime.clearTestData();
//将线程中的浏览器清除掉
httpRequestConfig.clear();
}
}
} finally {
clearMoveData();
//将线程中正在执行的DataId清除
LogQueueRuntime.clearTestData();
}
return resultList;
}
......@@ -243,7 +243,7 @@ public class CaseActuator implements Actuator {
projectId
);
}
return null;
return new CheckPointResult();
}
private HttpResponseDetail getHttpResponseDetail(
......
......@@ -76,12 +76,14 @@ public class CompleteExpressionUtil {
String result = expression;
Pattern pattern = Pattern.compile(regex);
Matcher mat = pattern.matcher(result);
StringBuffer sBuffer=new StringBuffer();
while (mat.find()) {
String group = mat.group();
String read = biFunction.apply(sourceContent,group);
result = mat.replaceAll(read);
mat.appendReplacement(sBuffer,read);
}
return result;
mat.appendTail(sBuffer);
return sBuffer.toString();
}
private static SqlExpActuator getSqlExpActuator(){
......
......@@ -35,12 +35,18 @@ import java.util.concurrent.TimeUnit;
@Component
public class HttpRequestConfig {
/**
* HttpClient的Cookie管理器,可在其他类中调用该Bean清空Cookie缓存。
* 主要针对某些网站Cookie多次使用会造成Cookie失效的问题
*/
public CookieStore cookieStore(){
return new BasicCookieStore();
ThreadLocal<CloseableHttpClient> threadLocal = new ThreadLocal<>();
public CloseableHttpClient getClient(){
CloseableHttpClient closeableHttpClient = threadLocal.get();
if (closeableHttpClient==null){
threadLocal.set(client());
}
return threadLocal.get();
}
public void clear(){
threadLocal.remove();
}
/**
......@@ -89,10 +95,11 @@ public class HttpRequestConfig {
}
}
@Bean
CloseableHttpClient getHttpClient() {
return client();
/**
* HttpClient的Cookie管理器,可在其他类中调用该Bean清空Cookie缓存。
* 主要针对某些网站Cookie多次使用会造成Cookie失效的问题
*/
public CookieStore cookieStore(){
return new BasicCookieStore();
}
}
......@@ -93,7 +93,7 @@ public class TestController {
"}", hello.getName());
}
@GetMapping("/sendMessage")
@PostMapping("/sendMessage")
public ResponseEntity sendMessage(String tableName) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", String.format("你好: %s", tableName));
......
package org.matrix.fs.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.UrlResource;
......@@ -21,8 +23,10 @@ import java.io.IOException;
@Slf4j
@RestController
@RequestMapping
@Api(tags = "文件系统获取测试URL")
public class FileSysController {
@ApiOperation(value = "获取页面")
@GetMapping("/report")
public ResponseEntity downloadAlertWeb(HttpServletRequest request,
@RequestParam String fileName) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论