压力测试
压力测试评估系统在负载高于正常情况时的表现。
压力测试的负载模式类似于平均负载测试。主要区别在于负载更高。为了应对更高的负载,预热(ramp-up)阶段与负载增加成比例地延长。类似地,测试达到期望负载后,持续时间可能比平均负载测试稍长。
在一些测试讨论中,压力测试也可能被称为高峰时段测试、突增测试或规模测试。
何时进行压力测试
压力测试验证系统在大量使用条件下的稳定性和可靠性。系统可能在非正常时刻接收到比平时更高负载的工作量,例如流程截止日期、发薪日、高峰时段、工作周结束等,这些行为都可能导致频繁高于平均水平的流量。
注意事项
进行压力测试时,请考虑以下几点
负载应高于系统平均承受的负载。
一些测试人员可能对压力测试有默认目标——例如在平均负载基础上增加 50% 或 100%——但没有固定百分比。
压力测试中模拟的负载取决于系统可能承受的压力情景。有时可能仅比平均值高几个百分点。如前所述,其他时候可能高出 50% 到 100%。有些压力情景可能高出一倍、两倍,甚至几个数量级。
根据系统可能接收的风险负载模式定义负载。
仅在运行平均负载测试后进行压力测试。
在尝试更具挑战性的测试之前,先在平均负载测试下识别性能问题。这个顺序至关重要。
重用平均负载测试脚本。
修改参数以增加负载或 VU 数。
预期性能会比平均负载下差。
此测试确定性能在额外负载下会劣化多少,以及系统是否能承受。一个表现良好的系统在长时间处理恒定工作负载时应具有一致的响应时间。
k6 中的压力测试
压力测试中的负载类似于平均负载测试中的负载。区别在于它达到了更高的负载水平。
- 以较慢的预热速度进一步增加脚本活动,直到达到高于平均水平的用户数或吞吐量。
- 维持该负载一段时间。
- 根据测试用例,停止或逐步降低负载。
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
// Key configurations for Stress in this section
stages: [
{ duration: '10m', target: 200 }, // traffic ramp-up from 1 to a higher 200 users over 10 minutes.
{ duration: '30m', target: 200 }, // stay at higher 200 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 或吞吐量图表如下所示
请注意,与平均负载测试一样,压力测试从 0 开始,并增加到超出平均负载测试类型的测试点。预热和负载降低阶段更长,以获得更真实的响应。
注意
仅在进行冒烟测试和平均负载测试后运行压力测试。过早运行此类测试可能会浪费资源,并且难以找出在低并发或平均利用率以下负载时出现的问题。
结果分析
与平均负载测试类似,压力测试的初步结果在预热阶段显现,用于识别当负载超出平均利用率进一步增加时响应时间的劣化情况。通常,随着我们将系统推至超出平均负载测试的极限,性能会下降,甚至系统的稳定性也会崩溃。
在满负载期间,验证系统在高负载下性能和资源消耗是否保持稳定至关重要。
现在您知道系统可以处理突出的负载事件,团队通常会检查系统在长时间运行期间的表现。也就是说,他们会运行浸泡测试。