浸泡测试
而负载测试主要与性能评估而言,和 压力测试涉及在极端条件下系统稳定,浸泡测试在长时间涉及可靠性。
浸泡测试揭示了由于系统长时间处于压力下而导致的性能和可靠性问题。
可靠性问题通常与错误、内存泄漏、存储配额不足、不正确的配置或基础设施故障有关。性能问题通常与不正确的数据库调优、内存泄漏、资源泄漏或大量数据有关。
通过浸泡测试,您可以在短短几个小时内模拟几天的流量。
您通常运行此测试以:
- 验证您的系统没有受到错误或内存泄漏的影响,这些错误或内存泄漏会导致运行数小时后崩溃或重新启动。
- 验证预期的应用程序重新启动不会丢失请求。
- 查找与偶尔出现的竞争条件相关的错误。
- 确保您的数据库不会耗尽分配的存储空间并停止。
- 确保您的日志不会耗尽分配的磁盘存储空间。
- 确保您依赖的外部服务在执行一定数量的请求后不会停止工作。
您可能会发现,与测试结束时相比,您的应用程序在测试开始时的性能要好得多。如果您的数据库未正确调整,通常会发生这种情况。添加索引或分配额外的内存可能会有所帮助。
在 k6 中浸泡测试
我们建议您将浸泡测试配置为系统容量的 80% 左右。如果您的系统最多可同时处理 500 个用户,则应将浸泡测试配置为 400 个 VU。
浸泡测试的持续时间应以小时为单位。我们建议您从 1 小时的测试开始,成功后将其延长至几个小时。有些错误与时间有关,与执行的请求总数无关。
sample-soak-test.js
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
stages: [
{ duration: '2m', target: 400 }, // ramp up to 400 users
{ duration: '3h56m', target: 400 }, // stay at 400 for ~4 hours
{ duration: '2m', target: 0 }, // scale down. (optional)
],
};
const API_BASE_URL = 'https://test-api.k6.io';
export default function () {
http.batch([
['GET', `${API_BASE_URL}/public/crocodiles/1/`],
['GET', `${API_BASE_URL}/public/crocodiles/2/`],
['GET', `${API_BASE_URL}/public/crocodiles/3/`],
['GET', `${API_BASE_URL}/public/crocodiles/4/`],
]);
sleep(1);
}
浸泡测试的 VU 图表应如下所示:
警告!
在开始浸泡测试之前进行成本估算
浸泡测试可以在几小时内模拟数天或数周的正常流量。这意味着您的基础设施和供应商成本可能很高。
如果您正在测试网站,则应考虑将 CDN 排除在测试之外。
如果您的系统使用外部服务,您可能需要在开始测试之前计算成本。
什么时候做浸泡测试?
浸泡测试可帮助您发现长期出现的错误和可靠性问题。许多复杂的系统都有这种性质的错误。
您应该在标准负载测试成功后执行浸泡测试,并且在执行压力测试时发现您的系统稳定。
浸泡测试是构建可靠系统的最后一步。
参考官方文档
官方文档地址: https://k6.io/docs/