如何在K6 JavaScript中去除请求体的转义字符?
解决K6中从JSON文件读取请求体时的转义字符问题
问题本质
你看到的日志里的转义字符是正常现象,不是数据本身有问题。JSON.stringify()生成的字符串里的转义双引号是JSON语法要求的,k6控制台输出时会显示这些转义符,但实际发送给服务器的请求体是符合规范的,服务器能正确解析。
正确的代码写法
别把整个配置对象转成字符串,直接用解析后的对象里的requestBody发送POST请求就行,修改后的script.js如下:
// To perform testing import http from 'k6/http' import { open } from 'k6/fs'; const host = __ENV.HOST; console.log(`Testing host = ${host}`); // Ignore certificates export const options = { insecureSkipTLSVerify: true }; // 读取并解析API配置,直接保留对象格式(取第一个请求配置) const apiConfig = JSON.parse(open('./APIs.json')).apiRequests[0]; // K6 Main function export default function() { // 构造请求URL const url = `https://${host}${apiConfig.requestEndpoint}`; // 把请求头数组转成k6需要的对象格式 const headers = {}; apiConfig.requestHeaders.forEach(header => { const [key, value] = Object.entries(header)[0]; // 替换Authorization里的占位符(如果有环境变量的话) headers[key] = value.replace('$ACCESS_TOKEN', __ENV.ACCESS_TOKEN || ''); }); // 发送POST请求,直接用requestBody转成JSON字符串 const response = http.post(url, JSON.stringify(apiConfig.requestBody), { headers }); console.log(`POST请求响应状态: ${response.status}`); }
为什么日志里会有转义符?
当你用模板字符串console.log(Stringify = ${apiRequests})输出JSON字符串时,JavaScript会自动转义字符串里的双引号,这是为了让日志能正确显示完整的字符串内容——不然双引号会被当成字符串的结束标记。但这只是显示问题,实际发送的请求体没有额外的转义问题,服务器能正常解析。
你不需要刻意让日志里没有转义符,这完全不影响功能。
内容的提问来源于stack exchange,提问作者Reddy Rohit
相关产品推荐
相关产品推荐

