fix(接口测试): 修复事物控制器提取内容不展示问题
--bug=1008747 --user=赵勇 [github#8403]调试生成报告,事务控制器下面的请求,调试后提取的数据不展示 https://www.tapd.cn/55049933/s/1088013
This commit is contained in:
parent
10ca1653a3
commit
344fa7be0b
|
@ -148,7 +148,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.metersphere</groupId>
|
<groupId>io.metersphere</groupId>
|
||||||
<artifactId>ms-jmeter-core</artifactId>
|
<artifactId>ms-jmeter-core</artifactId>
|
||||||
<version>1.0.4</version>
|
<version>1.0.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 排除jmeter中的 xstream 解决bug -->
|
<!-- 排除jmeter中的 xstream 解决bug -->
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class MsExtract extends MsTestElement {
|
||||||
shell.setProperty(TestElement.TEST_CLASS, JSR223PostProcessor.class.getName());
|
shell.setProperty(TestElement.TEST_CLASS, JSR223PostProcessor.class.getName());
|
||||||
shell.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("TestBeanGUI"));
|
shell.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("TestBeanGUI"));
|
||||||
shell.setProperty("cacheKey", false);
|
shell.setProperty("cacheKey", false);
|
||||||
shell.setProperty("script", "io.metersphere.utils.JMeterVars.addVars(prev.hashCode(),vars," + "\"" + extract.toString() + "\"" + ");");
|
shell.setProperty("script", "io.metersphere.utils.JMeterVars.addVars(prev.getResourceId(),vars," + "\"" + extract.toString() + "\"" + ");");
|
||||||
samplerHashTree.add(shell);
|
samplerHashTree.add(shell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,9 +68,9 @@ public class JMeterService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addDebugListener(String testId, HashTree testPlan) {
|
private void addDebugListener(String testId, HashTree testPlan) {
|
||||||
MsResultCollector resultCollector = new MsResultCollector();
|
MsDebugListener resultCollector = new MsDebugListener();
|
||||||
resultCollector.setName(testId);
|
resultCollector.setName(testId);
|
||||||
resultCollector.setProperty(TestElement.TEST_CLASS, MsResultCollector.class.getName());
|
resultCollector.setProperty(TestElement.TEST_CLASS, MsDebugListener.class.getName());
|
||||||
resultCollector.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("ViewResultsFullVisualizer"));
|
resultCollector.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("ViewResultsFullVisualizer"));
|
||||||
resultCollector.setEnabled(true);
|
resultCollector.setEnabled(true);
|
||||||
testPlan.add(testPlan.getArray()[0], resultCollector);
|
testPlan.add(testPlan.getArray()[0], resultCollector);
|
||||||
|
@ -132,7 +132,7 @@ public class JMeterService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void send(JmeterRunRequestDTO request) {
|
private void send(JmeterRunRequestDTO request) {
|
||||||
try {
|
try {
|
||||||
List<JvmInfoDTO> resources = GenerateHashTreeUtil.setPoolResource(request.getPoolId());
|
List<JvmInfoDTO> resources = GenerateHashTreeUtil.setPoolResource(request.getPoolId());
|
||||||
int index = (int) (Math.random() * resources.size());
|
int index = (int) (Math.random() * resources.size());
|
||||||
|
@ -141,6 +141,7 @@ public class JMeterService {
|
||||||
String configuration = testResource.getConfiguration();
|
String configuration = testResource.getConfiguration();
|
||||||
NodeDTO node = JSON.parseObject(configuration, NodeDTO.class);
|
NodeDTO node = JSON.parseObject(configuration, NodeDTO.class);
|
||||||
request.setCorePoolSize(node.getMaxConcurrency());
|
request.setCorePoolSize(node.getMaxConcurrency());
|
||||||
|
request.setEnable(node.isEnable());
|
||||||
String nodeIp = node.getIp();
|
String nodeIp = node.getIp();
|
||||||
Integer port = node.getPort();
|
Integer port = node.getPort();
|
||||||
String uri = String.format(BASE_URL + "/jmeter/api/start", nodeIp, port);
|
String uri = String.format(BASE_URL + "/jmeter/api/start", nodeIp, port);
|
||||||
|
|
|
@ -44,7 +44,7 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
* 实时结果监听
|
* 实时结果监听
|
||||||
*/
|
*/
|
||||||
public class MsResultCollector extends AbstractListenerElement implements SampleListener, Clearable, Serializable,
|
public class MsDebugListener extends AbstractListenerElement implements SampleListener, Clearable, Serializable,
|
||||||
TestStateListener, Remoteable, NoThreadClone {
|
TestStateListener, Remoteable, NoThreadClone {
|
||||||
|
|
||||||
private static final String ERROR_LOGGING = "MsResultCollector.error_logging"; // $NON-NLS-1$
|
private static final String ERROR_LOGGING = "MsResultCollector.error_logging"; // $NON-NLS-1$
|
||||||
|
@ -57,7 +57,7 @@ public class MsResultCollector extends AbstractListenerElement implements Sample
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
MsResultCollector clone = (MsResultCollector) super.clone();
|
MsDebugListener clone = (MsDebugListener) super.clone();
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,39 @@ public class MsResultCollector extends AbstractListenerElement implements Sample
|
||||||
@Override
|
@Override
|
||||||
public void sampleOccurred(SampleEvent event) {
|
public void sampleOccurred(SampleEvent event) {
|
||||||
SampleResult result = event.getResult();
|
SampleResult result = event.getResult();
|
||||||
JMeterVariables variables = JMeterVars.get(result.hashCode());
|
this.setVars(result);
|
||||||
|
if (isSampleWanted(result.isSuccessful()) && !StringUtils.equals(result.getSampleLabel(), RunningParamKeys.RUNNING_DEBUG_SAMPLER_NAME)) {
|
||||||
|
RequestResult requestResult = JMeterBase.getRequestResult(result);
|
||||||
|
if (requestResult != null) {
|
||||||
|
MsgDto dto = new MsgDto();
|
||||||
|
dto.setExecEnd(false);
|
||||||
|
dto.setReportId("send." + this.getName());
|
||||||
|
dto.setToReport(this.getName());
|
||||||
|
String console = CommonBeanFactory.getBean(MsResultService.class).getJmeterLogger(this.getName());
|
||||||
|
if (StringUtils.isNotEmpty(requestResult.getName()) && requestResult.getName().startsWith("Transaction=")) {
|
||||||
|
requestResult.getSubRequestResults().forEach(transactionResult -> {
|
||||||
|
transactionResult.getResponseResult().setConsole(console);
|
||||||
|
dto.setContent("result_" + JSON.toJSONString(transactionResult));
|
||||||
|
WebSocketUtils.sendMessageSingle(dto);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
requestResult.getResponseResult().setConsole(console);
|
||||||
|
dto.setContent("result_" + JSON.toJSONString(requestResult));
|
||||||
|
WebSocketUtils.sendMessageSingle(dto);
|
||||||
|
}
|
||||||
|
LoggerUtil.debug("send. " + this.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setVars(SampleResult result) {
|
||||||
|
if (StringUtils.isNotEmpty(result.getSampleLabel()) && result.getSampleLabel().startsWith("Transaction=")) {
|
||||||
|
for (int i = 0; i < result.getSubResults().length; i++) {
|
||||||
|
SampleResult subResult = result.getSubResults()[i];
|
||||||
|
this.setVars(subResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JMeterVariables variables = JMeterVars.get(result.getResourceId());
|
||||||
if (variables != null && CollectionUtils.isNotEmpty(variables.entrySet())) {
|
if (variables != null && CollectionUtils.isNotEmpty(variables.entrySet())) {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
for (Map.Entry<String, Object> entry : variables.entrySet()) {
|
for (Map.Entry<String, Object> entry : variables.entrySet()) {
|
||||||
|
@ -155,23 +187,6 @@ public class MsResultCollector extends AbstractListenerElement implements Sample
|
||||||
result.setExtVars(builder.toString());
|
result.setExtVars(builder.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isSampleWanted(result.isSuccessful()) && !StringUtils.equals(result.getSampleLabel(), RunningParamKeys.RUNNING_DEBUG_SAMPLER_NAME)) {
|
|
||||||
RequestResult requestResult = JMeterBase.getRequestResult(result);
|
|
||||||
if (requestResult != null) {
|
|
||||||
if (StringUtils.isNotEmpty(requestResult.getName()) && requestResult.getName().startsWith("Transaction=") && CollectionUtils.isEmpty(requestResult.getSubRequestResults())) {
|
|
||||||
LoggerUtil.debug("进入合并事物,暂不处理");
|
|
||||||
} else {
|
|
||||||
requestResult.getResponseResult().setConsole(CommonBeanFactory.getBean(MsResultService.class).getJmeterLogger(this.getName()));
|
|
||||||
MsgDto dto = new MsgDto();
|
|
||||||
dto.setExecEnd(false);
|
|
||||||
dto.setContent("result_" + JSON.toJSONString(requestResult));
|
|
||||||
dto.setReportId("send." + this.getName());
|
|
||||||
dto.setToReport(this.getName());
|
|
||||||
LoggerUtil.debug("send. " + this.getName());
|
|
||||||
WebSocketUtils.sendMessageSingle(dto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -27,10 +27,6 @@ public class ApiScenarioReportResultService {
|
||||||
// 事物控制器出来的结果特殊处理
|
// 事物控制器出来的结果特殊处理
|
||||||
if (StringUtils.isNotEmpty(item.getName()) && item.getName().startsWith("Transaction=") && CollectionUtils.isEmpty(item.getSubRequestResults())) {
|
if (StringUtils.isNotEmpty(item.getName()) && item.getName().startsWith("Transaction=") && CollectionUtils.isEmpty(item.getSubRequestResults())) {
|
||||||
LoggerUtil.debug("合并事物请求暂不入库");
|
LoggerUtil.debug("合并事物请求暂不入库");
|
||||||
} else if (StringUtils.isNotEmpty(item.getName()) && item.getName().startsWith("Transaction=") && CollectionUtils.isNotEmpty(item.getSubRequestResults())) {
|
|
||||||
item.getSubRequestResults().forEach(subItem -> {
|
|
||||||
apiScenarioReportResultMapper.insert(this.newApiScenarioReportResult(reportId, subItem));
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
apiScenarioReportResultMapper.insert(this.newApiScenarioReportResult(reportId, item));
|
apiScenarioReportResultMapper.insert(this.newApiScenarioReportResult(reportId, item));
|
||||||
}
|
}
|
||||||
|
|
|
@ -740,6 +740,7 @@ export default {
|
||||||
if (data.method === 'Request' && data.subRequestResults && data.subRequestResults.length > 0) {
|
if (data.method === 'Request' && data.subRequestResults && data.subRequestResults.length > 0) {
|
||||||
data.subRequestResults.forEach(subItem => {
|
data.subRequestResults.forEach(subItem => {
|
||||||
if (item.data && item.data.resourceId + "_" + item.data.parentIndex === subItem.resourceId) {
|
if (item.data && item.data.resourceId + "_" + item.data.parentIndex === subItem.resourceId) {
|
||||||
|
subItem.requestResult.console = data.responseResult.console;
|
||||||
item.data.requestResult.push(subItem);
|
item.data.requestResult.push(subItem);
|
||||||
// 更新父节点状态
|
// 更新父节点状态
|
||||||
this.resultEvaluation(subItem.resourceId, subItem.success);
|
this.resultEvaluation(subItem.resourceId, subItem.success);
|
||||||
|
|
Loading…
Reference in New Issue