Merge branch 'dev' of https://github.com/fit2cloudrd/metersphere-server into dev
This commit is contained in:
commit
ba22e480c8
|
@ -42,6 +42,10 @@ public class EngineContext {
|
||||||
this.properties.put(key, value);
|
this.properties.put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addProperties(Map<String, Object> props) {
|
||||||
|
this.properties.putAll(props);
|
||||||
|
}
|
||||||
|
|
||||||
public Object getProperty(String key) {
|
public Object getProperty(String key) {
|
||||||
return this.properties.get(key);
|
return this.properties.get(key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class EngineFactory {
|
||||||
engineContext.setThreadNum(threadNum);
|
engineContext.setThreadNum(threadNum);
|
||||||
engineContext.setResourcePoolId(loadTest.getTestResourcePoolId());
|
engineContext.setResourcePoolId(loadTest.getTestResourcePoolId());
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(loadTest.getLoadConfiguration())) {
|
if (StringUtils.isNotEmpty(loadTest.getLoadConfiguration())) {
|
||||||
final JSONArray jsonArray = JSONObject.parseArray(loadTest.getLoadConfiguration());
|
final JSONArray jsonArray = JSONObject.parseArray(loadTest.getLoadConfiguration());
|
||||||
|
|
||||||
for (int i = 0; i < jsonArray.size(); i++) {
|
for (int i = 0; i < jsonArray.size(); i++) {
|
||||||
|
@ -85,6 +85,13 @@ public class EngineFactory {
|
||||||
engineContext.addProperty(jsonObject.getString("key"), jsonObject.get("value"));
|
engineContext.addProperty(jsonObject.getString("key"), jsonObject.get("value"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
{"timeout":10,"statusCode":["302","301"],"params":[{"name":"param1","enable":true,"value":"0","edit":false}],"domains":[{"domain":"baidu.com","enable":true,"ip":"127.0.0.1","edit":false}]}
|
||||||
|
*/
|
||||||
|
if (StringUtils.isNotEmpty(loadTest.getAdvancedConfiguration())) {
|
||||||
|
JSONObject advancedConfiguration = JSONObject.parseObject(loadTest.getAdvancedConfiguration());
|
||||||
|
engineContext.addProperties(advancedConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
final EngineSourceParser engineSourceParser = EngineSourceParserFactory.createEngineSourceParser(engineContext.getFileType());
|
final EngineSourceParser engineSourceParser = EngineSourceParserFactory.createEngineSourceParser(engineContext.getFileType());
|
||||||
|
|
||||||
|
@ -95,6 +102,8 @@ public class EngineFactory {
|
||||||
try (ByteArrayInputStream source = new ByteArrayInputStream(fileContent.getFile())) {
|
try (ByteArrayInputStream source = new ByteArrayInputStream(fileContent.getFile())) {
|
||||||
String content = engineSourceParser.parse(engineContext, source);
|
String content = engineSourceParser.parse(engineContext, source);
|
||||||
engineContext.setContent(content);
|
engineContext.setContent(content);
|
||||||
|
} catch (Exception e) {
|
||||||
|
MSException.throwException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CollectionUtils.isNotEmpty(csvFiles)) {
|
if (CollectionUtils.isNotEmpty(csvFiles)) {
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package io.metersphere.parse.xml.reader.jmx;
|
package io.metersphere.parse.xml.reader.jmx;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.config.KafkaProperties;
|
import io.metersphere.config.KafkaProperties;
|
||||||
import io.metersphere.engine.EngineContext;
|
import io.metersphere.engine.EngineContext;
|
||||||
import io.metersphere.parse.xml.reader.DocumentParser;
|
import io.metersphere.parse.xml.reader.DocumentParser;
|
||||||
import org.junit.platform.commons.util.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
@ -16,6 +18,7 @@ import javax.xml.transform.TransformerFactory;
|
||||||
import javax.xml.transform.dom.DOMSource;
|
import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.transform.stream.StreamResult;
|
import javax.xml.transform.stream.StreamResult;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class JmeterDocumentParser implements DocumentParser {
|
public class JmeterDocumentParser implements DocumentParser {
|
||||||
private final static String HASH_TREE_ELEMENT = "hashTree";
|
private final static String HASH_TREE_ELEMENT = "hashTree";
|
||||||
|
@ -26,7 +29,9 @@ public class JmeterDocumentParser implements DocumentParser {
|
||||||
private final static String VARIABLE_THROUGHPUT_TIMER = "kg.apc.jmeter.timers.VariableThroughputTimer";
|
private final static String VARIABLE_THROUGHPUT_TIMER = "kg.apc.jmeter.timers.VariableThroughputTimer";
|
||||||
private final static String THREAD_GROUP = "ThreadGroup";
|
private final static String THREAD_GROUP = "ThreadGroup";
|
||||||
private final static String BACKEND_LISTENER = "BackendListener";
|
private final static String BACKEND_LISTENER = "BackendListener";
|
||||||
|
private final static String CONFIG_TEST_ELEMENT = "ConfigTestElement";
|
||||||
|
private final static String DNS_CACHE_MANAGER = "DNSCacheManager";
|
||||||
|
private final static String ARGUMENTS = "Arguments";
|
||||||
private EngineContext context;
|
private EngineContext context;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -79,6 +84,9 @@ public class JmeterDocumentParser implements DocumentParser {
|
||||||
parseHashTree(ele);
|
parseHashTree(ele);
|
||||||
} else if (nodeNameEquals(ele, TEST_PLAN)) {
|
} else if (nodeNameEquals(ele, TEST_PLAN)) {
|
||||||
processTearDownTestPlan(ele);
|
processTearDownTestPlan(ele);
|
||||||
|
processCheckoutConfigTestElement(ele);
|
||||||
|
processCheckoutDnsCacheManager(ele);
|
||||||
|
processCheckoutArguments(ele);
|
||||||
} else if (nodeNameEquals(ele, CONCURRENCY_THREAD_GROUP)) {
|
} else if (nodeNameEquals(ele, CONCURRENCY_THREAD_GROUP)) {
|
||||||
processConcurrencyThreadGroup(ele);
|
processConcurrencyThreadGroup(ele);
|
||||||
processCheckoutTimer(ele);
|
processCheckoutTimer(ele);
|
||||||
|
@ -93,12 +101,249 @@ public class JmeterDocumentParser implements DocumentParser {
|
||||||
processCheckoutBackendListener(ele);
|
processCheckoutBackendListener(ele);
|
||||||
} else if (nodeNameEquals(ele, BACKEND_LISTENER)) {
|
} else if (nodeNameEquals(ele, BACKEND_LISTENER)) {
|
||||||
processBackendListener(ele);
|
processBackendListener(ele);
|
||||||
|
} else if (nodeNameEquals(ele, CONFIG_TEST_ELEMENT)) {
|
||||||
|
processConfigTestElement(ele);
|
||||||
|
} else if (nodeNameEquals(ele, DNS_CACHE_MANAGER)) {
|
||||||
|
processDnsCacheManager(ele);
|
||||||
|
} else if (nodeNameEquals(ele, ARGUMENTS)) {
|
||||||
|
processArguments(ele);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processCheckoutArguments(Element ele) {
|
||||||
|
Node hashTree = ele.getNextSibling();
|
||||||
|
while (!(hashTree instanceof Element)) {
|
||||||
|
hashTree = hashTree.getNextSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeList childNodes = hashTree.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (nodeNameEquals(item, ARGUMENTS)) {
|
||||||
|
// 已经存在不再添加
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||||
|
<collectionProp name="Arguments.arguments">
|
||||||
|
<elementProp name="BASE_URL_1" elementType="Argument">
|
||||||
|
<stringProp name="Argument.name">BASE_URL_1</stringProp>
|
||||||
|
<stringProp name="Argument.value">rddev2.fit2cloud.com</stringProp>
|
||||||
|
<stringProp name="Argument.metadata">=</stringProp>
|
||||||
|
</elementProp>
|
||||||
|
</collectionProp>
|
||||||
|
</Arguments>
|
||||||
|
*/
|
||||||
|
|
||||||
|
Document document = ele.getOwnerDocument();
|
||||||
|
Element element = document.createElement(ARGUMENTS);
|
||||||
|
element.setAttribute("guiclass", "ArgumentsPanel");
|
||||||
|
element.setAttribute("testclass", "Arguments");
|
||||||
|
element.setAttribute("testname", "User Defined Variables");
|
||||||
|
element.setAttribute("enabled", "true");
|
||||||
|
Element collectionProp = document.createElement(COLLECTION_PROP);
|
||||||
|
collectionProp.setAttribute("name", "Arguments.arguments");
|
||||||
|
element.appendChild(collectionProp);
|
||||||
|
hashTree.appendChild(element);
|
||||||
|
// 空的 hashTree
|
||||||
|
hashTree.appendChild(document.createElement(HASH_TREE_ELEMENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processCheckoutDnsCacheManager(Element ele) {
|
||||||
|
Node hashTree = ele.getNextSibling();
|
||||||
|
while (!(hashTree instanceof Element)) {
|
||||||
|
hashTree = hashTree.getNextSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeList childNodes = hashTree.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (nodeNameEquals(item, DNS_CACHE_MANAGER)) {
|
||||||
|
// 已经存在不再添加
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
<DNSCacheManager guiclass="DNSCachePanel" testclass="DNSCacheManager" testname="DNS Cache Manager" enabled="true">
|
||||||
|
<collectionProp name="DNSCacheManager.servers"/>
|
||||||
|
<collectionProp name="DNSCacheManager.hosts">
|
||||||
|
<elementProp name="baiud.com" elementType="StaticHost">
|
||||||
|
<stringProp name="StaticHost.Name">baiud.com</stringProp>
|
||||||
|
<stringProp name="StaticHost.Address">172.16.10.187</stringProp>
|
||||||
|
</elementProp>
|
||||||
|
</collectionProp>
|
||||||
|
<boolProp name="DNSCacheManager.clearEachIteration">true</boolProp>
|
||||||
|
<boolProp name="DNSCacheManager.isCustomResolver">true</boolProp>
|
||||||
|
</DNSCacheManager>
|
||||||
|
*/
|
||||||
|
|
||||||
|
Document document = ele.getOwnerDocument();
|
||||||
|
Element element = document.createElement(DNS_CACHE_MANAGER);
|
||||||
|
element.setAttribute("guiclass", "DNSCachePanel");
|
||||||
|
element.setAttribute("testclass", "DNSCacheManager");
|
||||||
|
element.setAttribute("testname", "DNS Cache Manager");
|
||||||
|
element.setAttribute("enabled", "true");
|
||||||
|
Element collectionProp = document.createElement(COLLECTION_PROP);
|
||||||
|
collectionProp.setAttribute("name", "DNSCacheManager.servers");
|
||||||
|
element.appendChild(collectionProp);
|
||||||
|
|
||||||
|
Element collectionProp2 = document.createElement(COLLECTION_PROP);
|
||||||
|
collectionProp2.setAttribute("name", "DNSCacheManager.hosts");
|
||||||
|
element.appendChild(collectionProp2);
|
||||||
|
|
||||||
|
element.appendChild(createBoolProp(document, "DNSCacheManager.clearEachIteration", true));
|
||||||
|
element.appendChild(createBoolProp(document, "DNSCacheManager.isCustomResolver", true));
|
||||||
|
|
||||||
|
hashTree.appendChild(element);
|
||||||
|
// 空的 hashTree
|
||||||
|
hashTree.appendChild(document.createElement(HASH_TREE_ELEMENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processCheckoutConfigTestElement(Element ele) {
|
||||||
|
Node hashTree = ele.getNextSibling();
|
||||||
|
while (!(hashTree instanceof Element)) {
|
||||||
|
hashTree = hashTree.getNextSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeList childNodes = hashTree.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (nodeNameEquals(item, CONFIG_TEST_ELEMENT)) {
|
||||||
|
// 已经存在不再添加
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||||
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
||||||
|
<collectionProp name="Arguments.arguments"/>
|
||||||
|
</elementProp>
|
||||||
|
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.port"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.path"></stringProp>
|
||||||
|
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||||
|
<boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
|
||||||
|
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
|
||||||
|
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
|
||||||
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||||
|
</ConfigTestElement>
|
||||||
|
*/
|
||||||
|
Document document = ele.getOwnerDocument();
|
||||||
|
Element element = document.createElement(CONFIG_TEST_ELEMENT);
|
||||||
|
element.setAttribute("guiclass", "HttpDefaultsGui");
|
||||||
|
element.setAttribute("testclass", "ConfigTestElement");
|
||||||
|
element.setAttribute("testname", "HTTP Request Defaults");
|
||||||
|
element.setAttribute("enabled", "true");
|
||||||
|
Element elementProp = document.createElement("elementProp");
|
||||||
|
elementProp.setAttribute("name", "HTTPsampler.Arguments");
|
||||||
|
elementProp.setAttribute("elementType", "Arguments");
|
||||||
|
elementProp.setAttribute("guiclass", "HTTPArgumentsPanel");
|
||||||
|
elementProp.setAttribute("testclass", "Arguments");
|
||||||
|
elementProp.setAttribute("enabled", "true");
|
||||||
|
Element collectionProp = document.createElement(COLLECTION_PROP);
|
||||||
|
collectionProp.setAttribute("name", "Arguments.arguments");
|
||||||
|
elementProp.appendChild(collectionProp);
|
||||||
|
element.appendChild(elementProp);
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.domain", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.port", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.protocol", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.contentEncoding", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.path", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.concurrentPool", "6"));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.connect_timeout", ""));
|
||||||
|
element.appendChild(createStringProp(document, "HTTPSampler.response_timeout", ""));
|
||||||
|
element.appendChild(createBoolProp(document, "HTTPSampler.image_parser", true));
|
||||||
|
element.appendChild(createBoolProp(document, "HTTPSampler.concurrentDwn", true));
|
||||||
|
hashTree.appendChild(element);
|
||||||
|
// 空的 hashTree
|
||||||
|
hashTree.appendChild(document.createElement(HASH_TREE_ELEMENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processArguments(Element ele) {
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0; i < childNodes.getLength(); i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "collectionProp")) {
|
||||||
|
removeChildren(item);
|
||||||
|
Document document = item.getOwnerDocument();
|
||||||
|
Object params = context.getProperty("params");
|
||||||
|
if (params instanceof List) {
|
||||||
|
for (Object p : (List) params) {
|
||||||
|
JSONObject jsonObject = JSON.parseObject(p.toString());
|
||||||
|
if (!jsonObject.getBooleanValue("enable")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Element elementProp = document.createElement("elementProp");
|
||||||
|
elementProp.setAttribute("name", jsonObject.getString("name"));
|
||||||
|
elementProp.setAttribute("elementType", "Argument");
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.name", jsonObject.getString("name")));
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.value", jsonObject.getString("value")));
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.metadata", "="));
|
||||||
|
item.appendChild(elementProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processDnsCacheManager(Element ele) {
|
||||||
|
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "collectionProp")
|
||||||
|
&& org.apache.commons.lang3.StringUtils.equals(((Element) item).getAttribute("name"), "DNSCacheManager.hosts")) {
|
||||||
|
|
||||||
|
removeChildren(item);
|
||||||
|
Document document = item.getOwnerDocument();
|
||||||
|
Object domains = context.getProperty("domains");
|
||||||
|
if (domains instanceof List) {
|
||||||
|
for (Object d : (List) domains) {
|
||||||
|
JSONObject jsonObject = JSON.parseObject(d.toString());
|
||||||
|
if (!jsonObject.getBooleanValue("enable")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Element elementProp = document.createElement("elementProp");
|
||||||
|
elementProp.setAttribute("name", jsonObject.getString("domain"));
|
||||||
|
elementProp.setAttribute("elementType", "StaticHost");
|
||||||
|
elementProp.appendChild(createStringProp(document, "StaticHost.Name", jsonObject.getString("domain")));
|
||||||
|
elementProp.appendChild(createStringProp(document, "StaticHost.Address", jsonObject.getString("ip")));
|
||||||
|
item.appendChild(elementProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "boolProp")
|
||||||
|
&& org.apache.commons.lang3.StringUtils.equals(((Element) item).getAttribute("name"), "DNSCacheManager.isCustomResolver")) {
|
||||||
|
item.getFirstChild().setNodeValue("true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processConfigTestElement(Element ele) {
|
||||||
|
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, STRING_PROP)
|
||||||
|
&& StringUtils.equals(((Element) item).getAttribute("name"), "HTTPSampler.connect_timeout")) {
|
||||||
|
if (context.getProperty("timeout") != null) {
|
||||||
|
removeChildren(item);
|
||||||
|
item.appendChild(ele.getOwnerDocument().createTextNode(context.getProperty("timeout").toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void processTearDownTestPlan(Element ele) {
|
private void processTearDownTestPlan(Element ele) {
|
||||||
/*<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>*/
|
/*<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>*/
|
||||||
Document document = ele.getOwnerDocument();
|
Document document = ele.getOwnerDocument();
|
||||||
|
|
|
@ -167,7 +167,7 @@ public class LoadTestService {
|
||||||
MSException.throwException(Translator.get("run_load_test_not_found") + request.getId());
|
MSException.throwException(Translator.get("run_load_test_not_found") + request.getId());
|
||||||
}
|
}
|
||||||
if (TestStatus.Running.name().equals(loadTest.getStatus())) {
|
if (TestStatus.Running.name().equals(loadTest.getStatus())) {
|
||||||
MSException.throwException(Translator.get("load_test_is_running") + request.getId());
|
MSException.throwException(Translator.get("load_test_is_running"));
|
||||||
}
|
}
|
||||||
|
|
||||||
LogUtil.info("Load test started " + loadTest.getName());
|
LogUtil.info("Load test started " + loadTest.getName());
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.metersphere;
|
package io.metersphere;
|
||||||
|
|
||||||
import io.metersphere.config.KafkaProperties;
|
import io.metersphere.config.KafkaProperties;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.platform.commons.util.StringUtils;
|
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
@ -33,6 +33,9 @@ public class JmxFileParseTest {
|
||||||
private final static String VARIABLE_THROUGHPUT_TIMER = "kg.apc.jmeter.timers.VariableThroughputTimer";
|
private final static String VARIABLE_THROUGHPUT_TIMER = "kg.apc.jmeter.timers.VariableThroughputTimer";
|
||||||
private final static String BACKEND_LISTENER = "BackendListener";
|
private final static String BACKEND_LISTENER = "BackendListener";
|
||||||
private final static String THREAD_GROUP = "ThreadGroup";
|
private final static String THREAD_GROUP = "ThreadGroup";
|
||||||
|
private final static String CONFIG_TEST_ELEMENT = "ConfigTestElement";
|
||||||
|
private final static String DNS_CACHE_MANAGER = "DNSCacheManager";
|
||||||
|
private final static String ARGUMENTS = "Arguments";
|
||||||
@Resource
|
@Resource
|
||||||
private KafkaProperties kafkaProperties;
|
private KafkaProperties kafkaProperties;
|
||||||
|
|
||||||
|
@ -110,12 +113,117 @@ public class JmxFileParseTest {
|
||||||
|
|
||||||
} else if (nodeNameEquals(ele, BACKEND_LISTENER)) {
|
} else if (nodeNameEquals(ele, BACKEND_LISTENER)) {
|
||||||
processBackendListener(ele);
|
processBackendListener(ele);
|
||||||
|
} else if (nodeNameEquals(ele, CONFIG_TEST_ELEMENT)) {
|
||||||
|
processConfigTestElement(ele);
|
||||||
|
} else if (nodeNameEquals(ele, DNS_CACHE_MANAGER)) {
|
||||||
|
processDnsCacheManager(ele);
|
||||||
|
} else if (nodeNameEquals(ele, ARGUMENTS)) {
|
||||||
|
processArguments(ele);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processArguments(Element ele) {
|
||||||
|
/*
|
||||||
|
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||||
|
<collectionProp name="Arguments.arguments">
|
||||||
|
<elementProp name="BASE_URL_1" elementType="Argument">
|
||||||
|
<stringProp name="Argument.name">BASE_URL_1</stringProp>
|
||||||
|
<stringProp name="Argument.value">rddev2.fit2cloud.com</stringProp>
|
||||||
|
<stringProp name="Argument.metadata">=</stringProp>
|
||||||
|
</elementProp>
|
||||||
|
</collectionProp>
|
||||||
|
</Arguments>
|
||||||
|
*/
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0; i < childNodes.getLength(); i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "collectionProp")) {
|
||||||
|
removeChildren(item);
|
||||||
|
Document document = item.getOwnerDocument();
|
||||||
|
Element elementProp = document.createElement("elementProp");
|
||||||
|
elementProp.setAttribute("name", "");
|
||||||
|
elementProp.setAttribute("elementType", "");
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.name", ""));
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.value", ""));
|
||||||
|
elementProp.appendChild(createStringProp(document, "Argument.metadata", "="));
|
||||||
|
item.appendChild(elementProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processDnsCacheManager(Element ele) {
|
||||||
|
/*
|
||||||
|
<DNSCacheManager guiclass="DNSCachePanel" testclass="DNSCacheManager" testname="DNS Cache Manager" enabled="true">
|
||||||
|
<collectionProp name="DNSCacheManager.servers"/>
|
||||||
|
<collectionProp name="DNSCacheManager.hosts">
|
||||||
|
<elementProp name="baiud.com" elementType="StaticHost">
|
||||||
|
<stringProp name="StaticHost.Name">baiud.com</stringProp>
|
||||||
|
<stringProp name="StaticHost.Address">172.16.10.187</stringProp>
|
||||||
|
</elementProp>
|
||||||
|
</collectionProp>
|
||||||
|
<boolProp name="DNSCacheManager.clearEachIteration">true</boolProp>
|
||||||
|
<boolProp name="DNSCacheManager.isCustomResolver">true</boolProp>
|
||||||
|
</DNSCacheManager>
|
||||||
|
*/
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "collectionProp")
|
||||||
|
&& StringUtils.equals(((Element) item).getAttribute("name"), "DNSCacheManager.hosts")) {
|
||||||
|
Node childNode = item.getFirstChild();
|
||||||
|
// todo 绑定域名 多个
|
||||||
|
while (!(childNode instanceof Element)) {
|
||||||
|
childNode = childNode.getNextSibling();
|
||||||
|
}
|
||||||
|
Element elementProp = ((Element) childNode);
|
||||||
|
elementProp.setAttribute("name", "baidu.com");
|
||||||
|
elementProp.setAttribute("elementType", "StaticHost");
|
||||||
|
removeChildren(elementProp);
|
||||||
|
elementProp.appendChild(createStringProp(ele.getOwnerDocument(), "StaticHost.Name", ""));
|
||||||
|
elementProp.appendChild(createStringProp(ele.getOwnerDocument(), "StaticHost.Address", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, "boolProp")
|
||||||
|
&& StringUtils.equals(((Element) item).getAttribute("name"), "DNSCacheManager.isCustomResolver")) {
|
||||||
|
item.getFirstChild().setNodeValue("true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processConfigTestElement(Element ele) {
|
||||||
|
/*
|
||||||
|
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||||
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
||||||
|
<collectionProp name="Arguments.arguments"/>
|
||||||
|
</elementProp>
|
||||||
|
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.port"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||||
|
<stringProp name="HTTPSampler.path"></stringProp>
|
||||||
|
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||||
|
<boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
|
||||||
|
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
|
||||||
|
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
|
||||||
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||||
|
</ConfigTestElement>
|
||||||
|
*/
|
||||||
|
NodeList childNodes = ele.getChildNodes();
|
||||||
|
for (int i = 0, size = childNodes.getLength(); i < size; i++) {
|
||||||
|
Node item = childNodes.item(i);
|
||||||
|
if (item instanceof Element && nodeNameEquals(item, STRING_PROP)
|
||||||
|
&& StringUtils.equals(((Element) item).getAttribute("name"), "HTTPSampler.connect_timeout")) {
|
||||||
|
|
||||||
|
item.getFirstChild().setNodeValue("30000");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void processTearDownTestPlan(Element ele) {
|
private void processTearDownTestPlan(Element ele) {
|
||||||
/*<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>*/
|
/*<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>*/
|
||||||
Document document = ele.getOwnerDocument();
|
Document document = ele.getOwnerDocument();
|
||||||
|
|
|
@ -167,7 +167,9 @@
|
||||||
this.tableData.splice(index, 1);
|
this.tableData.splice(index, 1);
|
||||||
//
|
//
|
||||||
let i = this.uploadList.indexOf(file);
|
let i = this.uploadList.indexOf(file);
|
||||||
this.uploadList.splice(i, 1);
|
if (i > -1) {
|
||||||
|
this.uploadList.splice(i, 1);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
handleExceed() {
|
handleExceed() {
|
||||||
this.$message.error(this.$t('load_test.delete_file'));
|
this.$message.error(this.$t('load_test.delete_file'));
|
||||||
|
|
Loading…
Reference in New Issue