Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript K6负载测试-如何从html响应中提取值_Javascript_Load Testing_K6 - Fatal编程技术网

Javascript K6负载测试-如何从html响应中提取值

Javascript K6负载测试-如何从html响应中提取值,javascript,load-testing,k6,Javascript,Load Testing,K6,我第一次使用K6负载测试工具 我发送一个GET请求,并在响应中发送html。然后我需要从这个html中提取一些值 在html中实现这一点的最佳方法是什么?我在文档中看到,以下3个命令可能会有所帮助: Response.body Selection.find(selector) Response.json([selector]) HTML如下所示。我想提取csrf和transId的值 <html lang="en"> <head> <l

我第一次使用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>

变量设置={
“csrf”:“我需要这个值”,
“transId”:“我也需要这个值”,
};

我想我可以使用Response.body,然后搜索子字符串。这是最好的方法吗?

首先,要获取脚本标记的内容,您可以

  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值。

因为在本例中,您有javascript,您可以对其求值并获取如下值

从“k6/html”导入html;
导出默认函数(){
var res=`
变量设置={
“csrf”:“我需要这个值”,
“transId”:“我也需要这个值”,
};
`
var b=html.parseHTML(res.find(“脚本”).text();
控制台日志(b);
var设置=评估(b+“设置;”);
console.log(settings.csrf);
}
这样你就不需要知道这些值的确切位置,你可以从中得到更多的值。。。容易地;)

正如另一个答案所提到的,在负载测试脚本中,这可能不是一个好主意——尤其是负载测试部分——如果在某些设置代码中是这样的话,它可能是好的

注:
;设置
是因为
eval
返回最后一个值,所以我们需要将设置放在最后;)

或者,您可以编写一个助手函数来完成Aalok手工完成的工作:

导出默认函数(){
var res=`
变量设置={
“csrf”:“我需要这个值”,
“transId”:“我也需要这个值”,
};
`
日志(getLabel(res,“csrf”);
日志(getLabel(res,“transId”);
}
函数getLabel(内容、标签){
var start=content.indexOf(““'+label+”:“)+label.length+3;
var nextComma=content.indexOf(“,”,start);
var nextCurly=content.indexOf('}',start);
var end=Math.min(nextComma,nextCurly);
返回content.substring(开始、结束)
}
您可能需要修剪一些空格或/和