我是api测试的初学者,我正在使用test-cafe
,并且已经编写了使用 RequestHook 发出GET
请求的测试,效果很好,我能够获取数据,但是当我尝试使用相同的 RequestHook 发出POST
请求时,我在发送请求时无法发送数据,因为它需要类型的缓冲区。
我无法将JSON类型的数据转换为缓冲区。发出POST
请求时。
我想知道这是否是使用 RequestHook 发出POST
请求的正确方法,还是我们需要使用 RequestLogger 发出{{1} }请求?如果两种方法都不正确,您可以指导我使用test-cafe进行有关api测试的任何教程!
POST
预期的结果是,发布请求成功后,它应该赋予状态200,但是目前,它无法调用上述api端点,因为它无法将JSON数据转换为缓冲区。 / p>
答案 0 :(得分:3)
已创建RequestHook
来模拟或记录测试请求,但不能创建请求。如果要发送请求并从服务器接收答案,请使用request或request-promise模块。
答案 1 :(得分:1)
我在发出API请求时使用ClientFunction。这并不理想,我相信TestCafe的积压订单上有一个t.request
命令...
以下是使用ClientFunction通过fetch
发送API请求的示例:
import { ClientFunction, t } from 'testcafe';
const fetchRequestClientFunction = ClientFunction((details, endpoint, method) => {
return window
.fetch(endpoint, {
method,
credentials: 'include',
headers: new Headers({
accept: 'application/json',
'Content-Type': 'application/json',
}),
body: JSON.stringify(details),
})
.then(httpResponse => {
if (httpResponse.ok) {
return httpResponse.json();
}
return {
err: true,
errorMessage: 'There was an error trying to send the data',
};
});
});
const createFetchRequest = async (details, endpoint, method = 'POST') => {
const apiResponse = await fetchRequestClientFunction(details, endpoint, method);
await t.expect(apiResponse.err).eql(undefined, apiResponse.errorMessage);
return apiResponse;
};
export default createFetchRequest;
我们怎么称呼它:
import createFetchRequest from '../custom_commands/createFetchRequest';
import linksAPI from '../helpers/linksAPI';
const userEndpoint = linksAPI.users;
export const createUserViaApi = async userDetails => {
const apiResponse = await createFetchRequest(userDetails, userEndpoint);
return { apiResponse };
};
export const updateUserViaApi = async userDetails => {
const apiResponse = await createFetchRequest(userDetails, `${userEndpoint}/${userDetails.id}`, 'PUT');
return { apiResponse };
};