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。因此, 在执行setup
和teardown
函数时,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:测试生命周期中的授权的主要内容,如果未能解决你的问题,请参考以下文章