Commit a27585b4 authored by 黎博's avatar 黎博

Merge branch 'master' into k8s

parents 6c22fb7f 48807eb7
package cn.qg.holmes.config; package cn.qg.holmes.config;
import cn.qg.holmes.interceptor.LanzhouBankInterceptor;
import cn.qg.holmes.interceptor.RuleEngineInterceptor; import cn.qg.holmes.interceptor.RuleEngineInterceptor;
import cn.qg.holmes.interceptor.XinchengInterceptor; import cn.qg.holmes.interceptor.XinchengInterceptor;
import cn.qg.holmes.interceptor.YeebaoInterceptor; import cn.qg.holmes.interceptor.YeebaoInterceptor;
...@@ -29,10 +30,16 @@ public class InterceptorConfig implements WebMvcConfigurer { ...@@ -29,10 +30,16 @@ public class InterceptorConfig implements WebMvcConfigurer {
return new XinchengInterceptor(); return new XinchengInterceptor();
} }
@Bean
public LanzhouBankInterceptor lanzhouBankInterceptor() {
return new LanzhouBankInterceptor();
}
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(yeebaoInterceptor()).addPathPatterns("/tzt-api/**", "/balance-board/**"); registry.addInterceptor(yeebaoInterceptor()).addPathPatterns("/tzt-api/**", "/balance-board/**");
registry.addInterceptor(ruleEngineInterceptor()).addPathPatterns("/rule_engine/**"); registry.addInterceptor(ruleEngineInterceptor()).addPathPatterns("/rule_engine/**", "/ex/isInWhiteList");
registry.addInterceptor(xinchengInterceptor()).addPathPatterns("/webservice/api/lhp/**"); registry.addInterceptor(xinchengInterceptor()).addPathPatterns("/webservice/api/lhp/**");
registry.addInterceptor(lanzhouBankInterceptor()).addPathPatterns("/api/service/lhp");
} }
} }
package cn.qg.holmes.encrypt;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.UUID;
/**
* Created by Baiye on 25/01/2019.
*
* @author Baiye
*/
@SuppressWarnings("ALL")
public class LanzhouBankEncrypt {
private static Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
/**
* 使用指定的字符串生成秘钥
*
* @param password
* @throws NoSuchAlgorithmException
*/
private static String getRandomKey(String password) throws NoSuchAlgorithmException {
//生成秘钥
String s = "";
KeyGenerator kg = KeyGenerator.getInstance("AES");
// kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256
//SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以生成的秘钥就一样。
kg.init(128, new SecureRandom(password.getBytes()));
SecretKey sk = kg.generateKey();
byte[] b = sk.getEncoded();
s = byteToHexString(b);
return s;
}
/**
* 使用指定的字符串生成秘钥
*
* @throws NoSuchAlgorithmException
*/
private static String getRandomKey() throws NoSuchAlgorithmException {
return getRandomKey(UUID.randomUUID().toString());
}
/**
* 十六进制string转二进制byte[]
*/
private static byte[] hexStringToByte(String s) throws DecoderException {
return Hex.decodeHex(s);
}
/**
* 二进制byte[]转十六进制string
*/
private static String byteToHexString(byte[] bytes) {
return Hex.encodeHexString(bytes);
}
private static String rsapubKeyEnc(String content, String pubKey) throws IOException {
InputStream is = null;
try {
KeyFactory keyf = KeyFactory.getInstance("RSA");
//获取公钥
is = new ByteArrayInputStream(pubKey.getBytes("utf-8"));
byte[] pubbytes = new byte[new Long(pubKey.length()).intValue()];
is.read(pubbytes);
X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(Base64.decodeBase64(pubbytes));
PublicKey pkey = keyf.generatePublic(pubX509);
//公钥加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pkey);
byte[] cipherText = cipher.doFinal(content.getBytes());
// 将加密结果转换为Base64编码结果;便于internet传送
return Base64.encodeBase64String(cipherText);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if (is != null) {
is.close();
}
}
}
private static byte[] aesEncrypt(byte[] key, byte[] src) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return cipher.doFinal(src);
}
private static byte[] aesDecrypt(byte[] key, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
return cipher.doFinal(encrypted);
}
/**
* RSA私钥解密
*
* @param ciphertext 经BASE84编码过的待解密密文
* @param privKey RSA私钥
* @return utf-8编码的明文
*/
private static String rsaprivKeyDec(String ciphertext, String privKey) {
try {
KeyFactory keyf = KeyFactory.getInstance("RSA");
// 获取私钥
InputStream key = new ByteArrayInputStream(privKey.getBytes("utf-8"));
byte[] pribytes = new byte[new Long(privKey.length()).intValue()];
key.read(pribytes);
byte[] buffer = Base64.decodeBase64(pribytes);
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(buffer);
PrivateKey prikey = keyf.generatePrivate(priPKCS8);
//私钥解密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, prikey);
byte[] text = Base64.decodeBase64(ciphertext);
byte[] content = cipher.doFinal(text);
return new String(content, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 易贷云申请报文加密
*
* @param requestMessage 申请信息报文
* @param publicKey 加密私钥
* @return String[] 返回数组,数组下表0为加密信息 数组下表1为加密密钥
* @throws Exception
*/
public static String[] encrypt(byte[] requestMessage, String publicKey) {
try {
String[] byteReturn = new String[2];
//获得随机密钥信息
String randomKey = getRandomKey();
byte[] encodeMessageByte = aesEncrypt(hexStringToByte(randomKey), requestMessage);
String eMessage = byteToHexString(encodeMessageByte);
String signature = rsapubKeyEnc(randomKey, publicKey);
byteReturn[0] = eMessage;
byteReturn[1] = signature;
return byteReturn;
} catch (Exception e) {
throw new RuntimeException("加密异常", e);
}
}
/**
* 易贷云申请报文解密
*
* @param message 申请信息
* @param signature 密钥
* @return String 返回解密的信息明文
* @throws Exception
*/
public static String decrypt(String message, String signature, String privateKey) {
String dKey = rsaprivKeyDec(signature, privateKey);
byte[] stringByte;
try {
stringByte = aesDecrypt(hexStringToByte(dKey), hexStringToByte(message));
} catch (Exception e) {
throw new RuntimeException("解密失败", e);
}
return new String(stringByte, DEFAULT_CHARSET);
}
/***
* MD5加码 生成32位md5码
*/
public static String MD5(String inStr) {
return DigestUtils.md5Hex(inStr);
}
}
package cn.qg.holmes.entity.lanzhou;
import cn.qg.holmes.encrypt.LanzhouBankEncrypt;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.Date;
@Slf4j
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BaseReq<T> {
/**
* 调用的终端类型
*/
private String transcode;
/**
* 交易代码
*/
private String sysid;
/**
* 交易时间
*/
private String transtime;
private String sign;
/**
* 终端类型
* PC
* WECHAT
* ANDROID
* IOS
*/
private String deviceType = "PC";
@JSONField(name = "RequestParams")
private T t;
public BaseReq(T t, String transcode, String md5key, String publicKey, String sysId) {
this.t = t;
this.transcode = transcode;
this.transtime = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
this.sysid = sysId;
this.sign = getSign(md5key);
}
public String getSign(String md5key) {
return LanzhouBankEncrypt.MD5(sysid + "|" + transtime + "|" + md5key);
}
}
package cn.qg.holmes.entity.lanzhou;
import lombok.Data;
@Data
public class BaseResp<T> {
private T result;
private boolean issuccess;
private String rtncode;
private String rtnmessage;
private String solution;
}
...@@ -7,6 +7,10 @@ import java.util.HashMap; ...@@ -7,6 +7,10 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/**
* 拦截器公共方法
* @author libo
*/
public class InterceptorUtils { public class InterceptorUtils {
/** /**
......
package cn.qg.holmes.interceptor;
import cn.qg.holmes.encrypt.LanzhouBankEncrypt;
import cn.qg.holmes.entity.lanzhou.BaseReq;
import cn.qg.holmes.entity.lanzhou.BaseResp;
import cn.qg.holmes.entity.mock.Mock;
import cn.qg.holmes.entity.mock.MockModule;
import cn.qg.holmes.mapper.mock.MockMapper;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
* 兰银mock拦截器
*/
@Slf4j
public class LanzhouBankInterceptor implements HandlerInterceptor {
@Value("${lanzhou.fund.public.key}")
private String lanzhouPublicKey;
@Value("${lanzhou.lhp.private.key}")
private String lhpPrivateKey;
@Autowired
MockMapper mockMapper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
String uri = request.getRequestURI();
log.info("收到兰银{}接口请求:", uri);
Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, Object> requestJson = InterceptorUtils.convertParameterMap(parameterMap);
String requestMessage = LanzhouBankEncrypt.decrypt(requestJson.get("message").toString(), requestJson.get("signature").toString(), lhpPrivateKey);
Map<String, Object> responseMap = new HashMap<>();
if (StringUtils.isNotBlank(requestMessage)) {
BaseReq<Map<String, String>> req = JSON.parseObject(requestMessage, BaseReq.class);
QueryWrapper<Mock> mockQueryWrapper = new QueryWrapper<>();
mockQueryWrapper.eq("url", uri);
Mock mock = mockMapper.selectOne(mockQueryWrapper);
if (req.getTranscode().equals("channel.common.queryapplyresult")) {
// 资方预审结果查询
Map<String, String> params = req.getT();
responseMap.put("channelserialno", params.get("channelserialno"));
responseMap.put("producttype", params.get("producttype"));
String submitflag = "10";
if (mock.getFlag() == 1) {
submitflag = JSON.parseObject(mock.getSuccess(), Map.class).get("submitflag").toString();
} else if (mock.getFlag() == 0) {
submitflag = JSON.parseObject(mock.getFail(), Map.class).get("submitflag").toString();
}
responseMap.put("submitflag", submitflag); // 10-授信成功,04-授信失败,03-处理中
} else if (req.getTranscode().equals("channel.common.querybusinessrate")) {
Double businessrate = 0.36;
if (mock.getFlag() == 1) {
businessrate = Double.parseDouble(JSON.parseObject(mock.getSuccess(), Map.class).get("businessrate").toString());
} else if (mock.getFlag() == 0) {
businessrate = Double.parseDouble(JSON.parseObject(mock.getFail(), Map.class).get("businessrate").toString());
}
// 利率查询接口
responseMap.put("businessrate", businessrate);
} else {
responseMap.put("msg", "接口mock暂不支持!");
}
BaseResp<Map<String, Object>> resp = new BaseResp();
resp.setResult(responseMap);
resp.setIssuccess(true);
resp.setRtncode("0000");
resp.setRtnmessage("请求成功");
String[] messageArray = LanzhouBankEncrypt.encrypt(JSON.toJSONString(resp).getBytes(), lanzhouPublicKey);
Map<String, String> respStr = new HashMap<>();
respStr.put("message", messageArray[0]);
respStr.put("signature", messageArray[1]);
InterceptorUtils.constructResponse(response, JSON.toJSONString(respStr), "application/json; charset=utf-8");
return false;
}
log.info("兰银请求异常!");
InterceptorUtils.constructResponse(response, null, "application/json; charset=utf-8");
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) {
}
}
...@@ -31,6 +31,9 @@ public class RuleEngineInterceptor implements HandlerInterceptor { ...@@ -31,6 +31,9 @@ public class RuleEngineInterceptor implements HandlerInterceptor {
@Value("${early.settle.channel}") @Value("${early.settle.channel}")
private String earlySettleChannel; private String earlySettleChannel;
@Value("${xyqb.isInWhiteList}")
private String xyqbIsInWhiteList;
public Map<String, Object> convertParameterMap(Map<String, String[]> parameterMap) { public Map<String, Object> convertParameterMap(Map<String, String[]> parameterMap) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, String[]> entry: parameterMap.entrySet()) { for (Map.Entry<String, String[]> entry: parameterMap.entrySet()) {
...@@ -44,6 +47,22 @@ public class RuleEngineInterceptor implements HandlerInterceptor { ...@@ -44,6 +47,22 @@ public class RuleEngineInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String uri = request.getRequestURI(); String uri = request.getRequestURI();
// 多订单白名单mock
if (uri.equals("/ex/isInWhiteList")) {
Map<String, Object> whiteListResult = new HashMap<>();
if (xyqbIsInWhiteList.equals("true")) {
whiteListResult.put("code", 0);
whiteListResult.put("businessCode", "0000");
whiteListResult.put("msg", "命中");
} else if (xyqbIsInWhiteList.equals("false")) {
whiteListResult.put("code", 0);
whiteListResult.put("businessCode", "0001");
whiteListResult.put("msg", "未命中");
}
whiteListResult.put("body", null);
InterceptorUtils.constructResponse(response, JSON.toJSONString(whiteListResult), "application/json; charset=utf-8");
return false;
}
Map<String, String[]> parameterMap = request.getParameterMap(); Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, Object> requestMap = convertParameterMap(parameterMap); Map<String, Object> requestMap = convertParameterMap(parameterMap);
QueryWrapper<Mock> queryWrapper = new QueryWrapper<>(); QueryWrapper<Mock> queryWrapper = new QueryWrapper<>();
...@@ -77,11 +96,17 @@ public class RuleEngineInterceptor implements HandlerInterceptor { ...@@ -77,11 +96,17 @@ public class RuleEngineInterceptor implements HandlerInterceptor {
public Map<String, Object> handleRiskAudit(Map<String, Object> requestMap, Map<String, Object> auditData) { public Map<String, Object> handleRiskAudit(Map<String, Object> requestMap, Map<String, Object> auditData) {
Map<String, Object> bodyMap = new HashMap<>(); Map<String, Object> bodyMap = new HashMap<>();
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
String bizType = requestMap.get("bizType").toString(); String bizType = null;
if (requestMap.containsKey("bizType")) {
bizType = requestMap.get("bizType").toString();
}
String bizChannel = requestMap.get("bizChannel").toString(); String bizChannel = requestMap.get("bizChannel").toString();
String uuid = requestMap.get("uuid").toString();
String bizNo = requestMap.get("bizNo").toString();
String sceneId = requestMap.get("sceneId").toString(); String sceneId = requestMap.get("sceneId").toString();
String uuid = requestMap.get("uuid").toString();
String bizNo = null;
if (requestMap.containsKey("bizNo")) {
bizNo = requestMap.get("bizNo").toString();
}
resultMap.put("code", 0); resultMap.put("code", 0);
resultMap.put("msg", "success"); resultMap.put("msg", "success");
bodyMap.put("msg", "success"); bodyMap.put("msg", "success");
...@@ -135,6 +160,10 @@ public class RuleEngineInterceptor implements HandlerInterceptor { ...@@ -135,6 +160,10 @@ public class RuleEngineInterceptor implements HandlerInterceptor {
// vcc账户解冻审核 // vcc账户解冻审核
if (sceneId.equals("9")) { if (sceneId.equals("9")) {
}
// 10-业务挡板审核(同步)
if (sceneId.equals("10")) {
bodyMap.put("auditResult", true);
} }
// vcc账单分期审核, sceneId=11 // vcc账单分期审核, sceneId=11
if (bizType.equals("8") && sceneId.equals("11")) { if (bizType.equals("8") && sceneId.equals("11")) {
...@@ -148,10 +177,7 @@ public class RuleEngineInterceptor implements HandlerInterceptor { ...@@ -148,10 +177,7 @@ public class RuleEngineInterceptor implements HandlerInterceptor {
} }
// 提前结清审核,如果渠道不在apollo配置里,则审核拒绝 // 提前结清审核,如果渠道不在apollo配置里,则审核拒绝
if (sceneId.equals("14")) { if (sceneId.equals("14")) {
String[] earlySettleChannelArray = earlySettleChannel.split(","); bodyMap.put("auditResult", auditData.get("earlySettle"));
if (!Arrays.asList(earlySettleChannelArray).contains(bizChannel)) {
bodyMap.put("auditResult", false);
}
} }
resultMap.put("body", bodyMap); resultMap.put("body", bodyMap);
return resultMap; return resultMap;
......
...@@ -12,7 +12,7 @@ public interface AutoUtilsService { ...@@ -12,7 +12,7 @@ public interface AutoUtilsService {
Map<String, String> replaceVariables(String parameters, UUID uuid); Map<String, String> replaceVariables(String parameters, UUID uuid);
Map<String, String> replaceVariablesNew(String parameters, Map<String, Object> globalMap); Map<String, String> replaceVariablesNew(String namespace, String parameters, Map<String, Object> globalMap);
boolean assertResponse(String response, List<Map> validateList); boolean assertResponse(String response, List<Map> validateList);
......
...@@ -53,11 +53,16 @@ public class AutoUtilsServiceImpl implements AutoUtilsService { ...@@ -53,11 +53,16 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
* @return * @return
*/ */
@Override @Override
public Map<String, String> replaceVariablesNew(String parameters, Map<String, Object> globalMap) { public Map<String, String> replaceVariablesNew(String namespace, String parameters, Map<String, Object> globalMap) {
Map<String, String> parameterMap = JSON.parseObject(parameters, Map.class); Map<String, String> parameterMap = JSON.parseObject(parameters, Map.class);
log.info("替换之前的参数:{}", parameterMap); log.info("替换之前的参数:{}", parameterMap);
for (String key: parameterMap.keySet()) { for (String key: parameterMap.keySet()) {
String value = parameterMap.get(key); String value = parameterMap.get(key);
// 新增${NAMESPACE}判断
if (value.contains("${NAMESPACE}")) {
value = value.replace("${NAMESPACE}", namespace);
parameterMap.put(key, value);
}
if (value.startsWith("$")) { if (value.startsWith("$")) {
parameterMap.put(key, globalMap.get(value.substring(1)).toString()); parameterMap.put(key, globalMap.get(value.substring(1)).toString());
} }
...@@ -108,7 +113,7 @@ public class AutoUtilsServiceImpl implements AutoUtilsService { ...@@ -108,7 +113,7 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
Map<String, String> extractMap = JSON.parseObject(extract, Map.class); Map<String, String> extractMap = JSON.parseObject(extract, Map.class);
for (String key: extractMap.keySet()) { for (String key: extractMap.keySet()) {
String value = extractMap.get(key); String value = extractMap.get(key);
String extractValue = ""; Object extractValue = "";
// 如果以$开头,则使用JsonPath解析 // 如果以$开头,则使用JsonPath解析
if (value.startsWith("$")) { if (value.startsWith("$")) {
extractValue = JsonPath.read(response, value); extractValue = JsonPath.read(response, value);
...@@ -185,9 +190,9 @@ public class AutoUtilsServiceImpl implements AutoUtilsService { ...@@ -185,9 +190,9 @@ public class AutoUtilsServiceImpl implements AutoUtilsService {
params.put("database", db); params.put("database", db);
params.put("sql", sql); params.put("sql", sql);
params.put("type", type); params.put("type", type);
log.info("开始执行SQL:{}", sql);
String url = "https://qa-platform-yxm.liangkebang.net/sql/execute"; String url = "https://qa-platform-yxm.liangkebang.net/sql/execute";
String result = HttpClientUtils.doGet(url, params); String result = HttpClientUtils.doGet(url, params);
log.info("开始执行SQL:{}", sql);
log.info("SQL返回结果:{}", result); log.info("SQL返回结果:{}", result);
// 只有select才需要加入Map // 只有select才需要加入Map
if (sql.startsWith("select") || sql.startsWith("SELECT")) { if (sql.startsWith("select") || sql.startsWith("SELECT")) {
......
...@@ -118,11 +118,11 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S ...@@ -118,11 +118,11 @@ public class SceneTestcaseServiceImpl extends ServiceImpl<SceneTestcaseMapper, S
Map<String, String> headersMap = JSON.parseObject(headers, Map.class); Map<String, String> headersMap = JSON.parseObject(headers, Map.class);
if (headers != null && !headers.isEmpty()) { if (headers != null && !headers.isEmpty()) {
// headersMap = autoUtilsService.replaceVariables(headers, uuid); // headersMap = autoUtilsService.replaceVariables(headers, uuid);
headersMap = autoUtilsService.replaceVariablesNew(headers, globalMap); headersMap = autoUtilsService.replaceVariablesNew(namespace, headers, globalMap);
} }
if (parameters != null && !parameters.isEmpty()) { if (parameters != null && !parameters.isEmpty()) {
// parameterMap = autoUtilsService.replaceVariables(parameters, uuid); // parameterMap = autoUtilsService.replaceVariables(parameters, uuid);
parameterMap = autoUtilsService.replaceVariablesNew(parameters, globalMap); parameterMap = autoUtilsService.replaceVariablesNew(namespace, parameters, globalMap);
} }
// 创建断言列表 // 创建断言列表
List<Map> validateList = new ArrayList<>(); List<Map> validateList = new ArrayList<>();
......
...@@ -124,7 +124,13 @@ public class TestcaseServiceImpl extends ServiceImpl<TestcaseMapper, Testcase> i ...@@ -124,7 +124,13 @@ public class TestcaseServiceImpl extends ServiceImpl<TestcaseMapper, Testcase> i
map.put("headers", headersMap); map.put("headers", headersMap);
map.put("parameters", parameterMap); map.put("parameters", parameterMap);
map.put("assertResult", assertResult); map.put("assertResult", assertResult);
map.put("response", JSON.parseObject(response, Map.class)); // 兼容response不是json的情况
try {
map.put("response", JSON.parseObject(response, Map.class));
} catch (Exception e) {
e.printStackTrace();
map.put("response", response);
}
map.put("elapsedTime", elapsedTime); map.put("elapsedTime", elapsedTime);
// 插入测试报告 // 插入测试报告
......
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