feat(接口测试): 导入 curl 支持请求体
This commit is contained in:
parent
2586b73b9a
commit
d74d6bf190
|
@ -468,6 +468,7 @@ export interface CurlParseResult {
|
|||
method: RequestMethods | string;
|
||||
url: string;
|
||||
headers: Record<string, any>;
|
||||
body: string;
|
||||
body: Record<string, any>;
|
||||
bodyType: RequestBodyFormat;
|
||||
queryParams: Record<string, any>;
|
||||
}
|
||||
|
|
|
@ -7,9 +7,10 @@ import {
|
|||
type ResponseDefinition,
|
||||
} from '@/models/apiTest/common';
|
||||
import type { MockBody } from '@/models/apiTest/mock';
|
||||
import { RequestConditionProcessor, RequestParamsType } from '@/enums/apiEnum';
|
||||
import { RequestBodyFormat, RequestConditionProcessor, RequestParamsType } from '@/enums/apiEnum';
|
||||
|
||||
import {
|
||||
defaultBodyParams,
|
||||
defaultBodyParamsItem,
|
||||
defaultHeaderParamsItem,
|
||||
defaultKeyValueParamItem,
|
||||
|
@ -273,3 +274,47 @@ export function filterAssertions(assertionConfig: ExecuteAssertionConfig, isExec
|
|||
};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析 curl 结果中的 body 参数
|
||||
* @param bodyType body 类型
|
||||
* @param body body 参数对象
|
||||
*/
|
||||
export function parseCurlBody(bodyType: RequestBodyFormat, body: Record<string, any>) {
|
||||
const requestBody = cloneDeep(defaultBodyParams);
|
||||
switch (bodyType) {
|
||||
case RequestBodyFormat.JSON:
|
||||
requestBody.bodyType = bodyType;
|
||||
requestBody.jsonBody = {
|
||||
...cloneDeep(defaultBodyParams.jsonBody),
|
||||
enableJsonSchema: false,
|
||||
jsonValue: JSON.stringify(body),
|
||||
};
|
||||
break;
|
||||
case RequestBodyFormat.FORM_DATA:
|
||||
requestBody.bodyType = bodyType;
|
||||
requestBody.formDataBody = {
|
||||
...cloneDeep(defaultBodyParams.formDataBody),
|
||||
formValues: Object.keys(body).map((e) => ({
|
||||
...defaultBodyParamsItem,
|
||||
key: e,
|
||||
value: body[e],
|
||||
})),
|
||||
};
|
||||
break;
|
||||
case RequestBodyFormat.WWW_FORM:
|
||||
requestBody.bodyType = bodyType;
|
||||
requestBody.wwwFormBody = {
|
||||
...cloneDeep(defaultBodyParams.wwwFormBody),
|
||||
formValues: Object.keys(body).map((e) => ({
|
||||
...defaultBodyParamsItem,
|
||||
key: e,
|
||||
value: body[e],
|
||||
})),
|
||||
};
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return requestBody;
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
} from '@/enums/apiEnum';
|
||||
|
||||
import { defaultBodyParams, defaultResponse } from '../components/config';
|
||||
import { parseRequestBodyFiles } from '../components/utils';
|
||||
import { parseCurlBody, parseRequestBodyFiles } from '../components/utils';
|
||||
|
||||
const route = useRoute();
|
||||
const { t } = useI18n();
|
||||
|
@ -250,7 +250,8 @@
|
|||
}
|
||||
|
||||
function handleImportCurlDone(res: CurlParseResult) {
|
||||
const { url, method, headers, queryParams } = res;
|
||||
const { url, method, headers, queryParams, bodyType, body } = res;
|
||||
const requestBody = parseCurlBody(bodyType, body);
|
||||
addDebugTab({
|
||||
url,
|
||||
method: method?.toUpperCase() || RequestMethods.GET,
|
||||
|
@ -274,6 +275,7 @@
|
|||
key: e,
|
||||
value: queryParams[e],
|
||||
})) || [],
|
||||
body: requestBody,
|
||||
});
|
||||
importDialogVisible.value = false;
|
||||
nextTick(() => {
|
||||
|
|
|
@ -418,6 +418,7 @@
|
|||
filterAssertions,
|
||||
filterConditionsSqlValidParams,
|
||||
filterKeyValParams,
|
||||
parseCurlBody,
|
||||
parseRequestBodyFiles,
|
||||
} from '@/views/api-test/components/utils';
|
||||
import type { Api } from '@form-create/arco-design';
|
||||
|
@ -1282,7 +1283,8 @@
|
|||
|
||||
const importDialogVisible = ref(false);
|
||||
function handleImportCurlDone(res: CurlParseResult) {
|
||||
const { url, method, headers, queryParams } = res;
|
||||
const { url, method, headers, queryParams, bodyType, body } = res;
|
||||
const requestBody = parseCurlBody(bodyType, body);
|
||||
requestVModel.value.url = url;
|
||||
requestVModel.value.method = method;
|
||||
requestVModel.value.headers = Object.keys(headers).map((e) => ({
|
||||
|
@ -1295,6 +1297,7 @@
|
|||
key: e,
|
||||
value: queryParams[e],
|
||||
}));
|
||||
requestVModel.value.body = requestBody;
|
||||
importDialogVisible.value = false;
|
||||
nextTick(() => {
|
||||
handleActiveDebugChange();
|
||||
|
|
Loading…
Reference in New Issue