fix(接口测试): Mock期望的后置脚本中增加对第三方jar包的调用
Mock期望的后置脚本中增加对第三方jar包的调用
This commit is contained in:
parent
bf5f8b5cbd
commit
3db22f6061
|
@ -2,11 +2,18 @@ package io.metersphere.api.mock.utils;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import io.metersphere.api.dto.mock.RequestMockParams;
|
import io.metersphere.api.dto.mock.RequestMockParams;
|
||||||
|
import io.metersphere.base.domain.JarConfig;
|
||||||
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
import io.metersphere.service.JarConfigService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngine;
|
||||||
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptEngineManager;
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -36,23 +43,66 @@ public class MockScriptEngineUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadJar(String jarPath) throws Exception {
|
||||||
|
File jarFile = new File(jarPath);
|
||||||
|
// 从URLClassLoader类中获取类所在文件夹的方法,jar也可以认为是一个文件夹
|
||||||
|
Method method = null;
|
||||||
|
try {
|
||||||
|
method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
|
||||||
|
} catch (NoSuchMethodException | SecurityException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
// 获取方法的访问权限以便写回
|
||||||
|
boolean accessible = method.isAccessible();
|
||||||
|
try {
|
||||||
|
method.setAccessible(true);
|
||||||
|
// 获取系统类加载器
|
||||||
|
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
|
||||||
|
URL url = jarFile.toURI().toURL();
|
||||||
|
method.invoke(classLoader, url);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
method.setAccessible(accessible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载jar包
|
||||||
|
*/
|
||||||
|
private void loadJars() {
|
||||||
|
JarConfigService jarConfigService = CommonBeanFactory.getBean(JarConfigService.class);
|
||||||
|
if (jarConfigService != null) {
|
||||||
|
List<JarConfig> jars = jarConfigService.list();
|
||||||
|
jars.forEach(jarConfig -> {
|
||||||
|
try {
|
||||||
|
this.loadJar(jarConfig.getPath());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtil.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ScriptEngine getBaseScriptEngine(String scriptLanguage, String url, Map<String, String> headerMap, RequestMockParams requestMockParams) {
|
public ScriptEngine getBaseScriptEngine(String scriptLanguage, String url, Map<String, String> headerMap, RequestMockParams requestMockParams) {
|
||||||
ScriptEngine engine = null;
|
ScriptEngine engine = null;
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isEmpty(scriptLanguage)) {
|
if (StringUtils.isEmpty(scriptLanguage)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
String preScript = "";
|
||||||
if (StringUtils.equalsIgnoreCase(scriptLanguage, "beanshell")) {
|
if (StringUtils.equalsIgnoreCase(scriptLanguage, "beanshell")) {
|
||||||
ScriptEngineManager scriptEngineFactory = new ScriptEngineManager();
|
ScriptEngineManager scriptEngineFactory = new ScriptEngineManager();
|
||||||
engine = scriptEngineFactory.getEngineByName(scriptLanguage);
|
engine = scriptEngineFactory.getEngineByName("beanshell");
|
||||||
String preScript = this.genBeanshellPreScript(url, headerMap, requestMockParams);
|
preScript = this.genBeanshellPreScript(url, headerMap, requestMockParams);
|
||||||
engine.eval(preScript);
|
|
||||||
} else if (StringUtils.equalsIgnoreCase(scriptLanguage, "python")) {
|
} else if (StringUtils.equalsIgnoreCase(scriptLanguage, "python")) {
|
||||||
ScriptEngineManager scriptEngineFactory = new ScriptEngineManager();
|
ScriptEngineManager scriptEngineFactory = new ScriptEngineManager();
|
||||||
engine = scriptEngineFactory.getEngineByName(scriptLanguage);
|
engine = scriptEngineFactory.getEngineByName(scriptLanguage);
|
||||||
String preScript = this.genPythonPreScript(url, headerMap, requestMockParams);
|
preScript = this.genPythonPreScript(url, headerMap, requestMockParams);
|
||||||
engine.eval(preScript);
|
|
||||||
}
|
}
|
||||||
|
this.loadJars();
|
||||||
|
engine.eval(preScript);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,8 @@ export default {
|
||||||
lineDivMarginTopHeight: 0,
|
lineDivMarginTopHeight: 0,
|
||||||
lineDivBottomHeight: 0,
|
lineDivBottomHeight: 0,
|
||||||
filterTypes: [
|
filterTypes: [
|
||||||
{id: 'And', label: 'And'},
|
{id: 'And', label: 'AND'},
|
||||||
{id: 'Or', label: 'Or'},
|
{id: 'Or', label: 'OR'},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue