如何用K6对Web服务器进行负载、尖峰和压力测试

581 阅读4分钟

在这篇文章中,我们将探讨如何使用K6对Web服务器进行各种测试,特别是用K6对Web服务器进行负载、峰值和压力测试。

目录:

  1. K6简介
  2. 用K6进行负载测试
  3. 用K6进行尖峰测试
  4. 用K6进行压力测试
  5. 对网络服务器的性能进行分类时需要考虑的情况

让我们开始用K6进行负载测试、尖峰测试和压力测试网络服务器。

K6简介

K6是一个开源的测试工具,用于制作Web服务器性能测试。

工作原理。K6的工作原理是创建一堆虚拟用户,这些用户运行javascript。他们向Web服务器发送请求,并记录响应,作为输出转储到控制台。这些可以通过js脚本进行配置。在处理请求时,它们是完全可配置和可定制的。不同的端点可以被测试,虚拟用户的代码可以进行HTTP请求。

在MacOS上安装K6

 brew install k6

在Windows上安装K6

choco install k6

用K6进行负载测试

负载测试主要是指访问你的系统在并发用户或每秒请求方面的当前性能。

负载测试的目的

  1. 评估你的典型和峰值负载的当前性能。
  2. 确保你在对你的系统进行修改时不断满足性能标准。

用K6加载测试脚本
这个代码样本将允许请求在5分钟内从1个移动到100个请求,在100个请求上停留10分钟,最后逐步减少到0用户。

import http from 'k6/http';


export let options={
  stages:[
      {duration:'5m', target:100},//move from 1 to 100 requests over 5 mins
      {duration:'10m', target:100},//stay at 100 requests for 10 mins
      {duration:'5m', target:0},// ramp-down to 0 users
  ]
}

export default function () {
  var url = "http://localhost:4000/api/v1/auth/login";
  var payload = JSON.stringify({
    email: 'admin@gmail.com',
    password: '123456',
  });

  var params = {
    headers: {
      'Content-Type': 'application/json',
    },
  };

  http.post(url, payload, params);
}

用K6进行尖峰测试

尖峰测试是压力测试的一种变体,它不是逐渐增加负载,而是在很短的时间内尖峰地达到极端负载。

使用K6的尖峰测试脚本
下面的代码样本将允许100到500个请求的适度请求,然后在4分钟内激增到1000个请求,在8分钟内继续保持1000个请求,然后降到0个请求。

import http from 'k6/http';


export let options={
  stages:[
      {duration:'1m', target:100},
      {duration:'4m', target:50},
      {duration:'4m', target:1000},//spike the request to 1000 at 4 mins
      {duration:'8m', target:1000},// stay at 1000 request for 8 mins
      {duration:'2m', target:200},
      {duration:'4m', target:0},
  ]
}

export default function () {
  var url = "http://localhost:4000/api/v1/auth/login";
  var payload = JSON.stringify({
    email: 'admin@gmail.com',
    password: '123456',
  });

  var params = {
    headers: {
      'Content-Type': 'application/json',
    },
  };

  http.post(url, payload, params);
}

用K6进行压力测试

压力测试是一种负载测试,用于确定系统的极限。该测试的目的是用来确定系统在极端条件下的稳定性和可靠性。

压力测试的目的

  1. 确定系统在极端条件下如何工作
  2. 确定你的系统在用户或吞吐量方面的最大容量是什么
  3. 确定你的系统的突破点和它的故障模式

使用K6的尖峰测试脚本
演示尖峰测试的代码样本将在一段时间内发送正常的请求负载。然后,它将发送1000个请求负载,这是网络服务器的假定突破点。在2分钟后,该脚本将发送2000个请求负载,以超越突破点。然后,它最终将请求量减少到0,以便网络服务器恢复。

import http from 'k6/http';


export let options={
  stages:[
      {duration:'2m', target:10},
      {duration:'4m', target:50},//normal request load
      {duration:'4m', target:1000},// request load around the breaking point 
      {duration:'4m', target:1000},
      {duration:'2m', target:2000},// request load beyond the breaking point
      {duration:'4m', target:0},//scale down to 0 requests for recovery stage
  ]
}

export default function () {
  var url = "http://localhost:4000/api/v1/auth/login";
  var payload = JSON.stringify({
    email: 'admin@gmail.com',
    password: '123456',
  });

  var params = {
    headers: {
      'Content-Type': 'application/json',
    },
  };

  http.post(url, payload, params);
}

在对你的网络服务器的性能进行分类时需要考虑的情况

通过以下测试报告,你可以认为一个网络服务器是差、坏、优、好:

:系统在流量激增时产生错误,但在流量过后恢复到正常。

:系统崩溃,并且在流量减弱后不能恢复。

优秀:在流量激增期间,系统性能没有下降。

:响应速度较慢,但流量不会产生任何错误,所有的请求都得到处理。

通过OpenGenus的这篇文章,你一定对使用K6进行负载测试、尖峰测试和压力测试的网络服务器有了完整的了解。