K6:测试生命周期中的授权
K6: Authorization in the Test Life Cycle
我一直在通读 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
在测试开始时调用,在初始化阶段之后但在 VU 阶段之前(默认函数),在测试结束时调用 teardown,在 VU 阶段之后(default
函数)。因此,在执行 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验证一次-> VU代码循环->最后一次验证)?
是的,根据测试,设置和拆卸是全局的 运行。
每个 VU setup/teardown 有一个 issue,但它没有被高度优先考虑,因为有...其他看起来更重要的东西:)。
我还想指出,设置、拆卸和默认代码是 运行 在 单独的 JS 虚拟机中,其中唯一的共享内存(它是在它们之间复制)是由设置 return 编辑的 data
并且是默认和拆卸的第一个参数。
目前有两种解决方法(成功率各不相同):
- 如果您可以不取消身份验证(在很多情况下取消身份验证很好),您可以在第一次迭代时使用类似
if (__ITER == 0) { authenticate(); }
的代码进行身份验证
- 利用
setup
可以 return 对象数组的事实,并验证 setup
代码中的所有 VU,然后每个 VU 都可以获得他们的验证(我猜是某种标记)从使用 __VU
变量的数组开始,对于执行 default
函数的 VU,从 1
开始。稍后 teardown
将获得相同的数组并且可以取消验证所有内容。您可能需要增加一些]超时](https://k6.io/docs/using-k6/options#setup-timeout) and/or use http.batch.
取决于您将如何准确地进行身份验证和取消身份验证……可能有更好的选择:)。
我一直在通读 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
在测试开始时调用,在初始化阶段之后但在 VU 阶段之前(默认函数),在测试结束时调用 teardown,在 VU 阶段之后(default
函数)。因此,在执行 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验证一次-> VU代码循环->最后一次验证)?
是的,根据测试,设置和拆卸是全局的 运行。
每个 VU setup/teardown 有一个 issue,但它没有被高度优先考虑,因为有...其他看起来更重要的东西:)。
我还想指出,设置、拆卸和默认代码是 运行 在 单独的 JS 虚拟机中,其中唯一的共享内存(它是在它们之间复制)是由设置 return 编辑的 data
并且是默认和拆卸的第一个参数。
目前有两种解决方法(成功率各不相同):
- 如果您可以不取消身份验证(在很多情况下取消身份验证很好),您可以在第一次迭代时使用类似
if (__ITER == 0) { authenticate(); }
的代码进行身份验证
- 利用
setup
可以 return 对象数组的事实,并验证setup
代码中的所有 VU,然后每个 VU 都可以获得他们的验证(我猜是某种标记)从使用__VU
变量的数组开始,对于执行default
函数的 VU,从1
开始。稍后teardown
将获得相同的数组并且可以取消验证所有内容。您可能需要增加一些]超时](https://k6.io/docs/using-k6/options#setup-timeout) and/or use http.batch.
取决于您将如何准确地进行身份验证和取消身份验证……可能有更好的选择:)。