zhaoxingrui 5 роки тому
батько
коміт
58c31577ae

+ 17 - 1
web/src/main/java/seecoder/devcloud/web/controller/APITest/APITestController.java

@@ -5,8 +5,10 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import seecoder.devcloud.web.model.po.APITest.APITestResult;
 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.Response;
 import seecoder.devcloud.web.service.APITest.APITestService;
 
@@ -18,7 +20,7 @@ import java.util.List;
  */
 @Api(tags = "接口测试 API")
 @RestController
-@RequestMapping("/apitest")
+@RequestMapping("/test")
 public class APITestController {
 
     private final APITestService apiTestService;
@@ -57,4 +59,18 @@ public class APITestController {
         apiTestService.executeAPITest(testId);
         return Response.buildSuccess();
     }
+
+    @GetMapping("/result/{testId}")
+    @ApiOperation(value = "获取执行测试任务的执行结果列表", httpMethod = "GET")
+    @ApiImplicitParam(name = "testId", dataType = "int", paramType = "query")
+    public Response<List<APITestResultVO>> getAPITestResultByTestId(@PathVariable("testId") Integer testId) {
+        return Response.buildSuccess(apiTestService.getAPITestResultByTestId(testId));
+    }
+
+    @GetMapping("/latest/{testId}")
+    @ApiOperation(value = "获取测试任务的最近一次执行信息", httpMethod = "GET")
+    @ApiImplicitParam(name = "testId", dataType = "int", paramType = "query")
+    public Response<APITestResultVO> getLatestTestResultByTestId(@PathVariable("testId") Integer testId) {
+        return Response.buildSuccess(apiTestService.getLatestTestResultByTestId(testId));
+    }
 }

+ 20 - 9
web/src/main/java/seecoder/devcloud/web/dao/APITest/APITestMapper.java

@@ -2,7 +2,8 @@ package seecoder.devcloud.web.dao.APITest;
 
 import org.apache.ibatis.annotations.*;
 import seecoder.devcloud.web.dao.provider.GeneralInsertUpdateSqlProvider;
-import seecoder.devcloud.web.model.po.APITest.APITest;
+import seecoder.devcloud.web.model.po.APITest.TestInfo;
+import seecoder.devcloud.web.model.po.APITest.TestResult;
 
 import java.util.List;
 
@@ -16,17 +17,27 @@ public interface APITestMapper {
 
     @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
     @Options(useGeneratedKeys = true, keyProperty = "param1.testId")
-    boolean insert(APITest apiTest, String... ignoredCols);
+    boolean insert(TestInfo testInfo, String... ignoredCols);
 
-    @Select("select * from api_test where project_id = #{id}")
-    List<APITest> selectByProjectId(Integer id);
+    @Select("select * from test_info where project_id = #{id}")
+    List<TestInfo> selectByProjectId(Integer id);
 
-    @Select("select * from api_test where test_id = #{id}")
-    APITest selectByTestId(Integer id);
+    @Select("select * from test_info where test_id = #{id}")
+    TestInfo selectByTestId(Integer id);
 
-    @Delete("delete from api_test where test_id = #{id}")
+    @Delete("delete from test_info where test_id = #{id}")
     boolean delete(Integer id);
 
-    @Update("update api_test set state = #{state}, execute_time = #{executeTime}, success = #{success}, failure = #{failure}, time_list = #{timeList} where test_id = #{id}")
-    boolean update(@Param("state") String state, @Param("executeTime") String executeTime, @Param("success") Integer success, @Param("failure") Integer failure, @Param("timeList") String timeList, @Param("id") Integer id);
+    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
+    @Options(useGeneratedKeys = true, keyProperty = "param1.id")
+    boolean execute(TestResult testResult, String... ignoredCols);
+
+    @Select("select * from test_result where test_id = #{id}")
+    List<TestResult> selectTestResultByTestId(Integer id);
+
+    @Delete("delete from test_result where test_id = #{id}")
+    boolean deleteTestResult(Integer id);
+
+    @Select("select * from test_result where test_id = #{id} order by id DESC LIMIT 0,1")
+    TestResult selectLatestTestResultById(Integer id);
 }

+ 0 - 5
web/src/main/java/seecoder/devcloud/web/model/po/APITest/APITestInfo.java

@@ -28,9 +28,4 @@ public class APITestInfo {
     private Map<String, Object> params;
     private String method;
     private Integer qps;
-    private String state;
-    private String executeTime;
-    private Integer success;
-    private Integer failure;
-    private List<Integer> timeList;
 }

+ 29 - 0
web/src/main/java/seecoder/devcloud/web/model/po/APITest/APITestResult.java

