refactor: postman导入变量格式转换
This commit is contained in:
parent
3176446947
commit
cb61770480
|
@ -131,7 +131,8 @@ public abstract class ApiImportAbstractParser<T> implements ApiImportParser<T> {
|
||||||
private String formatPath(String url) {
|
private String formatPath(String url) {
|
||||||
try {
|
try {
|
||||||
URL urlObject = new URL(url);
|
URL urlObject = new URL(url);
|
||||||
StringBuffer pathBuffer = new StringBuffer(urlObject.getPath());
|
String path = StringUtils.isBlank(urlObject.getPath()) ? "/" : urlObject.getPath();
|
||||||
|
StringBuffer pathBuffer = new StringBuffer(path);
|
||||||
if (StringUtils.isNotEmpty(urlObject.getQuery())) {
|
if (StringUtils.isNotEmpty(urlObject.getQuery())) {
|
||||||
pathBuffer.append("?").append(urlObject.getQuery());
|
pathBuffer.append("?").append(urlObject.getQuery());
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,15 @@ import io.metersphere.api.dto.scenario.Body;
|
||||||
import io.metersphere.api.dto.scenario.KeyValue;
|
import io.metersphere.api.dto.scenario.KeyValue;
|
||||||
import io.metersphere.commons.constants.MsRequestBodyType;
|
import io.metersphere.commons.constants.MsRequestBodyType;
|
||||||
import io.metersphere.commons.constants.PostmanRequestBodyMode;
|
import io.metersphere.commons.constants.PostmanRequestBodyMode;
|
||||||
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractParser<T> {
|
public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractParser<T> {
|
||||||
|
@ -30,8 +33,7 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
MsHTTPSamplerProxy request = buildRequest(requestItem.getName(), url.getRaw(), requestDesc.getMethod());
|
MsHTTPSamplerProxy request = buildRequest(requestItem.getName(), url.getRaw(), requestDesc.getMethod());
|
||||||
if (StringUtils.isNotBlank(request.getPath())) {
|
if (StringUtils.isNotBlank(request.getPath())) {
|
||||||
String path = request.getPath().split("\\?")[0];
|
String path = request.getPath().split("\\?")[0];
|
||||||
path = path.replace("{{", "${");
|
path = parseVariable(path);
|
||||||
path = path.replace("}}", "}");
|
|
||||||
request.setPath(path);
|
request.setPath(path);
|
||||||
} else {
|
} else {
|
||||||
request.setPath("/");
|
request.setPath("/");
|
||||||
|
@ -45,6 +47,26 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将postman的变量转换成ms变量
|
||||||
|
* {{xxx}} -> ${xxx}
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String parseVariable(String value) {
|
||||||
|
try {
|
||||||
|
Pattern pattern = Pattern.compile("(\\{\\{(.*?)\\}\\})");
|
||||||
|
Matcher matcher = pattern.matcher(value);
|
||||||
|
while (matcher.find()) {
|
||||||
|
value = matcher.replaceFirst("\\$\\{" + matcher.group(2) + "\\}");
|
||||||
|
matcher = pattern.matcher(value);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
private void addPreScript(MsHTTPSamplerProxy request, List<PostmanEvent> event) {
|
private void addPreScript(MsHTTPSamplerProxy request, List<PostmanEvent> event) {
|
||||||
if (request != null && CollectionUtils.isNotEmpty(event)) {
|
if (request != null && CollectionUtils.isNotEmpty(event)) {
|
||||||
StringBuilder scriptStr = new StringBuilder();
|
StringBuilder scriptStr = new StringBuilder();
|
||||||
|
@ -68,7 +90,7 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
MsJSR223PreProcessor jsr223PreProcessor = new MsJSR223PreProcessor();
|
MsJSR223PreProcessor jsr223PreProcessor = new MsJSR223PreProcessor();
|
||||||
jsr223PreProcessor.setName("JSR223PreProcessor");
|
jsr223PreProcessor.setName("JSR223PreProcessor");
|
||||||
jsr223PreProcessor.setScriptLanguage("nashornScript");
|
jsr223PreProcessor.setScriptLanguage("nashornScript");
|
||||||
jsr223PreProcessor.setScript(scriptStr.toString());
|
jsr223PreProcessor.setScript(parseVariable(scriptStr.toString()));
|
||||||
LinkedList<MsTestElement> hashTree = new LinkedList<>();
|
LinkedList<MsTestElement> hashTree = new LinkedList<>();
|
||||||
hashTree.add(jsr223PreProcessor);
|
hashTree.add(jsr223PreProcessor);
|
||||||
request.setHashTree(hashTree);
|
request.setHashTree(hashTree);
|
||||||
|
@ -81,7 +103,12 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List<KeyValue> keyValues = new ArrayList<>();
|
List<KeyValue> keyValues = new ArrayList<>();
|
||||||
postmanKeyValues.forEach(item -> keyValues.add(new KeyValue(item.getKey(), item.getValue(), item.getDescription(), item.getContentType())));
|
postmanKeyValues.forEach(item -> {
|
||||||
|
String k = parseVariable(item.getKey());
|
||||||
|
String v = parseVariable(item.getValue());
|
||||||
|
String desc = parseVariable(item.getDescription());
|
||||||
|
keyValues.add(new KeyValue(k, v, desc, item.getContentType()));
|
||||||
|
});
|
||||||
return keyValues;
|
return keyValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +124,7 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.RAW.value())) {
|
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.RAW.value())) {
|
||||||
parseRawBody(body, postmanBody, bodyMode);
|
parseRawBody(body, postmanBody, bodyMode);
|
||||||
} else if (StringUtils.equalsAny(bodyMode, PostmanRequestBodyMode.FORM_DATA.value(), PostmanRequestBodyMode.URLENCODED.value())) {
|
} else if (StringUtils.equalsAny(bodyMode, PostmanRequestBodyMode.FORM_DATA.value(), PostmanRequestBodyMode.URLENCODED.value())) {
|
||||||
List<PostmanKeyValue> postmanKeyValues = JSON.parseArray(postmanBody.getString(bodyMode), PostmanKeyValue.class);
|
List<PostmanKeyValue> postmanKeyValues = JSON.parseArray(parseVariable(postmanBody.getString(bodyMode)), PostmanKeyValue.class);
|
||||||
body.setKvs(parseKeyValue(postmanKeyValues));
|
body.setKvs(parseKeyValue(postmanKeyValues));
|
||||||
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.FORM_DATA.value())) {
|
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.FORM_DATA.value())) {
|
||||||
body.setType(Body.FORM_DATA);
|
body.setType(Body.FORM_DATA);
|
||||||
|
@ -111,7 +138,7 @@ public abstract class PostmanAbstractParserParser<T> extends ApiImportAbstractPa
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseRawBody(Body body, JSONObject postmanBody, String bodyMode) {
|
private void parseRawBody(Body body, JSONObject postmanBody, String bodyMode) {
|
||||||
body.setRaw(postmanBody.getString(bodyMode));
|
body.setRaw(parseVariable(postmanBody.getString(bodyMode)));
|
||||||
body.setType(MsRequestBodyType.RAW.value());
|
body.setType(MsRequestBodyType.RAW.value());
|
||||||
JSONObject options = postmanBody.getJSONObject("options");
|
JSONObject options = postmanBody.getJSONObject("options");
|
||||||
if (options != null) {
|
if (options != null) {
|
||||||
|
|
Loading…
Reference in New Issue