为了账号安全,请及时绑定邮箱和手机立即绑定

K6 负载测试 - 如何为整个测试运行制作顺序 ID

K6 负载测试 - 如何为整个测试运行制作顺序 ID

万千封印 2022-12-22 14:28:33
我有一个 api 端点,每个请求都需要一个不同的 id ,但是如何为所有 VU 共享的每个迭代创建一个 id 全局和顺序增量,就像数据库表上的主键一样。前任:request 1 : <id>400</id> VU :1request 2 : <id>401</id> VU :1request 1 : <id>402</id> VU :2request 3 : <id>403</id> VU :1request 4 : <id>404</id> VU :1request 2 : <id>405</id> VU :2request 3 : <id>406</id> VU :2有没有办法声明一个由整个测试共享的变量?Setup 和 Init 是针对每个 VU 的,根据文档不能共享数据。
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

对于任何寻找生成序列号的方法的人。从 v0.0.34 版本开始,k6/execution被引入,它有iterationInTest一个整数属性,描述为:


场景中当前迭代的唯一且从零开始的序号。它在所有 k6 执行模式中都是独一无二的——在本地、云和分布式/分段测试运行中。然而,虽然每个实例在云/分布式测试中都会获得非重叠的索引值,但它们可能会以不同的速度迭代它们,因此这些值不会在它们之间是连续的。


这可以在您的测试代码中用于生成序列号,例如:


import exec from 'k6/execution':


export default function () {

  const url = `https://foo.bar/${exec.scenario.iterationInTest}`;

  http.get(url)

}

我能够为测试的每次迭代增加一个数字。


查看完整回答
反对 回复 2022-12-22
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这并不容易实现,因为每个 VU 都在单独的 JavaScript VM 中运行,并且它们之间不共享内存。有关详细信息,请参阅测试生命周期文档。这样做是为了允许测试运行分布在 k6 实例之间,因此在它们之间同步数据将需要外部解决方案。

您可以采用的一种方法是跟踪并增加 Web 服务中的 ID,您的 k6 脚本可以查询该 ID 以从中获取下一个 ID。Redis 可以很好地满足这个目的,请参阅此相关答案以获取想法。但请注意,任何此类解决方案都会影响您的测试结束测试指标和测试本身的性能,因此它并不理想,但我没有看到更好的方法。


查看完整回答
反对 回复 2022-12-22
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号