我有一个api端点,每个请求都需要一个不同的id,但是如何为所有VU共享的每次迭代(例如数据库表上的主键)使id全局和顺序递增。
例如:
request 1 : <id>400</id> VU :1
request 2 : <id>401</id> VU :1
request 1 : <id>402</id> VU :2
request 3 : <id>403</id> VU :1
request 4 : <id>404</id> VU :1
request 2 : <id>405</id> VU :2
request 3 : <id>406</id> VU :2
有没有办法声明整个测试共享的变量? 设置和初始化适用于每个VU,并且根据文档无法共享数据。
答案 0 :(得分:2)
这是不容易做到的,因为每个VU在单独的JavaScript VM中运行,并且它们之间不共享内存。有关详细信息,请参见Test life cycle documentation。这样做是为了允许在k6个实例之间分布测试运行,因此在它们之间同步数据将需要一个外部解决方案。
您可以采用的一种方法是跟踪并增加Web服务中的ID,您的k6脚本可以查询该ID以获取下一个ID。 Redis可以很好地实现此目的,请参见this related answer以获得想法。但是请注意,任何这样的解决方案都会影响您的测试结束时的测试指标和测试本身的性能,因此这不是理想的选择,但是我认为没有更好的方法。