Commit 0be7746a authored by 黎博's avatar 黎博

优化项目,新增接口自动化模块

parent c406bf5f
......@@ -5,7 +5,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(value = "cn.qg.qaplatform.dao")
@MapperScan(value = "cn.qg.qaplatform.*.mapper")
public class QaPlatformApplication {
public static void main(String[] args) {
......
package cn.qg.qaplatform.automation.controller;
import cn.qg.qaplatform.automation.domain.Interface;
import cn.qg.qaplatform.automation.service.InterfaceService;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.SwitchDataSource;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/interface")
public class InterfaceController {
@Autowired
InterfaceService interfaceService;
@GetMapping("/list")
public JsonResult getInterfaceList(Integer projectId, Integer moduleId,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
IPage<Interface> page = interfaceService.getInterfaceList(projectId, moduleId, pageNum, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("list", page.getRecords());
map.put("total", page.getTotal());
return JsonResult.success(map);
}
@PostMapping("/add")
public JsonResult<Boolean> addInterface(@RequestBody Interface entity) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(interfaceService.save(entity));
}
@PostMapping("/update")
public JsonResult updateInterface(@RequestBody Interface entity) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(interfaceService.saveOrUpdate(entity));
}
@GetMapping("/delete")
public JsonResult deleteInterface(Integer id) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(interfaceService.removeById(id));
}
}
package cn.qg.qaplatform.automation.controller;
import cn.qg.qaplatform.automation.domain.Module;
import cn.qg.qaplatform.automation.service.ModuleService;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.SwitchDataSource;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping("/module")
public class ModuleController {
@Autowired
ModuleService moduleService;
@GetMapping("/list")
public JsonResult getModuleList() {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(moduleService.list());
}
@PostMapping("/add")
public JsonResult addModule(@RequestBody Module module) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(moduleService.save(module));
}
@PostMapping("/update")
public JsonResult updateModule(@RequestBody Module module) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(moduleService.updateById(module));
}
@GetMapping("/delete")
public JsonResult deleteModule(Integer id) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(moduleService.removeById(id));
}
}
package cn.qg.qaplatform.automation.controller;
import cn.qg.qaplatform.automation.domain.Project;
import cn.qg.qaplatform.automation.service.ProjectService;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.SwitchDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping("/project")
public class ProjectController {
@Autowired
ProjectService projectService;
@GetMapping("/list")
public JsonResult getProjectList() {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(projectService.list());
}
@PostMapping("/add")
public JsonResult addProject(@RequestBody Project project) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(projectService.save(project));
}
@PostMapping("/update")
public JsonResult updateProject(@RequestBody Project project) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(projectService.updateById(project));
}
@GetMapping("/delete")
public JsonResult deleteProject(Integer id) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(projectService.removeById(id));
}
}
package cn.qg.qaplatform.automation.controller;
import cn.qg.qaplatform.automation.domain.Testcase;
import cn.qg.qaplatform.automation.service.AssertService;
import cn.qg.qaplatform.automation.service.TestcaseService;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.SwitchDataSource;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/testcase")
public class TestcaseController {
@Autowired
TestcaseService testcaseService;
@Autowired
AssertService assertService;
@GetMapping("/list")
public JsonResult getTestcaseList(Integer projectId, Integer moduleId,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
IPage<Testcase> pageEntity = testcaseService.getTestcaseList(projectId, moduleId, pageNum, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("list", pageEntity.getRecords());
map.put("total", pageEntity.getTotal());
return JsonResult.success(map);
}
@GetMapping("/type")
public JsonResult getTestcaseTypes() {
Map<String, String> map = new HashMap<>();
map.put("0", "标准用例");
map.put("1", "正常用例");
map.put("2", "异常用例");
return JsonResult.success(map);
}
@PostMapping("/add")
public JsonResult addTestcase(@RequestBody Testcase testcase) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(testcaseService.save(testcase));
}
@GetMapping("/execute")
public JsonResult executeTestcase(Integer testcaseId) throws Exception {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
Map<String, Object> resultMap = new HashMap<>();
JSONObject response = testcaseService.exexuteTestcase(testcaseId);
Boolean assertResult = assertService.assertResponse(testcaseId, response);
resultMap.put("response", response);
resultMap.put("assertResult", assertResult);
if (response != null && assertResult) {
return JsonResult.success(resultMap);
} else {
return JsonResult.serverFailed(resultMap);
}
}
@PostMapping("/update")
public JsonResult updateTestcase(@RequestBody Testcase testcase) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
Boolean updateResult = testcaseService.updateById(testcase);
return JsonResult.success(updateResult);
}
@GetMapping("/delete")
public JsonResult deleteTestcase(Integer id) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
return JsonResult.success(testcaseService.removeById(id));
}
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class Assertion {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer testcaseId;
private String comparator;
private String path;
private String expect;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class Extraction {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer testcaseId;
private String path;
private String varName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 接口实体类
*/
@Data
public class Interface {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 接口名称
*/
private String name;
/**
* 接口路径
*/
private String url;
/**
* 请求方法
*/
private String method;
/**
* 参数类型
*/
private String paramsType;
private Integer moduleId;
private Integer projectId;
/**
* 创建者
*/
private String author;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
private String projectName;
@TableField(exist = false)
private String moduleName;
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 模块实体类
*/
@Data
public class Module {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private Integer projectId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 项目实体类
*/
@Data
public class Project {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private String host;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.qaplatform.automation.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 用例实体类
*/
@Data
public class Testcase {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer interfaceId;
private String name;
@TableField(value = "type")
private Integer type;
private String headers;
@TableField(value = "params")
private String params;
private String author;
private Integer projectId;
private Integer moduleId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mmLss")
private Date updateTime;
@TableField(exist = false)
private String projectName;
@TableField(exist = false)
private String moduleName;
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Assertion;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface AssertionMapper extends BaseMapper<Assertion> {
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Extraction;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface ExtractionMapper extends BaseMapper<Extraction> {
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Interface;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
public interface InterfaceMapper extends BaseMapper<Interface> {
IPage<Interface> getInterfaceList(IPage<Interface> page, Integer projectId, Integer moduleId);
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Module;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface ModuleMapper extends BaseMapper<Module> {
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Project;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface ProjectMapper extends BaseMapper<Project> {
}
package cn.qg.qaplatform.automation.mapper;
import cn.qg.qaplatform.automation.domain.Testcase;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
public interface TestcaseMapper extends BaseMapper<Testcase> {
IPage<Testcase> getTestcaseList(IPage<Testcase> page, Integer projectId, Integer moduleId);
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Assertion;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AssertService extends IService<Assertion> {
Boolean assertResponse(Integer testcaseId, JSONObject response);
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Extraction;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ExtractionService extends IService<Extraction> {
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Interface;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 接口类
*/
public interface InterfaceService extends IService<Interface> {
IPage<Interface> getInterfaceList(Integer projectId, Integer moduleId, Integer pageNum, Integer pageSize);
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Module;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ModuleService extends IService<Module> {
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Project;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ProjectService extends IService<Project> {
}
package cn.qg.qaplatform.automation.service;
import cn.qg.qaplatform.automation.domain.Testcase;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.net.URISyntaxException;
public interface TestcaseService extends IService<Testcase> {
IPage<Testcase> getTestcaseList(Integer projectId, Integer moduleId, Integer pageNum, Integer pageSize);
JSONObject exexuteTestcase(Integer testcaseId) throws Exception;
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Assertion;
import cn.qg.qaplatform.automation.mapper.AssertionMapper;
import cn.qg.qaplatform.automation.service.AssertService;
import cn.qg.qaplatform.utils.assertion.assertUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class AssertServiceImpl extends ServiceImpl<AssertionMapper, Assertion> implements AssertService {
@Autowired
AssertionMapper assertionMapper;
@Override
public Boolean assertResponse(Integer testcaseId, JSONObject response) {
QueryWrapper<Assertion> assertionQueryWrapper = new QueryWrapper<>();
assertionQueryWrapper.eq("testcase_id", testcaseId);
List<Assertion> assertionList = assertionMapper.selectList(assertionQueryWrapper);
if (assertionList != null) {
for (Assertion assertion: assertionList) {
Boolean assertResult = assertUtil.assertJsonResponse(response, assertion.getComparator(), assertion.getPath(), assertion.getExpect());
if (!assertResult) {
log.info("断言失败,本次断言的内容为,对比符:" + assertion.getComparator() + ",检查项:" + assertion.getPath() + ",期望值:" + assertion.getExpect());
return false;
}
}
}
return true;
}
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Extraction;
import cn.qg.qaplatform.automation.mapper.ExtractionMapper;
import cn.qg.qaplatform.automation.service.ExtractionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class ExtractionServiceImpl extends ServiceImpl<ExtractionMapper, Extraction> implements ExtractionService {
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Interface;
import cn.qg.qaplatform.automation.mapper.InterfaceMapper;
import cn.qg.qaplatform.automation.service.InterfaceService;
import cn.qg.qaplatform.common.SwitchDataSource;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class InterfaceServiceImpl extends ServiceImpl<InterfaceMapper, Interface> implements InterfaceService {
@Autowired
InterfaceMapper interfaceMapper;
@Override
public IPage<Interface> getInterfaceList(Integer projectId, Integer moduleId, Integer pageNum, Integer pageSize) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
IPage<Interface> page = new Page<>(pageNum, pageSize);
return interfaceMapper.getInterfaceList(page, projectId, moduleId);
}
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Module;
import cn.qg.qaplatform.automation.mapper.ModuleMapper;
import cn.qg.qaplatform.automation.service.ModuleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class ModuleServiceImpl extends ServiceImpl<ModuleMapper, Module> implements ModuleService {
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Project;
import cn.qg.qaplatform.automation.mapper.ProjectMapper;
import cn.qg.qaplatform.automation.service.ProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
}
package cn.qg.qaplatform.automation.service.impl;
import cn.qg.qaplatform.automation.domain.Interface;
import cn.qg.qaplatform.automation.domain.Project;
import cn.qg.qaplatform.automation.domain.Testcase;
import cn.qg.qaplatform.automation.mapper.*;
import cn.qg.qaplatform.automation.service.TestcaseService;
import cn.qg.qaplatform.common.SwitchDataSource;
import cn.qg.qaplatform.utils.HttpClientUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class TestcaseServiceImpl extends ServiceImpl<TestcaseMapper, Testcase> implements TestcaseService {
@Autowired
TestcaseMapper testcaseMapper;
@Autowired
InterfaceMapper interfaceMapper;
@Autowired
ProjectMapper projectMapper;
@Override
public IPage<Testcase> getTestcaseList(Integer projectId, Integer moduleId, Integer pageNum, Integer pageSize) {
SwitchDataSource.dataSourceSwitch("localhost", "automation");
IPage<Testcase> page = new Page<>(pageNum, pageSize);
return testcaseMapper.getTestcaseList(page, projectId, moduleId);
}
/**
* 执行测试用例的方法
* @param testcaseId 测试用例id
* @return
*/
@Override
public JSONObject exexuteTestcase(Integer testcaseId) throws Exception {
Testcase testcase = testcaseMapper.selectById(testcaseId);
Interface interfaceEntity = interfaceMapper.selectById(testcase.getInterfaceId());
Project project = projectMapper.selectById(interfaceEntity.getProjectId());
String url = project.getHost().concat(interfaceEntity.getUrl());
JSONObject response = new JSONObject();
log.info("本次执行用例名为" + testcase.getName() + ", url为:" + url);
if (interfaceEntity.getMethod().equals("GET")) {
Map<String, Object> headers = JSON.parseObject(testcase.getHeaders(), HashMap.class);
Map<String, Object> params = JSON.parseObject(testcase.getParams(), HashMap.class);
response = HttpClientUtils.doGetReturnJson(url, params, headers);
return response;
} else if (interfaceEntity.getMethod().equals("POST")) {
Map<String, Object> headers = JSON.parseObject(testcase.getHeaders(), HashMap.class);
if (interfaceEntity.getParamsType().equals("form")) {
Map<String, Object> formData = JSON.parseObject(testcase.getParams(), HashMap.class);
response = HttpClientUtils.doPost(url, formData, headers);
return response;
} else if (interfaceEntity.getParamsType().equals("json")) {
JSONObject resposne = HttpClientUtils.doPostJson(url, testcase.getParams(), headers);
return resposne;
}
} else {
throw new Exception("请求方式不支持,当前只支持GET、POST请求!");
}
return null;
}
}
......@@ -154,5 +154,16 @@ public class SwitchDataSource {
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
if (namespace.equals("localhost")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.LOCALHOST.getUrl() + database + SUFFIX;
String dbKey = Namespace.LOCALHOST.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.LOCALHOST.getUsername());
druidDataSource.setPassword(Namespace.LOCALHOST.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
}
}
......@@ -32,7 +32,7 @@ import java.util.Map;
public class HttpLogAspect {
private static final Logger logger = LoggerFactory.getLogger(HttpLogAspect.class);
@Pointcut("execution(public * cn.qg.qaplatform.controller..*.*(..))")
@Pointcut("execution(public * cn.qg.qaplatform.*.controller..*.*(..))")
public void httpRequestLog() {}
/**
......
......@@ -11,7 +11,8 @@ public enum Namespace {
XYQB("xyqb", "xyqb","jdbc:mysql://172.17.5.5:32556/", "qa", "qatest"),
FE("fe", "fe", "jdbc:mysql://172.17.5.9:31024/", "qa", "qatest"),
VCC("vcc", "vcc", "jdbc:mysql://172.17.5.8:31110/", "qa", "qatest"),
VCC2("vcc2", "vcc2", "jdbc:mysql://172.17.5.12:30977/", "qa", "qatest");
VCC2("vcc2", "vcc2", "jdbc:mysql://172.17.5.12:30977/", "qa", "qatest"),
LOCALHOST("localhost", "localhost", "jdbc:mysql://127.0.0.1:3306/", "root", "123456");
private String key;
......
package cn.qg.qaplatform.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis-plus分页配置
*/
@Configuration
@MapperScan("cn.qg.qaplatform.*.mapper*")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
package cn.qg.qaplatform.utils;
import cn.qg.qaplatform.common.enums.ChannelEnum;
import cn.qg.qaplatform.zdata.enums.ChannelEnum;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
......
package cn.qg.qaplatform.utils.assertion;
import com.alibaba.fastjson.JSONObject;
public class assertUtil {
public static Boolean assertJsonResponse(JSONObject response, String comparator, String check, String expect) {
return true;
}
}
package cn.qg.qaplatform.controller;
package cn.qg.qaplatform.zdata.controller;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.enums.ChannelEnum;
import cn.qg.qaplatform.common.enums.FundEnum;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.service.LexinDataService;
import cn.qg.qaplatform.service.XyqbDataService;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.enums.ChannelEnum;
import cn.qg.qaplatform.zdata.enums.FundEnum;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.service.LexinDataService;
import cn.qg.qaplatform.zdata.service.XyqbDataService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.utils.EnumUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......
package cn.qg.qaplatform.controller;
package cn.qg.qaplatform.zdata.controller;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.domain.GenVccUser;
import cn.qg.qaplatform.service.VccDataService;
import cn.qg.qaplatform.zdata.domain.GenVccUser;
import cn.qg.qaplatform.zdata.service.VccDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......
package cn.qg.qaplatform.controller;
package cn.qg.qaplatform.zdata.controller;
import cn.qg.qaplatform.service.QueryLoanUserDataService;
import cn.qg.qaplatform.zdata.service.QueryLoanUserDataService;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.utils.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......
package cn.qg.qaplatform.controller;
package cn.qg.qaplatform.zdata.controller;
import cn.qg.qaplatform.common.JsonResult;
import cn.qg.qaplatform.common.enums.VccStatusEnum;
import cn.qg.qaplatform.domain.QueryVccUser;
import cn.qg.qaplatform.service.VccDataService;
import cn.qg.qaplatform.zdata.enums.VccStatusEnum;
import cn.qg.qaplatform.zdata.domain.QueryVccUser;
import cn.qg.qaplatform.zdata.service.VccDataService;
import cn.qg.qaplatform.utils.page.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......
package cn.qg.qaplatform.domain;
package cn.qg.qaplatform.zdata.domain;
import lombok.Data;
......
package cn.qg.qaplatform.domain;
package cn.qg.qaplatform.zdata.domain;
import lombok.Data;
......
package cn.qg.qaplatform.domain;
package cn.qg.qaplatform.zdata.domain;
import lombok.Data;
import java.util.Date;
@Data
public class GenVccUser {
/**
......
package cn.qg.qaplatform.domain;
package cn.qg.qaplatform.zdata.domain;
import lombok.Data;
import java.util.Date;
......
package cn.qg.qaplatform.domain;
package cn.qg.qaplatform.zdata.domain;
import lombok.Data;
......
package cn.qg.qaplatform.common.enums;
package cn.qg.qaplatform.zdata.enums;
/**
* 渠道枚举
......
package cn.qg.qaplatform.common.enums;
package cn.qg.qaplatform.zdata.enums;
/**
* 资方枚举
......
package cn.qg.qaplatform.common.enums;
package cn.qg.qaplatform.zdata.enums;
/**
* 借款状态枚举
......
package cn.qg.qaplatform.dao;
package cn.qg.qaplatform.zdata.mapper;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.domain.QueryLoanUser;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.domain.QueryLoanUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......
package cn.qg.qaplatform.dao;
package cn.qg.qaplatform.zdata.mapper;
import cn.qg.qaplatform.domain.QueryVccUser;
import cn.qg.qaplatform.zdata.domain.QueryVccUser;
import java.util.List;
......
package cn.qg.qaplatform.dao;
package cn.qg.qaplatform.zdata.mapper;
public interface RuleEngineMapper {
......
package cn.qg.qaplatform.process;
package cn.qg.qaplatform.zdata.process;
import cn.qg.qaplatform.config.WebSocketServer;
import cn.qg.qaplatform.utils.DBUtils;
......
package cn.qg.qaplatform.process;
package cn.qg.qaplatform.zdata.process;
import cn.qg.qaplatform.config.WebSocketServer;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
import cn.qg.qaplatform.utils.Encrypt.LexinEncrypt;
import cn.qg.qaplatform.utils.HttpClientUtils;
import com.alibaba.fastjson.JSONObject;
......
package cn.qg.qaplatform.process;
package cn.qg.qaplatform.zdata.process;
import cn.qg.qaplatform.utils.DBUtils;
import cn.qg.qaplatform.utils.EncryptUtils;
......@@ -17,7 +17,6 @@ import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
......@@ -55,6 +54,8 @@ public class Vcc {
header.put("Authorization", verification);
JSONObject result = HttpClientUtils.doPost(url, params, header);
Map<String, String> map = (Map<String, String>) result.get("data");
log.info("登录参数:" + params);
log.info("登录结果:" + result);
return map;
}
......@@ -67,6 +68,7 @@ public class Vcc {
headers.put("x-auth-token", token);
headers.put("vccchannel", vccChannel);
JSONObject result = HttpClientUtils.doGetReturnJson(url, null, headers);
log.info("creaditUrl结果:" + result);
Map<String, String> data = (Map) result.get("data");
String returnUrl = data.get("url");
String vccToken = returnUrl.split("=")[1];
......
package cn.qg.qaplatform.process;
package cn.qg.qaplatform.zdata.process;
import cn.qg.qaplatform.config.WebSocketServer;
import cn.qg.qaplatform.utils.DBUtils;
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
/**
* 乐信数据
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.domain.QueryLoanUser;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.domain.QueryLoanUser;
import java.util.List;
import java.util.Map;
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
/**
* 查询造数据流程中的状态
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
import cn.qg.qaplatform.utils.page.PageResult;
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
/**
* 风控相关接口
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
import cn.qg.qaplatform.domain.GenVccUser;
import cn.qg.qaplatform.domain.QueryVccUser;
import cn.qg.qaplatform.zdata.domain.GenVccUser;
import cn.qg.qaplatform.zdata.domain.QueryVccUser;
import cn.qg.qaplatform.utils.page.PageResult;
......
package cn.qg.qaplatform.service;
package cn.qg.qaplatform.zdata.service;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import java.io.IOException;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.common.enums.ChannelEnum;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.process.Common;
import cn.qg.qaplatform.process.Lexin;
import cn.qg.qaplatform.process.Xyqb;
import cn.qg.qaplatform.service.QueryInProcessStatusService;
import cn.qg.qaplatform.service.LexinDataService;
import cn.qg.qaplatform.zdata.enums.ChannelEnum;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.process.Common;
import cn.qg.qaplatform.zdata.process.Lexin;
import cn.qg.qaplatform.zdata.process.Xyqb;
import cn.qg.qaplatform.zdata.service.QueryInProcessStatusService;
import cn.qg.qaplatform.zdata.service.LexinDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.common.enums.LoanStatus;
import cn.qg.qaplatform.zdata.enums.LoanStatus;
import cn.qg.qaplatform.common.enums.Namespace;
import cn.qg.qaplatform.dao.QueryBasicLoanStatusDataMapper;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.domain.QueryLoanUser;
import cn.qg.qaplatform.zdata.mapper.QueryBasicLoanStatusDataMapper;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.domain.QueryLoanUser;
import cn.qg.qaplatform.common.SwitchDataSource;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.config.WebSocketServer;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.service.QueryInProcessStatusService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.service.QueryInProcessStatusService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.domain.QueryLoanUser;
import cn.qg.qaplatform.service.QueryLoanUserDataService;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.domain.QueryLoanUser;
import cn.qg.qaplatform.zdata.service.QueryLoanUserDataService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.utils.page.PageResult;
import cn.qg.qaplatform.utils.page.PageUtil;
import com.github.pagehelper.PageHelper;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.common.SwitchDataSource;
import cn.qg.qaplatform.dao.RuleEngineMapper;
import cn.qg.qaplatform.service.RuleEngineService;
import cn.qg.qaplatform.zdata.mapper.RuleEngineMapper;
import cn.qg.qaplatform.zdata.service.RuleEngineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.common.SwitchDataSource;
import cn.qg.qaplatform.common.enums.VccStatusEnum;
import cn.qg.qaplatform.dao.QueryVccDataMapper;
import cn.qg.qaplatform.domain.GenVccUser;
import cn.qg.qaplatform.domain.QueryVccUser;
import cn.qg.qaplatform.process.Vcc;
import cn.qg.qaplatform.service.RuleEngineService;
import cn.qg.qaplatform.service.VccDataService;
import cn.qg.qaplatform.zdata.enums.VccStatusEnum;
import cn.qg.qaplatform.zdata.mapper.QueryVccDataMapper;
import cn.qg.qaplatform.zdata.domain.GenVccUser;
import cn.qg.qaplatform.zdata.domain.QueryVccUser;
import cn.qg.qaplatform.zdata.process.Vcc;
import cn.qg.qaplatform.zdata.service.RuleEngineService;
import cn.qg.qaplatform.zdata.service.VccDataService;
import cn.qg.qaplatform.utils.page.PageResult;
import cn.qg.qaplatform.utils.page.PageUtil;
import com.alibaba.fastjson.JSONObject;
......
package cn.qg.qaplatform.service.impl;
package cn.qg.qaplatform.zdata.service.impl;
import cn.qg.qaplatform.config.WebSocketServer;
import cn.qg.qaplatform.domain.ApplyDataVo;
import cn.qg.qaplatform.domain.GenLoanUser;
import cn.qg.qaplatform.process.Xyqb;
import cn.qg.qaplatform.service.QueryInProcessStatusService;
import cn.qg.qaplatform.service.XyqbDataService;
import cn.qg.qaplatform.service.QueryBasicLoanStatusDataService;
import cn.qg.qaplatform.zdata.domain.ApplyDataVo;
import cn.qg.qaplatform.zdata.domain.GenLoanUser;
import cn.qg.qaplatform.zdata.process.Xyqb;
import cn.qg.qaplatform.zdata.service.QueryInProcessStatusService;
import cn.qg.qaplatform.zdata.service.XyqbDataService;
import cn.qg.qaplatform.zdata.service.QueryBasicLoanStatusDataService;
import com.alibaba.fastjson.JSONException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......
......@@ -25,8 +25,8 @@ server:
# mybatis-plus 配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cn.qg.qaplatform.domain
mapper-locations: classpath:mapper/*/*.xml
type-aliases-package: cn.qg.qaplatform.*.domain
configuration:
map-underscore-to-camel-case: true
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.automation.mapper.InterfaceMapper">
<select id="getInterfaceList" resultType="cn.qg.qaplatform.automation.domain.Interface">
select i.*,
p.name as projectName,
m.name as moduleName
from interface i, project p, `module` m
where i.project_id = p.id and i.module_id = m.id
<if test="projectId != null">
AND i.`project_id` = #{projectId}
</if>
<if test="moduleId != null">
AND i.`module_id` = #{moduleId}
</if>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.automation.mapper.TestcaseMapper">
<select id="getTestcaseList" resultType="cn.qg.qaplatform.automation.domain.Testcase">
select t.*,
p.name as projectName,
m.name as moduleName
from testcase t, `interface` i, `project` p, `module` m
where t.`interface_id` = i.`id` and i.`project_id` = p.id and i.`module_id` = m.id
<if test="projectId != null">
AND i.`project_id` = #{projectId}
</if>
<if test="moduleId != null">
AND i.`module_id` = #{moduleId}
</if>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.dao.QueryBasicLoanStatusDataMapper">
<mapper namespace="cn.qg.qaplatform.zdata.mapper.QueryBasicLoanStatusDataMapper">
<!-- 注册未申请 -->
<select id="getUnApplyLoanUserUuidList" resultType="java.lang.String">
SELECT `uuid` FROM `apply_list`
......@@ -13,7 +13,7 @@
</select>
<!-- 根据uuidList获取用户信息列表 -->
<select id="getUserDataListByUuidList" parameterType="java.util.List" resultType="cn.qg.qaplatform.domain.QueryLoanUser">
<select id="getUserDataListByUuidList" parameterType="java.util.List" resultType="cn.qg.qaplatform.zdata.domain.QueryLoanUser">
SELECT `id` as userId, `phone_no` as phoneNo, `uuid`, `registered_from` as registeredFrom, `enable`, `created_at` as createdAt FROM `user`
where `uuid` in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
......@@ -28,7 +28,7 @@
</select>
<!-- 根据userIdList获取用户信息List -->
<select id="getUserDataListByUserIdList" resultType="cn.qg.qaplatform.domain.QueryLoanUser">
<select id="getUserDataListByUserIdList" resultType="cn.qg.qaplatform.zdata.domain.QueryLoanUser">
SELECT `id` as userId, `uuid`, `phone_no` as phoneNo, `registered_from` as registeredFrom, `enable`, `created_at` as createdAt FROM `user`
where `id` in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
......@@ -94,7 +94,7 @@
</select>
<!-- 根据手机号获取用户信息-->
<select id="getUserInfoByPhoneNo" resultType="cn.qg.qaplatform.domain.GenLoanUser">
<select id="getUserInfoByPhoneNo" resultType="cn.qg.qaplatform.zdata.domain.GenLoanUser">
SELECT `id` as userId, `phone_no` as phoneNo, `uuid`, `registered_from` as registeredFrom, `created_at` as createdAt FROM `user`
WHERE `phone_no` = #{phoneNo}
</select>
......
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.dao.QueryVccDataMapper">
<mapper namespace="cn.qg.qaplatform.zdata.mapper.QueryVccDataMapper">
<select id="queryVccDataByStatus" resultType="cn.qg.qaplatform.domain.QueryVccUser">
<select id="queryVccDataByStatus" resultType="cn.qg.qaplatform.zdata.domain.QueryVccUser">
select
`phone_no` as phoneNo,
`user_id` as userId,
......@@ -18,7 +18,7 @@
order by id desc
</select>
<select id="queryUserVccStatus" resultType="cn.qg.qaplatform.domain.QueryVccUser">
<select id="queryUserVccStatus" resultType="cn.qg.qaplatform.zdata.domain.QueryVccUser">
select
`phone_no` as phoneNo,
`user_id` as userId,
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.dao.RuleEngineMapper">
<mapper namespace="cn.qg.qaplatform.zdata.mapper.RuleEngineMapper">
<insert id="addBlackList">
INSERT INTO `black_list_config` (`uuid`, `expir_date`, `type`, `enable`) VALUES (#{uuid}, '14', '0', '1');
......
package cn.qg.qaplatform.test;
import cn.qg.qaplatform.process.Common;
import cn.qg.qaplatform.process.Xyqb;
import cn.qg.qaplatform.zdata.process.Common;
import cn.qg.qaplatform.zdata.process.Xyqb;
import cn.qg.qaplatform.utils.DBUtils;
import cn.qg.qaplatform.utils.Encrypt.LexinEncrypt;
import cn.qg.qaplatform.utils.HttpClientUtils;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment