K6 负载测试 - 如何为整个测试制作顺序 ID 运行
K6 Load Testing - How to make sequential id for entire test run
我有一个 api 端点,每个请求都需要一个不同的 id ,但是如何为所有 VU 共享的每次迭代创建一个 id 全局和顺序增量,就像数据库上的主键 table.
例如:
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
有没有办法声明一个被整个测试共享的变量?
Setup 和 Init 是针对每个 VU 的,不能根据文档共享数据。
这不容易实现,因为每个 VU 都在单独的 JavaScript VM 中运行,并且它们之间不共享内存。有关详细信息,请参阅 Test life cycle documentation。这样做是为了允许测试运行分布在 k6 实例之间,因此在它们之间同步数据将需要外部解决方案。
您可以采取的一种方法是跟踪并增加 Web 服务中的 ID,您的 k6 脚本可以查询该 ID 以从中获取下一个 ID。 Redis 可以很好地满足这个目的,请参阅 了解想法。但请注意,任何此类解决方案都会影响您的 end-of-test 测试指标和测试本身的性能,因此它并不理想,但我没有看到更好的方法。
对于正在寻找生成序列号方法的任何人。自版本 v0.0.34 以来,引入了 k6/execution,它有一个 属性 iterationInTest
,它是一个整数,描述为:
The unique and zero-based sequential number of the current iteration in the scenario. It is unique in all k6 execution modes - in local, cloud and distributed/segmented test runs. However, while every instance will get non-overlapping index values in cloud/distributed tests, they might iterate over them at different speeds, so the values won't be sequential across them.
这可以在您的测试代码中用于生成序列号,例如:
import exec from 'k6/execution':
export default function () {
const url = `https://foo.bar/${exec.scenario.iterationInTest}`;
http.get(url)
}
我能够为测试的每次迭代增加一个数字。
我有一个 api 端点,每个请求都需要一个不同的 id ,但是如何为所有 VU 共享的每次迭代创建一个 id 全局和顺序增量,就像数据库上的主键 table.
例如:
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
有没有办法声明一个被整个测试共享的变量? Setup 和 Init 是针对每个 VU 的,不能根据文档共享数据。
这不容易实现,因为每个 VU 都在单独的 JavaScript VM 中运行,并且它们之间不共享内存。有关详细信息,请参阅 Test life cycle documentation。这样做是为了允许测试运行分布在 k6 实例之间,因此在它们之间同步数据将需要外部解决方案。
您可以采取的一种方法是跟踪并增加 Web 服务中的 ID,您的 k6 脚本可以查询该 ID 以从中获取下一个 ID。 Redis 可以很好地满足这个目的,请参阅
对于正在寻找生成序列号方法的任何人。自版本 v0.0.34 以来,引入了 k6/execution,它有一个 属性 iterationInTest
,它是一个整数,描述为:
The unique and zero-based sequential number of the current iteration in the scenario. It is unique in all k6 execution modes - in local, cloud and distributed/segmented test runs. However, while every instance will get non-overlapping index values in cloud/distributed tests, they might iterate over them at different speeds, so the values won't be sequential across them.
这可以在您的测试代码中用于生成序列号,例如:
import exec from 'k6/execution':
export default function () {
const url = `https://foo.bar/${exec.scenario.iterationInTest}`;
http.get(url)
}
我能够为测试的每次迭代增加一个数字。