平均负载测试
平均负载测试评估系统在典型负载下的性能。典型负载可能是生产环境中的正常一天或平均时刻。
平均负载测试模拟反映生产环境中平均行为的并发用户数和每秒请求数。这类测试通常会逐渐增加吞吐量或 VUs,并保持该平均负载一段时间。根据系统的特性,测试可能会突然停止或有一个短暂的递减期。
由于“负载测试”可能指所有模拟流量的测试类型,本指南使用*平均负载测试*这一名称以避免混淆。在一些测试讨论中,这种测试也可能被称为“日常生活测试”或“容量测试”。
何时运行平均负载测试
平均负载测试有助于了解系统在典型一天(常见负载)下是否达到性能目标。这里的*典型一天*是指平均数量的用户同时访问应用程序,执行正常的平均工作。
您应该运行平均负载测试以
- 评估系统在典型负载下的性能。
- 在递增或满载期间识别早期性能下降迹象。
- 确保系统在变更(代码和基础设施)后仍符合性能标准。
注意事项
准备平均负载测试时,请考虑以下几点
了解系统中特定的用户数量和每个进程的典型吞吐量。
要找出这些信息,请查看提供生产环境信息的 APM 或分析工具。如果无法访问此类工具,业务部门必须提供这些估算值。
逐渐增加负载至目标平均值。
也就是说,使用*递增期*。这个时期通常占总测试时长的 5% 到 15%。递增期有许多重要用途
- 它让您的系统有时间预热或自动扩容以处理流量。
- 它允许您比较低负载和平均负载阶段之间的响应时间。
- 如果您使用我们的云服务运行测试,递增期可以让自动化性能警报了解您系统的预期行为。
保持平均负载的时间长于递增期。
目标是平均负载持续时间至少比递增期长五倍,以便评估系统在较长时间内的性能趋势。
考虑递减期。
递减期是指虚拟用户活动逐渐减少的时期。递减期通常与递增期时长相同或稍短。
k6 中的平均负载测试
注意
如果这是您第一次运行负载测试,我们建议从少量负载开始或将递增速度配置得慢一些。您的应用程序和基础设施可能不像您想象的那么稳定。我们已经看到数千名用户运行负载测试,结果迅速导致他们的应用程序(或预生产环境)崩溃。
平均负载测试的目标是模拟生产环境中典型一天内的平均活动量。其模式遵循以下序列
- 增加脚本活动直到达到期望的用户数和吞吐量。
- 保持该负载一段时间
- 根据测试用例,停止测试或让其逐渐递减。
在 options
对象中配置负载
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
// Key configurations for avg load test in this section
stages: [
{ duration: '5m', target: 100 }, // traffic ramp-up from 1 to 100 users over 5 minutes.
{ duration: '30m', target: 100 }, // stay at 100 users for 30 minutes
{ duration: '5m', target: 0 }, // ramp-down to 0 users
],
};
export default () => {
const urlRes = http.get('https://quickpizza.grafana.com');
sleep(1);
// MORE STEPS
// Here you can have more steps or complex script
// Step1
// Step2
// etc.
};
此脚本逻辑只有一个请求(打开一个网页)。您的测试行为可能包含更多步骤。如果您想查看使用组、检查、阈值和辅助函数的更复杂测试,请参阅示例。
平均负载测试的 VU 或吞吐量图表看起来类似于这样
结果分析
平均负载测试的初步结果在递增期出现,用于发现随着负载增加响应时间是否会降低。有些系统甚至可能在递增期就失败。
测试验证系统在满载期间的性能和资源消耗是否保持稳定,因为有些系统在此期间可能会表现出不稳定行为。
一旦您知道您的系统性能良好并能在典型负载下正常运行,您可能需要进一步推动它,以确定其在高于平均条件下的行为。这些高于平均条件下的测试有些被称为压力测试。