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

Posted

技术标签:

【中文标题】K6:测试生命周期中的授权【英文标题】:K6: Authorization in the Test Life Cycle 【发布时间】:2020-11-11 23:47:26 【问题描述】:

我一直在阅读 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

不幸的是,根据我在这里读到的内容:https://k6.io/docs/using-k6/test-life-cycle,我的理解是上述情况是不可能的。 "setup 在测试开始时调用,在 init 阶段之后但在 VU 阶段(默认函数)之前,在测试结束时,在 VU 阶段(default 函数)之后调用teardown。因此, 在执行setupteardown 函数时,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 Authenticates once -> VU code loop -> Deauth at the end once)?

【问题讨论】:

【参考方案1】:

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

有一个关于每个 VU 设置/拆卸的 issue,但它并没有被高度优先考虑,因为还有......其他看起来更重要的东西:)。

我还想指出,设置、拆卸和默认代码在单独 JS VM 中运行,其中唯一的共享内存(并且在它们之间复制)是data由 setup 返回,是 default 和 teardown 的第一个参数。

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

    如果您可以不取消身份验证(在很多情况下可以取消身份验证),您可以在第一次迭代时使用类似if (__ITER == 0) authenticate(); 的代码进行身份验证 使用setup 可以返回一个对象数组并在setup 代码中验证所有VU 的事实,然后每个VU 可以从数组中获取它们的验证(我猜它是某种令牌)使用对于执行default 函数的VU,__VU 变量从1 开始。稍后teardown 将获得相同的数组并可以取消对所有内容的身份验证。您可能需要增加一些]timeouts](https://k6.io/docs/using-k6/options#setup-timeout) 和/或使用http.batch。

取决于您将如何进行身份验证和取消身份验证...可能会有更好的选择:)。

【讨论】:

以上是关于K6:测试生命周期中的授权的主要内容,如果未能解决你的问题,请参考以下文章

Maven的生命周期阶段

Maven生命周期

Maven进价:Maven的生命周期阶段

3天学会撰写软件发明专利——3.生命周期

3天学会撰写软件发明专利——3.生命周期

3天学会撰写软件发明专利——3.生命周期