@@ -0,0 +1,29 @@
+package seecoder.devcloud.web.model.po.APITest;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author zhaoxingrui
+ * @date 2021/4/16
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class APITestResult {
+    private Integer id;
+    private Integer testId;
+    private String executeTime;
+    private Integer success;
+    private Integer failure;
+    private List<Integer> timeList;
+    private Integer maxTime;
+    private Integer minTime;
+    private Double averageTime;
+}

+ 1 - 6
web/src/main/java/seecoder/devcloud/web/model/po/APITest/APITest.java → web/src/main/java/seecoder/devcloud/web/model/po/APITest/TestInfo.java

@@ -19,7 +19,7 @@ import java.util.Map;
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-public class APITest {
+public class TestInfo {
     private Integer testId;
     private String testName;
     private Integer projectId;
@@ -29,9 +29,4 @@ public class APITest {
     private String params;
     private String method;
     private Integer qps;
-    private String state;
-    private String executeTime;
-    private Integer success;
-    private Integer failure;
-    private String timeList;
 }

+ 27 - 0
web/src/main/java/seecoder/devcloud/web/model/po/APITest/TestResult.java

@@ -0,0 +1,27 @@
+package seecoder.devcloud.web.model.po.APITest;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author zhaoxingrui
+ * @date 2021/4/16
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class TestResult {
+    private Integer id;
+    private Integer testId;
+    private String executeTime;
+    private Integer success;
+    private Integer failure;
+    private String timeList;
+    private Integer maxTime;
+    private Integer minTime;
+    private Double averageTime;
+}

+ 0 - 15
web/src/main/java/seecoder/devcloud/web/model/vo/APITest/APITestInfoVO.java

@@ -50,21 +50,6 @@ public class APITestInfoVO {
     @ApiModelProperty("测试并发数")
     private Integer qps;
 
-    @ApiModelProperty("测试任务状态")
-    private String state;
-
-    @ApiModelProperty("测试执行时间")
-    private String executeTime;
-
-    @ApiModelProperty("测试成功次数")
-    private Integer success;
-
-    @ApiModelProperty("测试失败次数")
-    private Integer failure;
-
-    @ApiModelProperty("测试结果list")
-    private List<Integer> timeList;
-
     public APITestInfoVO(APITestInfo apiTestInfo) {
         BeanUtils.copyProperties(apiTestInfo, this);
     }

+ 53 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/APITest/APITestResultVO.java

@@ -0,0 +1,53 @@
+package seecoder.devcloud.web.model.vo.APITest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import seecoder.devcloud.web.model.po.APITest.APITestResult;
+import seecoder.devcloud.web.model.po.APITest.TestResult;
+
+import java.util.List;
+
+/**
+ * @author zhaoxingrui
+ * @date 2021/4/16
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("测试任务返回给前端的执行信息")
+public class APITestResultVO {
+    @ApiModelProperty("测试结果id")
+    private Integer id;
+
+    @ApiModelProperty("所属测试任务id")
+    private Integer testId;
+
+    @ApiModelProperty("执行时间")
+    private String executeTime;
+
+    @ApiModelProperty("成功次数")
+    private Integer success;
+
+    @ApiModelProperty("失败次数")
+    private Integer failure;
+
+    @ApiModelProperty("执行时间列表")
+    private List<Integer> timeList;
+
+    @ApiModelProperty("执行时间最大值")
+    private Integer maxTime;
+
+    @ApiModelProperty("执行时间最小值")
+    private Integer minTime;
+
+    @ApiModelProperty("执行时间平均值")
+    private Double averageTime;
+
+    public APITestResultVO(APITestResult apiTestResult) {
+        BeanUtils.copyProperties(apiTestResult, this);
+    }
+}

+ 4 - 21
web/src/main/java/seecoder/devcloud/web/model/vo/APITest/APITestVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/APITest/TestInfoVO.java

@@ -6,9 +6,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
-import seecoder.devcloud.web.model.po.APITest.APITest;
-
-import java.sql.Timestamp;
+import seecoder.devcloud.web.model.po.APITest.TestInfo;
 
 /**
  * @author zhaoxingrui
@@ -18,7 +16,7 @@ import java.sql.Timestamp;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor@ApiModel("测试任务在mysql数据库中的类型")
-public class APITestVO {
+public class TestInfoVO {
     @ApiModelProperty("测试id")
     private Integer testId;
 
@@ -46,23 +44,8 @@ public class APITestVO {
     @ApiModelProperty("测试并发数")
     private Integer qps;
 
-    @ApiModelProperty("测试任务状态")
-    private String state;
-
-    @ApiModelProperty("测试执行时间")
-    private String executeTime;
-
-    @ApiModelProperty("测试成功次数")
-    private Integer success;
-
-    @ApiModelProperty("测试失败次数")
-    private Integer failure;
-
-    @ApiModelProperty("测试结果list")
-    private String timeList;
-
-    public APITestVO(APITest apiTest) {
-        BeanUtils.copyProperties(apiTest, this);
+    public TestInfoVO(TestInfo testInfo) {
+        BeanUtils.copyProperties(testInfo, this);
     }
 
 }

+ 52 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/APITest/TestResultVO.java

@@ -0,0 +1,52 @@
+package seecoder.devcloud.web.model.vo.APITest;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import seecoder.devcloud.web.model.po.APITest.TestResult;
+
+/**
+ * @author zhaoxingrui
+ * @date 2021/4/16
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("测试任务的执行信息")
+public class TestResultVO {
+
+    @ApiModelProperty("测试结果id")
+    private Integer id;
+
+    @ApiModelProperty("所属测试任务id")
+    private Integer testId;
+
+    @ApiModelProperty("执行时间")
+    private String executeTime;
+
+    @ApiModelProperty("成功次数")
+    private Integer success;
+
+    @ApiModelProperty("失败次数")
+    private Integer failure;
+
+    @ApiModelProperty("执行时间列表")
+    private String timeList;
+
+    @ApiModelProperty("执行时间最大值")
+    private Integer maxTime;
+
+    @ApiModelProperty("执行时间最小值")
+    private Integer minTime;
+
+    @ApiModelProperty("执行时间平均值")
+    private Double averageTime;
+
+    public TestResultVO(TestResult testResult) {
+        BeanUtils.copyProperties(testResult, this);
+    }
+}

+ 12 - 1
web/src/main/java/seecoder/devcloud/web/service/APITest/APITestService.java

@@ -2,6 +2,7 @@ package seecoder.devcloud.web.service.APITest;
 
 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 java.util.List;
 
@@ -24,10 +25,20 @@ public interface APITestService {
     /**
      * 删除指定测试任务
      */
-    void deleteAPITest(Integer projectId);
+    void deleteAPITest(Integer testId);
 
     /**
      * 执行指定测试任务
      */
     void executeAPITest(Integer testId) throws InterruptedException;
+
+    /**
+     * 获取指定测试任务的所有测试结果
+     */
+    List<APITestResultVO> getAPITestResultByTestId(Integer testId);
+
+    /**
+     * 获取指定测试任务的最近一次执行结果信息
+     */
+    APITestResultVO getLatestTestResultByTestId(Integer testId);
 }

+ 86 - 44
web/src/main/java/seecoder/devcloud/web/service/impl/APITest/APITestServiceImpl.java

@@ -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();

+ 29 - 0
web/src/main/resources/SQLScripts/test_info.sql

@@ -0,0 +1,29 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : zhaoxingrui
+ Source Server Type    : MySQL
+ Source Server Version : 80016
+ Source Host           : localhost:3306
+ Source Schema         : devcloud
+
+ Target Server Type    : MySQL
+ Target Server Version : 80016
+ File Encoding         : 65001
+
+ Date: 20/04/2021 21:43:55
+*/
+CREATE TABLE `test_info` (
+  `test_id` int(11) NOT NULL AUTO_INCREMENT,
+  `test_name` varchar(255) NOT NULL,
+  `project_id` int(11) NOT NULL,
+  `username` varchar(255) NOT NULL,
+  `create_time` datetime NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `params` json DEFAULT NULL,
+  `qps` int(11) NOT NULL,
+  `method` varchar(255) NOT NULL,
+  PRIMARY KEY (`test_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 29 - 0
web/src/main/resources/SQLScripts/test_result.sql

@@ -0,0 +1,29 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : zhaoxingrui
+ Source Server Type    : MySQL
+ Source Server Version : 80016
+ Source Host           : localhost:3306
+ Source Schema         : devcloud
+
+ Target Server Type    : MySQL
+ Target Server Version : 80016
+ File Encoding         : 65001
+
+ Date: 20/04/2021 21:44:04
+*/
+CREATE TABLE `test_result` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `test_id` int(11) NOT NULL,
+  `execute_time` datetime NOT NULL,
+  `success` int(11) NOT NULL DEFAULT '0',
+  `failure` int(11) NOT NULL DEFAULT '0',
+  `time_list` text NOT NULL,
+  `max_time` int(11) NOT NULL,
+  `min_time` int(11) NOT NULL,
+  `average_time` double NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 1 - 1
web/src/main/resources/application.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: xzh
+    active: zxr