如何在无服务器系统中从随机JSON索引中捕获属性

如何在无服务器系统中从随机JSON索引中捕获属性,json,jsonpath,artillery,Json,Jsonpath,Artillery,在Carols中,如何在GET返回的JSON数组中捕获随机索引的属性,以便后续文章均匀分布在资源中 我用它来运行一个负载测试,在引擎盖下使用carols.io 我的很多场景如下所示: - get: url: "/resource" capture: json: "$[0].id" as: "resource_id" - post:

在Carols中,如何在GET返回的JSON数组中捕获随机索引的属性,以便后续文章均匀分布在资源中

我用它来运行一个负载测试,在引擎盖下使用carols.io

我的很多场景如下所示:

      -
        get:
          url: "/resource"
          capture:
            json: "$[0].id"
            as: "resource_id"
      -
        post:
          url: "/resource/{{ resource_id }}/subresource"
          json:
            body: "Example"
获取资源列表,然后发布到其中一个资源

如您所见,我使用
capture
从JSON响应中捕获ID。我的问题是它总是从数组的第一个索引获取id

这将意味着在我的负载测试中,我最终会完全攻击一个资源,而不是均匀地攻击它们,这将是一种更可能的情况

我希望能够做到以下几点:

capture:
  json: "$[RANDOM].id
  as: "resource_id"

但是,我在JSONPath定义中找不到任何允许我这样做的内容。

在自定义JS代码中定义setResourceId函数,并告诉Carol炮加载自定义代码,请将config.processor设置为JS文件路径:

处理器:“./custom code.js”

包含以下函数的custom-code.js文件

function setResourceId(context, next) {
    const randomIndex = Math.round(Math.random() * context.vars.resources.length);
    context.vars.resourceId = context.vars.resources[randomIndex].id;
}

在自定义JS代码中定义setResourceId函数,并告诉Carolutions加载自定义代码,请将config.processor设置为JS文件路径:

处理器:“./custom code.js”

包含以下函数的custom-code.js文件

function setResourceId(context, next) {
    const randomIndex = Math.round(Math.random() * context.vars.resources.length);
    context.vars.resourceId = context.vars.resources[randomIndex].id;
}