因为在这种情况下,您可以评估JavaScript并获取值
import html from "k6/html";
export default function () {
var res = `<html lang="en">
<head>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<script data-container="true" nonce="ekqlmSlKlpMlCSDxgP6erg==">
var SETTINGS = {
"csrf": "I NEED THIS VALUE",
"transId": "I ALSO NEED THIS VALUE",
};
</script>
</head>
<body>
</body>
</html>
`
var b = html.parseHTML(res).find("script").text();
console.log(b);
var settings = eval(b + ";SETTINGS;");
console.log(settings.csrf);
}
这样,您就不需要知道值的确切位置,可以轻松地获取更多的值... ;)
正如其他回答中提到的那样,在负载测试脚本中可能不是一个好主意 - 特别是在负载测试部分 - 如果这是一些设置代码中的话,那么可能没问题。
注意: ;SETTINGS;
是因为 eval
返回最后一个值,所以我们需要把 SETTINGS 放在最后 ;)
或者,您可以编写一个帮助函数手动执行 Aalok 所做的操作:
export default function () {
var res = `<html lang="en">
<head>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<script data-container="true" nonce="ekqlmSlKlpMlCSDxgP6erg==">
var SETTINGS = {
"csrf": "I NEED THIS VALUE",
"transId": "I ALSO NEED THIS VALUE",
};
</script>
</head>
<body>
</body>
</html>
`
console.log(getLabel(res, "csrf"));
console.log(getLabel(res, "transId"));
}
function getLabel(content, label) {
var start = content.indexOf('"'+label+'":') + label.length + 3;
var nextComma = content.indexOf(',', start);
var nextCurly = content.indexOf('}', start);
var end = Math.min(nextComma,nextCurly);
return content.substring(start,end)
}
你可能需要修剪一些空格或/和"