refactor(接口测试): 优化前后置和断言的解析
This commit is contained in:
parent
335e298b27
commit
a6d3c97375
|
@ -47,7 +47,7 @@ public abstract class AbstractJmeterElementConverter<T extends MsTestElement> {
|
|||
if (element != null && element.getChildren() != null) {
|
||||
element.getChildren().forEach(child ->
|
||||
getConverterFunc.apply(child.getClass())
|
||||
.toHashTree(tree, element, config));
|
||||
.toHashTree(tree, child, config));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
package io.metersphere.api.dto.request;
|
||||
|
||||
import io.metersphere.api.dto.request.assertion.MsAssertionConfig;
|
||||
import io.metersphere.api.dto.request.processors.MsProcessorConfig;
|
||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 协议插件中通用的配置
|
||||
* 添加到对应元素的 children 属性中
|
||||
* @Author: jianxing
|
||||
* @CreateTime: 2023-12-25 10:50
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MsCommonElement extends AbstractMsTestElement {
|
||||
/**
|
||||
* 前置处理器配置
|
||||
*/
|
||||
private MsProcessorConfig preProcessorConfig;
|
||||
/**
|
||||
* 后置处理器配置
|
||||
*/
|
||||
private MsProcessorConfig postProcessorConfig;
|
||||
/**
|
||||
* 断言配置
|
||||
*/
|
||||
private MsAssertionConfig assertionConfig;
|
||||
}
|
|
@ -1,10 +1,8 @@
|
|||
package io.metersphere.api.dto.request.http;
|
||||
|
||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||
import io.metersphere.api.dto.request.assertion.MsAssertionConfig;
|
||||
import io.metersphere.api.dto.request.http.auth.HTTPAuth;
|
||||
import io.metersphere.api.dto.request.http.body.Body;
|
||||
import io.metersphere.api.dto.request.processors.MsProcessorConfig;
|
||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
@ -51,16 +49,4 @@ public class MsHTTPElement extends AbstractMsTestElement {
|
|||
* 认证配置
|
||||
*/
|
||||
private HTTPAuth authConfig;
|
||||
/**
|
||||
* 前置处理器配置
|
||||
*/
|
||||
private MsProcessorConfig preProcessorConfig;
|
||||
/**
|
||||
* 后置处理器配置
|
||||
*/
|
||||
private MsProcessorConfig postProcessorConfig;
|
||||
/**
|
||||
* 断言配置
|
||||
*/
|
||||
private MsAssertionConfig assertionConfig;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package io.metersphere.api.parser.jmeter;
|
||||
|
||||
|
||||
import io.metersphere.api.dto.request.MsCommonElement;
|
||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||
import io.metersphere.plugin.api.spi.AbstractJmeterElementConverter;
|
||||
import org.apache.jorphan.collections.HashTree;
|
||||
|
||||
/**
|
||||
* @Author: jianxing
|
||||
* @CreateTime: 2023-10-27 10:07
|
||||
* <p>
|
||||
* 脚本解析器
|
||||
*/
|
||||
public class MsCommonElementConverter extends AbstractJmeterElementConverter<MsCommonElement> {
|
||||
|
||||
|
||||
@Override
|
||||
public void toHashTree(HashTree tree, MsCommonElement element, ParameterConfig config) {
|
||||
// todo 解析前后置和断言
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.SerializationFeature;
|
|||
import com.fasterxml.jackson.databind.json.JsonMapper;
|
||||
import com.fasterxml.jackson.databind.jsontype.NamedType;
|
||||
import com.fasterxml.jackson.databind.type.CollectionType;
|
||||
import io.metersphere.api.dto.request.MsCommonElement;
|
||||
import io.metersphere.api.dto.request.http.MsHTTPElement;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
|
||||
|
@ -32,6 +33,7 @@ public class ApiDataUtils {
|
|||
static {
|
||||
// 默认内置的子组件
|
||||
namedTypes.add(new NamedType(MsHTTPElement.class, MsHTTPElement.class.getSimpleName()));
|
||||
namedTypes.add(new NamedType(MsCommonElement.class, MsCommonElement.class.getSimpleName()));
|
||||
|
||||
setObjectMapper(objectMapper);
|
||||
namedTypes.forEach(objectMapper::registerSubtypes);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.metersphere.api.utils;
|
||||
|
||||
import io.metersphere.api.parser.jmeter.MsCommonElementConverter;
|
||||
import io.metersphere.api.parser.jmeter.MsHTTPElementConverter;
|
||||
import io.metersphere.plugin.api.spi.AbstractJmeterElementConverter;
|
||||
import io.metersphere.plugin.api.spi.MsTestElement;
|
||||
|
@ -25,6 +26,7 @@ public class JmeterElementConverterRegister {
|
|||
static {
|
||||
// 注册默认的转换器 todo 注册插件的转换器
|
||||
JmeterElementConverterRegister.register(MsHTTPElementConverter.class);
|
||||
JmeterElementConverterRegister.register(MsCommonElementConverter.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,7 +5,9 @@ import io.metersphere.api.domain.ApiDebug;
|
|||
import io.metersphere.api.domain.ApiDebugBlob;
|
||||
import io.metersphere.api.domain.ApiFileResource;
|
||||
import io.metersphere.api.dto.debug.*;
|
||||
import io.metersphere.api.dto.request.MsCommonElement;
|
||||
import io.metersphere.api.dto.request.MsScenario;
|
||||
import io.metersphere.api.dto.request.assertion.MsAssertionConfig;
|
||||
import io.metersphere.api.dto.request.http.MsHTTPElement;
|
||||
import io.metersphere.api.dto.request.http.body.Body;
|
||||
import io.metersphere.api.mapper.ApiDebugBlobMapper;
|
||||
|
@ -61,6 +63,7 @@ import org.springframework.mock.web.MockMultipartFile;
|
|||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.testcontainers.shaded.org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static io.metersphere.api.controller.result.ApiResultCode.API_DEBUG_EXIST;
|
||||
|
@ -408,15 +411,51 @@ public class ApiDebugControllerTests extends BaseTest {
|
|||
// @@请求成功
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
// 测试 FORM_DATA
|
||||
// 测试断言
|
||||
MsAssertionConfig msAssertionConfig = new MsAssertionConfig();
|
||||
msAssertionConfig.setEnableGlobal(false);
|
||||
msAssertionConfig.setAssertions(MsHTTPElementTest.getGeneralAssertions());
|
||||
MsCommonElement msCommonElement = new MsCommonElement();
|
||||
msCommonElement.setAssertionConfig(msAssertionConfig);
|
||||
LinkedList linkedList = new LinkedList();
|
||||
linkedList.add(msCommonElement);
|
||||
msHTTPElement = MsHTTPElementTest.getMsHttpElement();
|
||||
msHTTPElement.setChildren(linkedList);
|
||||
msHTTPElement.setEnable(true);
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
// 测试请求体
|
||||
MockMultipartFile file = getMockMultipartFile();
|
||||
String fileId = doUploadTempFile(file);
|
||||
request.setTempFileIds(List.of(fileId, fileMetadataId));
|
||||
msHTTPElement = MsHTTPElementTest.getMsHttpElement();
|
||||
Body generalBody = MsHTTPElementTest.getGeneralBody();
|
||||
generalBody.setBodyType(Body.BodyType.FORM_DATA.name());
|
||||
msHTTPElement = MsHTTPElementTest.getMsHttpElement();
|
||||
msHTTPElement.setBody(generalBody);
|
||||
msHTTPElement.setEnable(true);
|
||||
testBodyParse(request, msHTTPElement, generalBody);
|
||||
|
||||
// 增加覆盖率
|
||||
msHTTPElement.setMethod("GET");
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
msHTTPElement.setEnable(false);
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
// 增加覆盖率
|
||||
new TestElementParserFactory();
|
||||
new ImportParserFactory();
|
||||
MsScenarioConverter msScenarioConverter = new MsScenarioConverter();
|
||||
msScenarioConverter.toHashTree(new ListedHashTree(), new MsScenario(), new ParameterConfig());
|
||||
|
||||
// @@校验权限
|
||||
requestPostPermissionTest(PermissionConstants.PROJECT_API_DEBUG_EXECUTE, DEBUG, request);
|
||||
}
|
||||
|
||||
private void testBodyParse(ApiDebugRunRequest request, MsHTTPElement msHTTPElement, Body generalBody) throws Exception {
|
||||
// 测试 FORM_DATA
|
||||
generalBody.setBodyType(Body.BodyType.FORM_DATA.name());
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
|
@ -444,23 +483,6 @@ public class ApiDebugControllerTests extends BaseTest {
|
|||
generalBody.setBodyType(Body.BodyType.RAW.name());
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
// 增加覆盖率
|
||||
msHTTPElement.setMethod("GET");
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
msHTTPElement.setEnable(false);
|
||||
request.setRequest(ApiDataUtils.toJSONString(msHTTPElement));
|
||||
this.requestPostWithOk(DEBUG, request);
|
||||
|
||||
// 增加覆盖率
|
||||
new TestElementParserFactory();
|
||||
new ImportParserFactory();
|
||||
MsScenarioConverter msScenarioConverter = new MsScenarioConverter();
|
||||
msScenarioConverter.toHashTree(new ListedHashTree(), new MsScenario(), new ParameterConfig());
|
||||
|
||||
// @@校验权限
|
||||
requestPostPermissionTest(PermissionConstants.PROJECT_API_DEBUG_EXECUTE, DEBUG, request);
|
||||
}
|
||||
|
||||
private TestResourcePool insertResourcePool() {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.metersphere.api.controller;
|
||||
|
||||
import io.metersphere.api.dto.definition.HttpResponse;
|
||||
import io.metersphere.api.dto.request.MsCommonElement;
|
||||
import io.metersphere.api.dto.request.assertion.*;
|
||||
import io.metersphere.api.dto.request.assertion.body.*;
|
||||
import io.metersphere.api.dto.request.http.*;
|
||||
|
@ -20,6 +21,7 @@ import org.junit.jupiter.api.Assertions;
|
|||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -172,8 +174,14 @@ public class MsHTTPElementTest {
|
|||
MsProcessorConfig msProcessorConfig = new MsProcessorConfig();
|
||||
msProcessorConfig.setProcessors(processors);
|
||||
|
||||
msHTTPElement.setPreProcessorConfig(msProcessorConfig);
|
||||
msHTTPElement.setPostProcessorConfig(msProcessorConfig);
|
||||
MsCommonElement msCommonElement = new MsCommonElement();
|
||||
msCommonElement.setPreProcessorConfig(msProcessorConfig);
|
||||
msCommonElement.setPostProcessorConfig(msProcessorConfig);
|
||||
|
||||
LinkedList linkedList = new LinkedList();
|
||||
linkedList.add(msCommonElement);
|
||||
msHTTPElement.setChildren(linkedList);
|
||||
|
||||
String json = ApiDataUtils.toJSONString(msHTTPElement);
|
||||
Assertions.assertNotNull(json);
|
||||
Assertions.assertEquals(ApiDataUtils.parseObject(json, AbstractMsTestElement.class), msHTTPElement);
|
||||
|
@ -183,9 +191,26 @@ public class MsHTTPElementTest {
|
|||
public void msAssertionTest() {
|
||||
|
||||
MsHTTPElement msHTTPElement = getMsHttpElement();
|
||||
List<MsAssertion> assertions = getGeneralAssertions();
|
||||
|
||||
List assertions = new ArrayList<>();
|
||||
MsAssertionConfig msAssertionConfig = new MsAssertionConfig();
|
||||
msAssertionConfig.setEnableGlobal(false);
|
||||
msAssertionConfig.setAssertions(assertions);
|
||||
|
||||
MsCommonElement msCommonElement = new MsCommonElement();
|
||||
msCommonElement.setAssertionConfig(msAssertionConfig);
|
||||
|
||||
LinkedList linkedList = new LinkedList();
|
||||
linkedList.add(msCommonElement);
|
||||
msHTTPElement.setChildren(linkedList);
|
||||
|
||||
String json = ApiDataUtils.toJSONString(msHTTPElement);
|
||||
Assertions.assertNotNull(json);
|
||||
Assertions.assertEquals(ApiDataUtils.parseObject(json, AbstractMsTestElement.class), msHTTPElement);
|
||||
}
|
||||
|
||||
public static List<MsAssertion> getGeneralAssertions() {
|
||||
List<MsAssertion> assertions = new ArrayList<>();
|
||||
ResponseCodeAssertion responseCodeAssertion = new ResponseCodeAssertion();
|
||||
responseCodeAssertion.setCondition(MsAssertionCondition.EMPTY.name());
|
||||
responseCodeAssertion.setValue("value");
|
||||
|
@ -222,14 +247,7 @@ public class MsHTTPElementTest {
|
|||
scriptAssertion.setDescription("1111");
|
||||
scriptAssertion.setName("1111");
|
||||
assertions.add(scriptAssertion);
|
||||
|
||||
MsAssertionConfig msAssertionConfig = new MsAssertionConfig();
|
||||
msAssertionConfig.setEnableGlobal(false);
|
||||
msAssertionConfig.setAssertions(assertions);
|
||||
msHTTPElement.setAssertionConfig(msAssertionConfig);
|
||||
String json = ApiDataUtils.toJSONString(msHTTPElement);
|
||||
Assertions.assertNotNull(json);
|
||||
Assertions.assertEquals(ApiDataUtils.parseObject(json, AbstractMsTestElement.class), msHTTPElement);
|
||||
return assertions;
|
||||
}
|
||||
|
||||
public static MsHTTPElement getMsHttpElement() {
|
||||
|
|
Loading…
Reference in New Issue