fix(接口测试): 存在多个响应码断言,断言结果有误
--bug=1046899 --user=陈建星 [接口测试]github#332222个全局断言成功+1个接口用例本身断言失败 = 最终结果为成功 https://www.tapd.cn/55049933/s/1600346
This commit is contained in:
parent
5272fd1482
commit
beecbc886f
|
@ -22,9 +22,7 @@ import io.metersphere.project.dto.environment.processors.ApiEnvProcessorConfig;
|
|||
import io.metersphere.project.dto.environment.processors.ApiEnvRequestProcessorConfig;
|
||||
import io.metersphere.project.dto.environment.processors.EnvProcessorConfig;
|
||||
import io.metersphere.project.dto.environment.processors.EnvRequestScriptProcessor;
|
||||
import io.metersphere.sdk.constants.MsAssertionCondition;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.jorphan.collections.HashTree;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -81,39 +79,24 @@ public class MsCommonElementConverter extends AbstractJmeterElementConverter<MsC
|
|||
// 将状态码断言放最前面,否则会影响脚本断言的效果,即使脚本断言失败,总状态还是显示成功
|
||||
List<MsAssertion> sortAssertions = new ArrayList<>(assertions.size());
|
||||
assertions.forEach(item -> {
|
||||
if (item instanceof MsResponseCodeAssertion) {
|
||||
if (BooleanUtils.isTrue(item.getEnable()) && item instanceof MsResponseCodeAssertion) {
|
||||
sortAssertions.add(item);
|
||||
}
|
||||
});
|
||||
assertions.forEach(item -> {
|
||||
if (!(item instanceof MsResponseCodeAssertion)) {
|
||||
if (BooleanUtils.isTrue(item.getEnable()) && !(item instanceof MsResponseCodeAssertion)) {
|
||||
sortAssertions.add(item);
|
||||
}
|
||||
});
|
||||
sortAssertions
|
||||
.forEach(assertion -> {
|
||||
assertion.setProjectId(element.getProjectId());
|
||||
AssertionConverterFactory.getConverter(assertion.getClass()).parse(tree, assertion, config, isIgnoreAssertStatus(assertions));
|
||||
});
|
||||
}
|
||||
for (int i = 0; i < sortAssertions.size(); i++) {
|
||||
MsAssertion assertion = sortAssertions.get(i);
|
||||
assertion.setProjectId(element.getProjectId());
|
||||
// 只给第一个响应码断言设置忽略状态
|
||||
boolean isIgnoreStatus = i == 0 && assertion instanceof MsResponseCodeAssertion;
|
||||
|
||||
/**
|
||||
* 是否忽略状态码
|
||||
*
|
||||
* @param assertions
|
||||
* @return
|
||||
*/
|
||||
public static boolean isIgnoreAssertStatus(List<MsAssertion> assertions) {
|
||||
boolean isIgnoreStatus = false;
|
||||
for (MsAssertion assertion : assertions) {
|
||||
if (assertion instanceof MsResponseCodeAssertion responseCodeAssertion) {
|
||||
// 如果状态码断言添加了不校验状态码,则所有断言忽略状态码
|
||||
if (StringUtils.equals(responseCodeAssertion.getCondition(), MsAssertionCondition.UNCHECK.name())) {
|
||||
isIgnoreStatus = true;
|
||||
}
|
||||
}
|
||||
AssertionConverterFactory.getConverter(assertion.getClass())
|
||||
.parse(tree, assertion, config, isIgnoreStatus);
|
||||
}
|
||||
return isIgnoreStatus;
|
||||
}
|
||||
|
||||
private void addProcessors(HashTree tree, MsCommonElement msCommonElement, ParameterConfig config,
|
||||
|
|
|
@ -18,6 +18,7 @@ import io.metersphere.api.parser.jmeter.processor.assertion.AssertionConverterFa
|
|||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||
import io.metersphere.plugin.api.spi.AbstractJmeterElementConverter;
|
||||
import io.metersphere.project.api.assertion.MsAssertion;
|
||||
import io.metersphere.project.api.assertion.MsResponseCodeAssertion;
|
||||
import io.metersphere.project.api.processor.MsProcessor;
|
||||
import io.metersphere.project.api.processor.SQLProcessor;
|
||||
import io.metersphere.project.dto.environment.EnvironmentConfig;
|
||||
|
@ -241,10 +242,14 @@ public class MsScenarioConverter extends AbstractJmeterElementConverter<MsScenar
|
|||
.getAssertionConfig()
|
||||
.getAssertions();
|
||||
|
||||
boolean ignoreAssertStatus = MsCommonElementConverter.isIgnoreAssertStatus(assertions);
|
||||
for (int i = 0; i < assertions.size(); i++) {
|
||||
MsAssertion assertion = assertions.get(i);
|
||||
|
||||
assertions.forEach(assertion ->
|
||||
AssertionConverterFactory.getConverter(assertion.getClass()).parse(tree, assertion, config, ignoreAssertStatus));
|
||||
// 只给第一个响应码断言设置忽略状态
|
||||
boolean isIgnoreStatus = i == 0 && assertion instanceof MsResponseCodeAssertion;
|
||||
|
||||
AssertionConverterFactory.getConverter(assertion.getClass()).parse(tree, assertion, config, isIgnoreStatus);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,18 +17,18 @@ public class ResponseCodeAssertionConverter extends AssertionConverter<MsRespons
|
|||
if (!needParse(msAssertion, config) || !isValid(msAssertion)) {
|
||||
return;
|
||||
}
|
||||
hashTree.add(parse2ResponseAssertion(msAssertion));
|
||||
hashTree.add(parse2ResponseAssertion(msAssertion, isIgnoreStatus));
|
||||
}
|
||||
|
||||
public boolean isValid(MsResponseCodeAssertion msAssertion) {
|
||||
return StringUtils.isNotBlank(msAssertion.getCondition());
|
||||
}
|
||||
|
||||
private ResponseAssertion parse2ResponseAssertion(MsResponseCodeAssertion msAssertion) {
|
||||
private ResponseAssertion parse2ResponseAssertion(MsResponseCodeAssertion msAssertion, boolean isIgnoreStatus) {
|
||||
ResponseAssertion assertion = createResponseAssertion();
|
||||
String expectedValue = msAssertion.getExpectedValue();
|
||||
assertion.setEnabled(msAssertion.getEnable());
|
||||
assertion.setAssumeSuccess(true);
|
||||
assertion.setAssumeSuccess(isIgnoreStatus);
|
||||
assertion.setEnabled(msAssertion.getEnable());
|
||||
|
||||
String condition = msAssertion.getCondition();
|
||||
|
|
Loading…
Reference in New Issue