Testing K6:测试生命周期中的授权

Testing K6:测试生命周期中的授权,testing,load-testing,k6,Testing,Load Testing,K6,我一直在阅读K6文档,正在努力找到一种方法来符合K6脚本以满足我的需要。我脑海中想象的情景是: // 1. init code export function setup() { // 2. setup code // The VU would get setup here with authentication once } export default function (data) { // 3. VU code // The VU would run this code

我一直在阅读K6文档,正在努力找到一种方法来符合K6脚本以满足我的需要。我脑海中想象的情景是:

// 1. init code
export function setup() {
  // 2. setup code
  // The VU would get setup here with authentication once
}
export default function (data) {
  // 3. VU code
  // The VU would run this code a repeated amount of times
}
export function teardown(data) {
  // 4. teardown code
  // The VU would be deauthed here after the VU code has ran its course
不幸的是,从我在这里读到的内容来看,我的理解是上述场景是不可能的。“
设置
在测试开始时调用,在初始阶段之后,在VU阶段之前(默认功能),在测试结束时调用拆卸,在VU阶段之后(
默认
功能)。因此,在执行
设置
拆卸
功能时,VU编号为0。”我认为这意味着在上述场景中,所有VU都将使用相同的身份验证来运行VU代码,而不是每个VU都获得自己的单独身份验证

如果我只是排除设置和拆卸部分,那么每个VU将在每个循环上获得新的身份验证:

export default function (data) {
  // 3. VU code
  // VU gets authenticated
  // VU does a bunch of stuff
  // VU clears authentication
}

是否有一种方法可以按照我的意图设计K6脚本(VU验证一次->VU代码循环->最后一次取消授权)?

是的,每个测试运行的设置和拆卸都是全局的

有一个大约每个VU的设置/拆卸,但它没有被优先考虑,因为有。。。其他似乎更重要的东西:)

我还想指出,setup、teardown和default代码在单独的JS vm中运行,其中唯一的共享内存(并在它们之间复制)是setup返回的
数据,它是default和teardown的第一个参数

目前有两种解决方法(成功率各不相同):

  • 如果您对不进行反身份验证(在很多情况下,这对反身份验证很好),您可以在第一次迭代时使用类似于
    If(uu ITER==0){authenticate();}
  • 使用这样一个事实,即
    setup
    可以返回一个对象数组,并对
    setup
    代码中的所有VU进行身份验证,然后每个VU都可以获得身份验证(我猜这是某种令牌)对于执行
    默认
    功能的VU,使用从
    1
    开始的
    变量从阵列中提取。稍后,
    teardown
    将获得相同的数组,并可以对所有内容进行反身份验证。您可能需要增加一些]超时]()和/或使用
  • 取决于您将如何准确地进行身份验证和取消身份验证。。。可能还有更好的选择:)