feat(接口测试): 优化提前和断言结果展示
This commit is contained in:
parent
73635fd7b8
commit
7652bca100
|
@ -0,0 +1,15 @@
|
||||||
|
package io.metersphere.sdk.dto.api.result;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: jianxing
|
||||||
|
* @CreateTime: 2024-05-09 17:08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ExtractResult {
|
||||||
|
private String name;
|
||||||
|
private String value;
|
||||||
|
private String type;
|
||||||
|
private String expression;
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ public class ResponseAssertionResult {
|
||||||
/**
|
/**
|
||||||
* 断言内容
|
* 断言内容
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,6 +24,27 @@ public class ResponseAssertionResult {
|
||||||
*/
|
*/
|
||||||
private String script;
|
private String script;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实际值
|
||||||
|
*/
|
||||||
|
private String actualValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 期望值
|
||||||
|
*/
|
||||||
|
private String expectedValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断言类型
|
||||||
|
* {@link AssertionResultType}
|
||||||
|
*/
|
||||||
|
private String assertionType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断言条件
|
||||||
|
*/
|
||||||
|
private String condition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 断言结果
|
* 断言结果
|
||||||
*/
|
*/
|
||||||
|
@ -32,4 +54,16 @@ public class ResponseAssertionResult {
|
||||||
* 是否通过
|
* 是否通过
|
||||||
*/
|
*/
|
||||||
private boolean pass;
|
private boolean pass;
|
||||||
|
|
||||||
|
public enum AssertionResultType {
|
||||||
|
DOCUMENT,
|
||||||
|
RESPONSE_CODE,
|
||||||
|
RESPONSE_HEADER,
|
||||||
|
RESPONSE_TIME,
|
||||||
|
SCRIPT,
|
||||||
|
VARIABLE,
|
||||||
|
JSON_PATH,
|
||||||
|
XPATH,
|
||||||
|
REGEX
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,10 +51,7 @@ public class ResponseResult {
|
||||||
*/
|
*/
|
||||||
private String contentType;
|
private String contentType;
|
||||||
|
|
||||||
/**
|
private List<ExtractResult> extractResults;
|
||||||
* 过程变量处理信息
|
|
||||||
*/
|
|
||||||
private String vars;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片内容
|
* 图片内容
|
||||||
|
|
|
@ -8,6 +8,7 @@ import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jmeter.assertions.ResponseAssertion;
|
import org.apache.jmeter.assertions.ResponseAssertion;
|
||||||
import org.apache.jmeter.save.SaveService;
|
import org.apache.jmeter.save.SaveService;
|
||||||
|
import org.apache.jmeter.testelement.AbstractTestElement;
|
||||||
import org.apache.jmeter.testelement.TestElement;
|
import org.apache.jmeter.testelement.TestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
|
||||||
|
@ -64,4 +65,16 @@ public abstract class AssertionConverter<T extends MsAssertion> {
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setMsAssertionInfoProperty(AbstractTestElement assertion, String assertionType, String name, String condition, String expectedValue) {
|
||||||
|
// 保存断言信息
|
||||||
|
assertion.setProperty("name", name);
|
||||||
|
assertion.setProperty("assertionType", assertionType);
|
||||||
|
assertion.setProperty("condition", condition);
|
||||||
|
assertion.setProperty("expectedValue", expectedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setMsAssertionInfoProperty(AbstractTestElement assertion, String assertionType, String name) {
|
||||||
|
AssertionConverter.setMsAssertionInfoProperty(assertion, assertionType, name, null, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package io.metersphere.api.parser.jmeter.processor.assertion;
|
||||||
|
|
||||||
import io.metersphere.project.api.assertion.MsResponseCodeAssertion;
|
import io.metersphere.project.api.assertion.MsResponseCodeAssertion;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jmeter.assertions.ResponseAssertion;
|
import org.apache.jmeter.assertions.ResponseAssertion;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
@ -27,7 +28,6 @@ public class ResponseCodeAssertionConverter extends AssertionConverter<MsRespons
|
||||||
ResponseAssertion assertion = createResponseAssertion();
|
ResponseAssertion assertion = createResponseAssertion();
|
||||||
String expectedValue = msAssertion.getExpectedValue();
|
String expectedValue = msAssertion.getExpectedValue();
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
|
|
||||||
assertion.setAssumeSuccess(true);
|
assertion.setAssumeSuccess(true);
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
|
|
||||||
|
@ -36,6 +36,8 @@ public class ResponseCodeAssertionConverter extends AssertionConverter<MsRespons
|
||||||
assertion.addTestString(generateRegexExpression(condition, expectedValue));
|
assertion.addTestString(generateRegexExpression(condition, expectedValue));
|
||||||
assertion.setToContainsType();
|
assertion.setToContainsType();
|
||||||
assertion.setTestFieldResponseCode();
|
assertion.setTestFieldResponseCode();
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.RESPONSE_CODE.name(), assertion.getName(), condition, expectedValue);
|
||||||
return assertion;
|
return assertion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package io.metersphere.api.parser.jmeter.processor.assertion;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
import io.metersphere.project.api.assertion.MsResponseHeaderAssertion;
|
import io.metersphere.project.api.assertion.MsResponseHeaderAssertion;
|
||||||
import io.metersphere.sdk.constants.MsAssertionCondition;
|
import io.metersphere.sdk.constants.MsAssertionCondition;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import io.metersphere.sdk.util.EnumValidator;
|
import io.metersphere.sdk.util.EnumValidator;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -50,6 +51,9 @@ public class ResponseHeaderAssertionConverter extends AssertionConverter<MsRespo
|
||||||
String condition = msAssertion.getCondition();
|
String condition = msAssertion.getCondition();
|
||||||
MsAssertionCondition msAssertionCondition = EnumValidator.validateEnum(MsAssertionCondition.class, condition);
|
MsAssertionCondition msAssertionCondition = EnumValidator.validateEnum(MsAssertionCondition.class, condition);
|
||||||
String header = msAssertion.getHeader();
|
String header = msAssertion.getHeader();
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.RESPONSE_HEADER.name(), header, condition, expectedValue);
|
||||||
|
|
||||||
String regexTemplate = switch (msAssertionCondition) {
|
String regexTemplate = switch (msAssertionCondition) {
|
||||||
case NOT_CONTAINS, CONTAINS -> "((?:[\\r\\n]%key|^%key):.*%value)";
|
case NOT_CONTAINS, CONTAINS -> "((?:[\\r\\n]%key|^%key):.*%value)";
|
||||||
case EQUALS, NOT_EQUALS -> "((?:[\\r\\n]%key|^%key):\\s*(?:%value[\\r\\n]|%value$))";
|
case EQUALS, NOT_EQUALS -> "((?:[\\r\\n]%key|^%key):\\s*(?:%value[\\r\\n]|%value$))";
|
||||||
|
|
|
@ -2,6 +2,7 @@ package io.metersphere.api.parser.jmeter.processor.assertion;
|
||||||
|
|
||||||
import io.metersphere.project.api.assertion.MsResponseTimeAssertion;
|
import io.metersphere.project.api.assertion.MsResponseTimeAssertion;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.jmeter.assertions.DurationAssertion;
|
import org.apache.jmeter.assertions.DurationAssertion;
|
||||||
import org.apache.jmeter.save.SaveService;
|
import org.apache.jmeter.save.SaveService;
|
||||||
import org.apache.jmeter.testelement.TestElement;
|
import org.apache.jmeter.testelement.TestElement;
|
||||||
|
@ -31,6 +32,7 @@ public class ResponseTimeAssertionConverter extends AssertionConverter<MsRespons
|
||||||
assertion.setProperty(TestElement.TEST_CLASS, DurationAssertion.class.getName());
|
assertion.setProperty(TestElement.TEST_CLASS, DurationAssertion.class.getName());
|
||||||
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(DURATION_ASSERTION_GUI));
|
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(DURATION_ASSERTION_GUI));
|
||||||
assertion.setAllowedDuration(msAssertion.getExpectedValue());
|
assertion.setAllowedDuration(msAssertion.getExpectedValue());
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.RESPONSE_TIME.name(), String.valueOf(msAssertion.getExpectedValue()), null, String.valueOf(msAssertion.getExpectedValue()));
|
||||||
return assertion;
|
return assertion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,13 @@ import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
import io.metersphere.project.api.assertion.MsScriptAssertion;
|
import io.metersphere.project.api.assertion.MsScriptAssertion;
|
||||||
import io.metersphere.project.api.processor.ScriptProcessor;
|
import io.metersphere.project.api.processor.ScriptProcessor;
|
||||||
import io.metersphere.project.constants.ScriptLanguageType;
|
import io.metersphere.project.constants.ScriptLanguageType;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import io.metersphere.sdk.util.BeanUtils;
|
import io.metersphere.sdk.util.BeanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jmeter.assertions.BeanShellAssertion;
|
import org.apache.jmeter.assertions.BeanShellAssertion;
|
||||||
import org.apache.jmeter.assertions.JSR223Assertion;
|
import org.apache.jmeter.assertions.JSR223Assertion;
|
||||||
import org.apache.jmeter.save.SaveService;
|
import org.apache.jmeter.save.SaveService;
|
||||||
|
import org.apache.jmeter.testelement.AbstractTestElement;
|
||||||
import org.apache.jmeter.testelement.TestElement;
|
import org.apache.jmeter.testelement.TestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
|
||||||
|
@ -28,7 +30,7 @@ public class ScriptAssertionConverter extends AssertionConverter<MsScriptAsserti
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestElement assertion;
|
AbstractTestElement assertion;
|
||||||
if (isJSR233(msAssertion)) {
|
if (isJSR233(msAssertion)) {
|
||||||
assertion = new JSR223Assertion();
|
assertion = new JSR223Assertion();
|
||||||
} else {
|
} else {
|
||||||
|
@ -47,6 +49,8 @@ public class ScriptAssertionConverter extends AssertionConverter<MsScriptAsserti
|
||||||
Optional.ofNullable(ScriptProcessorConverter.getScriptArguments(scriptProcessor))
|
Optional.ofNullable(ScriptProcessorConverter.getScriptArguments(scriptProcessor))
|
||||||
.ifPresent(hashTree::add);
|
.ifPresent(hashTree::add);
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.SCRIPT.name(), assertion.getName());
|
||||||
|
|
||||||
hashTree.add(assertion);
|
hashTree.add(assertion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import io.metersphere.project.api.processor.ScriptProcessor;
|
||||||
import io.metersphere.api.parser.jmeter.processor.ScriptProcessorConverter;
|
import io.metersphere.api.parser.jmeter.processor.ScriptProcessorConverter;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
import io.metersphere.sdk.constants.MsAssertionCondition;
|
import io.metersphere.sdk.constants.MsAssertionCondition;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.text.StringEscapeUtils;
|
import org.apache.commons.text.StringEscapeUtils;
|
||||||
|
@ -59,6 +60,8 @@ public class VariableAssertionConverter extends AssertionConverter<MsVariableAss
|
||||||
scriptProcessor.setScriptLanguage(ScriptLanguageType.GROOVY.name());
|
scriptProcessor.setScriptLanguage(ScriptLanguageType.GROOVY.name());
|
||||||
JSR223Assertion jsr223Assertion = new JSR223Assertion();
|
JSR223Assertion jsr223Assertion = new JSR223Assertion();
|
||||||
ScriptProcessorConverter.parse(jsr223Assertion, scriptProcessor, config);
|
ScriptProcessorConverter.parse(jsr223Assertion, scriptProcessor, config);
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(jsr223Assertion, ResponseAssertionResult.AssertionResultType.VARIABLE.name(), variableName, condition, expectedValue);
|
||||||
return jsr223Assertion;
|
return jsr223Assertion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,13 +210,13 @@ public class VariableAssertionConverter extends AssertionConverter<MsVariableAss
|
||||||
}
|
}
|
||||||
|
|
||||||
script += """
|
script += """
|
||||||
if (!result) {
|
if (!result){
|
||||||
if (flag) {
|
if (flag) {
|
||||||
msg = "assertion [" + msg + "]: false;";
|
msg = "assertion [" + msg + "]: false;";
|
||||||
}
|
}
|
||||||
AssertionResult.setFailureMessage(msg);
|
|
||||||
AssertionResult.setFailure(true);
|
AssertionResult.setFailure(true);
|
||||||
}
|
}
|
||||||
|
AssertionResult.setFailureMessage(msg + "&&&" + variableValue);
|
||||||
""";
|
""";
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package io.metersphere.api.parser.jmeter.processor.assertion.body;
|
package io.metersphere.api.parser.jmeter.processor.assertion.body;
|
||||||
|
|
||||||
import io.metersphere.project.api.assertion.body.MsJSONPathAssertion;
|
|
||||||
import io.metersphere.project.api.assertion.body.MsJSONPathAssertionItem;
|
|
||||||
import io.metersphere.assertions.JSONPathAssertion;
|
import io.metersphere.assertions.JSONPathAssertion;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
|
import io.metersphere.project.api.assertion.body.MsJSONPathAssertion;
|
||||||
|
import io.metersphere.project.api.assertion.body.MsJSONPathAssertionItem;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.jmeter.testelement.TestElement;
|
import org.apache.jmeter.testelement.TestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
@ -34,6 +35,9 @@ public class JSONPathAssertionConverter extends ResponseBodyTypeAssertionConvert
|
||||||
String condition = msAssertion.getCondition();
|
String condition = msAssertion.getCondition();
|
||||||
String expression = msAssertion.getExpression();
|
String expression = msAssertion.getExpression();
|
||||||
String expectedValue = msAssertion.getExpectedValue();
|
String expectedValue = msAssertion.getExpectedValue();
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.JSON_PATH.name(), expression, condition, expectedValue);
|
||||||
|
|
||||||
assertion.setName(String.format("Response data JSONPath expect %s %s %s", expression, condition.toLowerCase().replace("_", ""), expectedValue));
|
assertion.setName(String.format("Response data JSONPath expect %s %s %s", expression, condition.toLowerCase().replace("_", ""), expectedValue));
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
if (BooleanUtils.isFalse(globalEnable)) {
|
if (BooleanUtils.isFalse(globalEnable)) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import io.metersphere.project.api.assertion.body.MsRegexAssertion;
|
||||||
import io.metersphere.project.api.assertion.body.MsRegexAssertionItem;
|
import io.metersphere.project.api.assertion.body.MsRegexAssertionItem;
|
||||||
import io.metersphere.api.parser.jmeter.processor.assertion.AssertionConverter;
|
import io.metersphere.api.parser.jmeter.processor.assertion.AssertionConverter;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.jmeter.assertions.ResponseAssertion;
|
import org.apache.jmeter.assertions.ResponseAssertion;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
@ -31,6 +32,9 @@ public class RegexAssertionConverter extends ResponseBodyTypeAssertionConverter<
|
||||||
|
|
||||||
private ResponseAssertion parse2RegexResponseAssertion(MsRegexAssertionItem msAssertion, Boolean globalEnable) {
|
private ResponseAssertion parse2RegexResponseAssertion(MsRegexAssertionItem msAssertion, Boolean globalEnable) {
|
||||||
ResponseAssertion assertion = AssertionConverter.createResponseAssertion();
|
ResponseAssertion assertion = AssertionConverter.createResponseAssertion();
|
||||||
|
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.REGEX.name(), msAssertion.getExpression());
|
||||||
|
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
assertion.setName("Response data expect regex " + msAssertion.getExpression());
|
assertion.setName("Response data expect regex " + msAssertion.getExpression());
|
||||||
assertion.addTestString(msAssertion.getExpression());
|
assertion.addTestString(msAssertion.getExpression());
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package io.metersphere.api.parser.jmeter.processor.assertion.body;
|
package io.metersphere.api.parser.jmeter.processor.assertion.body;
|
||||||
|
|
||||||
|
import io.metersphere.api.parser.jmeter.processor.assertion.AssertionConverter;
|
||||||
import io.metersphere.project.api.assertion.body.MsBodyAssertionItem;
|
import io.metersphere.project.api.assertion.body.MsBodyAssertionItem;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
|
import org.apache.jmeter.testelement.AbstractTestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,4 +28,12 @@ public abstract class ResponseBodyTypeAssertionConverter <T> {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMsAssertionInfoProperty(AbstractTestElement assertion, String assertionType, String name, String condition, String expectedValue) {
|
||||||
|
AssertionConverter.setMsAssertionInfoProperty(assertion, assertionType, name, condition, expectedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMsAssertionInfoProperty(AbstractTestElement assertion, String assertionType, String name) {
|
||||||
|
AssertionConverter.setMsAssertionInfoProperty(assertion, assertionType, name);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@ import io.metersphere.project.api.assertion.body.MsXPathAssertion;
|
||||||
import io.metersphere.project.api.assertion.body.MsXPathAssertionItem;
|
import io.metersphere.project.api.assertion.body.MsXPathAssertionItem;
|
||||||
import io.metersphere.project.api.processor.extract.XPathExtract;
|
import io.metersphere.project.api.processor.extract.XPathExtract;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
|
import io.metersphere.sdk.dto.api.result.ResponseAssertionResult;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jmeter.assertions.XPath2Assertion;
|
import org.apache.jmeter.assertions.XPath2Assertion;
|
||||||
|
@ -43,13 +44,15 @@ public class XPathAssertionConverter extends ResponseBodyTypeAssertionConverter<
|
||||||
|
|
||||||
private XPathAssertion parse2XPathAssertion(MsXPathAssertionItem msAssertion, Boolean globalEnable) {
|
private XPathAssertion parse2XPathAssertion(MsXPathAssertionItem msAssertion, Boolean globalEnable) {
|
||||||
XPathAssertion assertion = new XPathAssertion();
|
XPathAssertion assertion = new XPathAssertion();
|
||||||
|
String expression = msAssertion.getExpression();
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.XPATH.name(), expression);
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
assertion.setTolerant(true);
|
assertion.setTolerant(true);
|
||||||
assertion.setValidating(false);
|
assertion.setValidating(false);
|
||||||
assertion.setName("Response data expect xpath " + msAssertion.getExpression());
|
assertion.setName("Response data expect xpath " + expression);
|
||||||
assertion.setProperty(TestElement.TEST_CLASS, XPathAssertion.class.getName());
|
assertion.setProperty(TestElement.TEST_CLASS, XPathAssertion.class.getName());
|
||||||
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(XPATH_ASSERTION_GUI));
|
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(XPATH_ASSERTION_GUI));
|
||||||
assertion.setXPathString(msAssertion.getExpression());
|
assertion.setXPathString(expression);
|
||||||
assertion.setNegated(false);
|
assertion.setNegated(false);
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
if (BooleanUtils.isFalse(globalEnable)) {
|
if (BooleanUtils.isFalse(globalEnable)) {
|
||||||
|
@ -61,11 +64,13 @@ public class XPathAssertionConverter extends ResponseBodyTypeAssertionConverter<
|
||||||
|
|
||||||
private XPath2Assertion parse2XPath2Assertion(MsXPathAssertionItem msAssertion, Boolean globalEnable) {
|
private XPath2Assertion parse2XPath2Assertion(MsXPathAssertionItem msAssertion, Boolean globalEnable) {
|
||||||
XPath2Assertion assertion = new XPath2Assertion();
|
XPath2Assertion assertion = new XPath2Assertion();
|
||||||
|
String expression = msAssertion.getExpression();
|
||||||
|
setMsAssertionInfoProperty(assertion, ResponseAssertionResult.AssertionResultType.XPATH.name(), expression);
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
assertion.setName("Response date expect xpath " + msAssertion.getExpression());
|
assertion.setName("Response date expect xpath " +expression);
|
||||||
assertion.setProperty(TestElement.TEST_CLASS, XPath2Assertion.class.getName());
|
assertion.setProperty(TestElement.TEST_CLASS, XPath2Assertion.class.getName());
|
||||||
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(X_PATH_2_ASSERTION_GUI));
|
assertion.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(X_PATH_2_ASSERTION_GUI));
|
||||||
assertion.setXPathString(msAssertion.getExpression());
|
assertion.setXPathString(expression);
|
||||||
assertion.setNegated(false);
|
assertion.setNegated(false);
|
||||||
assertion.setEnabled(msAssertion.getEnable());
|
assertion.setEnabled(msAssertion.getEnable());
|
||||||
if (BooleanUtils.isFalse(globalEnable)) {
|
if (BooleanUtils.isFalse(globalEnable)) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import io.metersphere.project.api.processor.extract.MsExtract;
|
||||||
import io.metersphere.project.api.processor.extract.ResultMatchingExtract;
|
import io.metersphere.project.api.processor.extract.ResultMatchingExtract;
|
||||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.jmeter.testelement.AbstractTestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,4 +37,10 @@ public abstract class ExtractConverter<T extends MsExtract> {
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setMsExtractInfoProperty(AbstractTestElement extract, String type, String expression) {
|
||||||
|
// 保存断言信息
|
||||||
|
extract.setProperty("type", type);
|
||||||
|
extract.setProperty("expression", expression);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class JSONPathExtractConverter extends ExtractConverter<JSONPathExtract>
|
||||||
extractor.setComputeConcatenation(true);
|
extractor.setComputeConcatenation(true);
|
||||||
}
|
}
|
||||||
extractor.setEnabled(msExtract.getEnable());
|
extractor.setEnabled(msExtract.getEnable());
|
||||||
|
setMsExtractInfoProperty(extractor, msExtract.getVariableType(), msExtract.getExpression());
|
||||||
hashTree.add(extractor);
|
hashTree.add(extractor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class RegexExtractConverter extends ExtractConverter<RegexExtract> {
|
||||||
extractor.setTemplate(getTemplate(msExtract.getExpressionMatchingRule()));
|
extractor.setTemplate(getTemplate(msExtract.getExpressionMatchingRule()));
|
||||||
// 处理匹配多条等匹配规则
|
// 处理匹配多条等匹配规则
|
||||||
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
||||||
|
setMsExtractInfoProperty(extractor, msExtract.getVariableType(), msExtract.getExpression());
|
||||||
hashTree.add(extractor);
|
hashTree.add(extractor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ public class XPathExtractConverter extends ExtractConverter<XPathExtract> {
|
||||||
extractor.setEnabled(msExtract.getEnable());
|
extractor.setEnabled(msExtract.getEnable());
|
||||||
// 处理匹配多条等匹配规则
|
// 处理匹配多条等匹配规则
|
||||||
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
||||||
|
setMsExtractInfoProperty(extractor, msExtract.getVariableType(), msExtract.getExpression());
|
||||||
return extractor;
|
return extractor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +52,7 @@ public class XPathExtractConverter extends ExtractConverter<XPathExtract> {
|
||||||
extractor.setEnabled(msExtract.getEnable());
|
extractor.setEnabled(msExtract.getEnable());
|
||||||
// 处理匹配多条等匹配规则
|
// 处理匹配多条等匹配规则
|
||||||
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
extractor.setMatchNumber(parseResultMatchingRule(msExtract));
|
||||||
|
setMsExtractInfoProperty(extractor, msExtract.getVariableType(), msExtract.getExpression());
|
||||||
return extractor;
|
return extractor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue