|
|
@@ -7,9 +7,13 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import seecoder.devcloud.web.dao.APITest.APITestMapper;
|
|
|
import seecoder.devcloud.web.model.po.APITest.APITestInfo;
|
|
|
-import seecoder.devcloud.web.model.po.APITest.APITest;
|
|
|
+import seecoder.devcloud.web.model.po.APITest.APITestResult;
|
|
|
+import seecoder.devcloud.web.model.po.APITest.TestInfo;
|
|
|
+import seecoder.devcloud.web.model.po.APITest.TestResult;
|
|
|
import seecoder.devcloud.web.model.vo.APITest.APITestBodyVO;
|
|
|
import seecoder.devcloud.web.model.vo.APITest.APITestInfoVO;
|
|
|
+import seecoder.devcloud.web.model.vo.APITest.APITestResultVO;
|
|
|
+import seecoder.devcloud.web.model.vo.APITest.TestResultVO;
|
|
|
import seecoder.devcloud.web.service.APITest.APITestService;
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
@@ -19,6 +23,7 @@ import java.io.OutputStreamWriter;
|
|
|
import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.text.DecimalFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
@@ -32,7 +37,7 @@ public class APITestServiceImpl implements APITestService {
|
|
|
|
|
|
@Override
|
|
|
public void createAPITest(APITestBodyVO apiTestBodyVO) {
|
|
|
- APITest apiTest = APITest.builder()
|
|
|
+ TestInfo testInfo = TestInfo.builder()
|
|
|
.testName(apiTestBodyVO.getTestName())
|
|
|
.projectId(apiTestBodyVO.getProjectId())
|
|
|
.createTime(apiTestBodyVO.getCreateTime())
|
|
|
@@ -41,38 +46,35 @@ public class APITestServiceImpl implements APITestService {
|
|
|
.params(JSONObject.fromObject(apiTestBodyVO.getParams()).toString())
|
|
|
.method(apiTestBodyVO.getMethod())
|
|
|
.qps(apiTestBodyVO.getQps())
|
|
|
- .state("进行中")
|
|
|
- .success(0)
|
|
|
- .failure(0)
|
|
|
- .timeList("")
|
|
|
.build();
|
|
|
- apiTestMapper.insert(apiTest);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void deleteAPITest(Integer projectId) {
|
|
|
- apiTestMapper.delete(projectId);
|
|
|
+ apiTestMapper.insert(testInfo);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public List<APITestInfoVO> getAPITestsByProjectId(Integer projectId) {
|
|
|
- List<APITest> apiTestInfoVOs = apiTestMapper.selectByProjectId(projectId);
|
|
|
+ List<TestInfo> apiTestInfos = apiTestMapper.selectByProjectId(projectId);
|
|
|
List<APITestInfoVO> apiTestInfoVOList = new ArrayList<>();
|
|
|
- for (APITest apiTest : apiTestInfoVOs) {
|
|
|
- apiTestInfoVOList.add(new APITestInfoVO(transform(apiTest)));
|
|
|
+ for (TestInfo testInfo: apiTestInfos) {
|
|
|
+ apiTestInfoVOList.add(new APITestInfoVO(transform(testInfo)));
|
|
|
}
|
|
|
return apiTestInfoVOList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void deleteAPITest(Integer testId) {
|
|
|
+ apiTestMapper.delete(testId);
|
|
|
+ apiTestMapper.deleteTestResult(testId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public void executeAPITest(Integer testId) throws InterruptedException {
|
|
|
- APITest apiTest = apiTestMapper.selectByTestId(testId);
|
|
|
- String url = apiTest.getUrl();
|
|
|
- Map<String, Object> params = parseJson2Map(apiTest.getParams());
|
|
|
- int qps = apiTest.getQps();
|
|
|
- String method = apiTest.getMethod();
|
|
|
+ TestInfo testInfo = apiTestMapper.selectByTestId(testId);
|
|
|
+ String url = testInfo.getUrl();
|
|
|
+ Map<String, Object> params = parseJson2Map(testInfo.getParams());
|
|
|
+ int qps = testInfo.getQps();
|
|
|
+ String method = testInfo.getMethod();
|
|
|
|
|
|
- System.out.println(method);
|
|
|
if (method.equals("GET")) { // GET方法
|
|
|
handleRequest(url, params, qps, testId, "GET");
|
|
|
} else if (method.equals("POST")) { // POST方法
|
|
|
@@ -80,26 +82,21 @@ public class APITestServiceImpl implements APITestService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 将数据库中读取的 APITestInfoMysql 转为 APITestInfo
|
|
|
- public APITestInfo transform(APITest apiTest) {
|
|
|
- APITestInfo apiTestInfo = new APITestInfo();
|
|
|
- apiTestInfo.setTestId(apiTest.getTestId());
|
|
|
- apiTestInfo.setTestName(apiTest.getTestName());
|
|
|
- apiTestInfo.setProjectId(apiTest.getProjectId());
|
|
|
- apiTestInfo.setCreateTime(apiTest.getCreateTime());
|
|
|
- apiTestInfo.setUsername(apiTest.getUsername());
|
|
|
- apiTestInfo.setUrl(apiTest.getUrl());
|
|
|
- apiTestInfo.setParams(parseJson2Map(apiTest.getParams()));
|
|
|
- apiTestInfo.setMethod(apiTest.getMethod());
|
|
|
- apiTestInfo.setQps(apiTest.getQps());
|
|
|
- apiTestInfo.setState(apiTest.getState());
|
|
|
- apiTestInfo.setExecuteTime(apiTest.getExecuteTime());
|
|
|
- apiTestInfo.setSuccess(apiTest.getSuccess());
|
|
|
- apiTestInfo.setFailure(apiTest.getFailure());
|
|
|
- apiTestInfo.setTimeList(splitTimeList(apiTest.getTimeList()));
|
|
|
- return apiTestInfo;
|
|
|
+ @Override
|
|
|
+ public List<APITestResultVO> getAPITestResultByTestId(Integer testId) {
|
|
|
+ List<TestResult> testResultVOS = apiTestMapper.selectTestResultByTestId(testId);
|
|
|
+ List<APITestResultVO> apiTestResultVOList = new ArrayList<>();
|
|
|
+ for (TestResult testResult: testResultVOS) {
|
|
|
+ apiTestResultVOList.add(new APITestResultVO(transform1(testResult)));
|
|
|
+ }
|
|
|
+ return apiTestResultVOList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public APITestResultVO getLatestTestResultByTestId(Integer testId) {
|
|
|
+ TestResult testResult = apiTestMapper.selectLatestTestResultById(testId);
|
|
|
+ return new APITestResultVO(transform1(testResult));
|
|
|
+ }
|
|
|
// 将JSON格式的字符串转为 Map类型
|
|
|
public Map<String, Object> parseJson2Map(String str) {
|
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
|
|
@@ -120,6 +117,35 @@ public class APITestServiceImpl implements APITestService {
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
+ // 将数据库中读取的TestInfo转为APITestInfo
|
|
|
+ public APITestInfo transform(TestInfo testInfo) {
|
|
|
+ APITestInfo apiTestInfo = new APITestInfo();
|
|
|
+ apiTestInfo.setTestId(testInfo.getTestId());
|
|
|
+ apiTestInfo.setTestName(testInfo.getTestName());
|
|
|
+ apiTestInfo.setProjectId(testInfo.getProjectId());
|
|
|
+ apiTestInfo.setCreateTime(testInfo.getCreateTime());
|
|
|
+ apiTestInfo.setUsername(testInfo.getUsername());
|
|
|
+ apiTestInfo.setUrl(testInfo.getUrl());
|
|
|
+ apiTestInfo.setParams(parseJson2Map(testInfo.getParams()));
|
|
|
+ apiTestInfo.setMethod(testInfo.getMethod());
|
|
|
+ apiTestInfo.setQps(testInfo.getQps());
|
|
|
+ return apiTestInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public APITestResult transform1(TestResult testResult) {
|
|
|
+ APITestResult apiTestResult = new APITestResult();
|
|
|
+ apiTestResult.setId(testResult.getId());
|
|
|
+ apiTestResult.setTestId(testResult.getTestId());
|
|
|
+ apiTestResult.setExecuteTime(testResult.getExecuteTime());
|
|
|
+ apiTestResult.setSuccess(testResult.getSuccess());
|
|
|
+ apiTestResult.setFailure(testResult.getFailure());
|
|
|
+ apiTestResult.setTimeList(splitTimeList(testResult.getTimeList()));
|
|
|
+ apiTestResult.setMaxTime(testResult.getMaxTime());
|
|
|
+ apiTestResult.setMinTime(testResult.getMinTime());
|
|
|
+ apiTestResult.setAverageTime(testResult.getAverageTime());
|
|
|
+ return apiTestResult;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// 分隔字符串
|
|
|
public List<Integer> splitTimeList(String time) {
|
|
|
@@ -166,6 +192,13 @@ public class APITestServiceImpl implements APITestService {
|
|
|
};
|
|
|
APITestServiceImpl apiTestService = new APITestServiceImpl();
|
|
|
apiTestService.startTaskAllInOnce(10, task);
|
|
|
+ Integer max_time = Collections.max(timeList);
|
|
|
+ Integer min_time = Collections.min(timeList);
|
|
|
+ Integer sum_time = 0;
|
|
|
+ for (Integer time: timeList) {
|
|
|
+ sum_time += time;
|
|
|
+ }
|
|
|
+ DecimalFormat df = new DecimalFormat("#.00");
|
|
|
String tl = "";
|
|
|
for (int j = 0; j < timeList.size(); j++) {
|
|
|
if (j != timeList.size() - 1) tl += timeList.get(j).toString() + ",";
|
|
|
@@ -174,8 +207,17 @@ public class APITestServiceImpl implements APITestService {
|
|
|
Date d = new Date();
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
String executeTime = sdf.format(d);
|
|
|
- System.out.println(success[0]);
|
|
|
- apiTestMapper.update("完成", executeTime, success[0], failure[0], tl, testId);
|
|
|
+ TestResult testResult = TestResult.builder()
|
|
|
+ .testId(testId)
|
|
|
+ .executeTime(executeTime)
|
|
|
+ .success(success[0])
|
|
|
+ .failure(failure[0])
|
|
|
+ .timeList(tl)
|
|
|
+ .maxTime(max_time)
|
|
|
+ .minTime(min_time)
|
|
|
+ .averageTime((Double.valueOf(df.format(sum_time / qps))))
|
|
|
+ .build();
|
|
|
+ apiTestMapper.execute(testResult);
|
|
|
}
|
|
|
|
|
|
// 处理GET请求
|
|
|
@@ -209,7 +251,7 @@ public class APITestServiceImpl implements APITestService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- if (full_url.startsWith("localhost")) {
|
|
|
+ if (!full_url.startsWith("http")) {
|
|
|
full_url = "http://" + full_url;
|
|
|
}
|
|
|
URL connURL = new URL(full_url);
|
|
|
@@ -220,8 +262,8 @@ public class APITestServiceImpl implements APITestService {
|
|
|
connection.setRequestProperty("Connection", "Keep-Alive");
|
|
|
connection.setRequestProperty("User-Agent",
|
|
|
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
|
|
|
- connection.setConnectTimeout(15000);
|
|
|
- connection.setReadTimeout(60000);
|
|
|
+// connection.setConnectTimeout(15000);
|
|
|
+// connection.setReadTimeout(60000);
|
|
|
|
|
|
// 建立连接
|
|
|
connection.connect();
|