报告门户不将日志附加到报告
Report Portal Does not Attach Logs to Report
我正在研究一种将报告日志发送到报告门户并附有屏幕截图的方法。我正在使用 XmlHttpRequest 模块来访问报告门户日志端点。这是我的代码。但是此代码不起作用,而是我收到“json_request_part 丢失”响应消息。我做错了什么,我按照这里的文档 docs
try {
const request = new XMLHttpRequest();
const body = {
itemUuid: 'gsgasgh-dsjdbbdjsbd',
launchUuid: 'hshu1qqqqjjhdh-ddjdh',
time: '1555677888',
message: 'failed',
level: 40000,
file: {
name: 'screenshot.png',
},
};
request.open('POST', `http://rp.com/my_project/log`, false); // `false` makes the request synchronous
request.setRequestHeader('Content-Type', 'multipart/form-data');
request.setRequestHeader('Authorization', `Bearer ${config.token}`);
request.send(JSON.stringify(body));
if (request.status >= 200 && request.status <= 299) {
const { responseText } = request;
console.log(responseText);
} else {
console.log(`Unexpected Response Returned: ${request.responseText}`);
}
} catch (error) {
console.log(error.message);
}
};
发送二进制数据有点复杂,您必须以特殊格式形成多部分请求。格式还不错described in this guide。请注意,您的请求的第一部分应包含 JSON 以及来自 multipart 的其他部分的日志消息和文件名。
此外,there is already implementation for Javascript 由 ReportPortal 的团队维护。
您可能还会发现这个片段有帮助:
buildMultiPartStream(jsonPart, filePart, boundary) {
const eol = "\r\n";
const bx = `--${boundary}`;
const buffers = [
// eslint-disable-next-line function-paren-newline
Buffer.from(
// eslint-disable-next-line prefer-template
bx + eol + "Content-Disposition: form-data; name=\"json_request_part\""
+ eol + "Content-Type: application/json" + eol
+ eol + eol + JSON.stringify(jsonPart) + eol,
),
// eslint-disable-next-line function-paren-newline
Buffer.from(
// eslint-disable-next-line prefer-template
bx + eol + "Content-Disposition: form-data; name=\"file\"; filename=\"" + filePart.name + "\"" + eol
+ "Content-Type: " + filePart.type + eol + eol,
),
Buffer.from(filePart.content, 'base64'),
Buffer.from(`${eol + bx}--${eol}`),
];
return Buffer.concat(buffers);
}
我正在研究一种将报告日志发送到报告门户并附有屏幕截图的方法。我正在使用 XmlHttpRequest 模块来访问报告门户日志端点。这是我的代码。但是此代码不起作用,而是我收到“json_request_part 丢失”响应消息。我做错了什么,我按照这里的文档 docs
try {
const request = new XMLHttpRequest();
const body = {
itemUuid: 'gsgasgh-dsjdbbdjsbd',
launchUuid: 'hshu1qqqqjjhdh-ddjdh',
time: '1555677888',
message: 'failed',
level: 40000,
file: {
name: 'screenshot.png',
},
};
request.open('POST', `http://rp.com/my_project/log`, false); // `false` makes the request synchronous
request.setRequestHeader('Content-Type', 'multipart/form-data');
request.setRequestHeader('Authorization', `Bearer ${config.token}`);
request.send(JSON.stringify(body));
if (request.status >= 200 && request.status <= 299) {
const { responseText } = request;
console.log(responseText);
} else {
console.log(`Unexpected Response Returned: ${request.responseText}`);
}
} catch (error) {
console.log(error.message);
}
};
发送二进制数据有点复杂,您必须以特殊格式形成多部分请求。格式还不错described in this guide。请注意,您的请求的第一部分应包含 JSON 以及来自 multipart 的其他部分的日志消息和文件名。 此外,there is already implementation for Javascript 由 ReportPortal 的团队维护。 您可能还会发现这个片段有帮助:
buildMultiPartStream(jsonPart, filePart, boundary) {
const eol = "\r\n";
const bx = `--${boundary}`;
const buffers = [
// eslint-disable-next-line function-paren-newline
Buffer.from(
// eslint-disable-next-line prefer-template
bx + eol + "Content-Disposition: form-data; name=\"json_request_part\""
+ eol + "Content-Type: application/json" + eol
+ eol + eol + JSON.stringify(jsonPart) + eol,
),
// eslint-disable-next-line function-paren-newline
Buffer.from(
// eslint-disable-next-line prefer-template
bx + eol + "Content-Disposition: form-data; name=\"file\"; filename=\"" + filePart.name + "\"" + eol
+ "Content-Type: " + filePart.type + eol + eol,
),
Buffer.from(filePart.content, 'base64'),
Buffer.from(`${eol + bx}--${eol}`),
];
return Buffer.concat(buffers);
}