我一直在阅读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阶段之前调用(默认函数),在测试结束时调用teardown (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代码循环->设计结束一次)?
发布于 2020-11-12 08:05:10
是的,每次测试运行时,安装和拆卸都是全局的。
有一个关于每个VU设置/拆卸的问题,但是它没有被高度优先化,因为有.其他似乎更重要的事情:)。
我还想指出,安装、删除和默认代码在单独的VMs中运行,其中惟一的共享内存(以及它们之间的共享内存)是安装程序返回的data,它是默认和删除的第一个参数。
目前有两个解决办法(取得了不同的成功):
if (__ITER == 0) { authenticate(); }的代码进行身份验证。setup可以返回对象数组并对setup代码中的所有VUs进行身份验证的事实,然后每个VU都可以使用执行default函数的__VU变量从数组中获得它们的身份验证(我猜这是某种令牌)。稍后,teardown将得到相同的数组,并可以对所有内容进行身份验证。您可能需要增加一些]超时](https://k6.io/docs/using-k6/options#setup-timeout)和/或使用http.batch。取决于你将如何认证和去认证.也许还有一个更好的选择:)。
https://stackoverflow.com/questions/64795860
复制相似问题