首页 > 解决方案 > 使用打乱图像的 K6 压力测试

问题描述

语境

问题

我应该在哪里随机化将在请求中使用的图像和 de id?在“init context”还是“vu context”?

考虑“初始化上下文”的代码

let rand_id = getRandomInt(10000,99999)
let image = open("face"+getRandomInt(0,6)+".jpg","b")

export default function() {
    group("post_request", function() {
        http.post("https://my_api", {
            "id": rand_id,
            "image": http.file(image),
        })
    });
}

考虑“vu context”的代码

let images = []
for (i=0; i <= 6; i++) {
  images.push(open("face"+i+".jpg","b"))
}

export default function() {
    group("post_request", function() {
        http.post("https://my_api", {
            "id": getRandomInt(10000,99999),
            "image": http.file(open(images[getRandomInt(0,6)],"b")),
        })
    });
}

标签: stress-testingk6

解决方案


tl;dr 鉴于您希望它是随机的 - “vu context”

正如在k6 测试生命周期中所解释的,init 上下文在每个 VU 中执行一次(并且在测试开始之前至少再执行 1 次)。

这意味着如果您在初始化上下文中生成随机数,您将为不同 VU 的每次迭代获得相同的“随机”数。这仍然意味着不同的 VU 将具有不同的随机值,如果这对您的用例完全没问题,它们不会在迭代之间改变。

但我猜你想要的是在每次迭代中不断生成一个新的随机 id 并使用相应的 id 和图像。不过,这意味着您需要在 init 上下文中生成一组图像,因为openvu 代码中不可用。所以而不是open(....getRandomInt...)在你应该有的似曾相识代码中images[getRandomInt(0,6)]

此外,作为记录,每个 VU 都将获得图像的OWN副本,因此如果它们很大,或者您没有足够的内存来存储要使用的 VU 数量,这可能是内存问题。


推荐阅读