k6负载测试 - 如何从HTML响应中提取值

4

我第一次使用 k6负载测试工具

我发送了一个GET请求,并收到了响应中的html。然后我需要从这个html中提取一些值。

在HTML中,最好的方法是什么?我在文档中看到了可能有帮助的以下3个命令:

Response.body
Selection.find(selector)
Response.json([selector])

以下是HTML内容。我想提取csrf和transId的值。
<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>

我认为使用 Response.body 然后搜索子字符串可以实现此目的。这是最好的方法吗?

2个回答

5

首先,要获取脚本标签的内容,可以这样做:

  const doc = parseHTML(res.body);

  const script = doc.find('head script');
  const scriptContent = script.text();

现在需要从中提取所需的值。
  var SETTINGS = {

     "csrf": "I NEED THIS VALUE",
     "transId": "I ALSO NEED THIS VALUE",
    };

在负载测试脚本中,您将需要进行一些字符串操作,但这不是推荐的方法。不过您可以尝试。

a.substr(28, 15)

获取 CSRF 值和

a.substr(57, 22)

获取transId的值。


0

因为在这种情况下,您可以评估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)
}

你可能需要修剪一些空格或/和"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接