暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【K6】使用InfluxDB和Grafana图形化展示k6压测工具的测试数据【测试成功】

巴韭特锁螺丝 2023-11-16
358

一、K6是什么?

k6是一个现代的、开源的性能测试工具,用于测试和评估Web应用程序的性能。它是一个命令行工具,使用JavaScript或TypeScript编写测试脚本。k6专注于开发人员友好性和简单性,使其易于使用和集成到持续集成/持续交付(CI/CD)流程中。

以下是k6的一些主要特点:

  1. JavaScript/TypeScript编写: k6测试脚本使用JavaScript或TypeScript编写,这使得它对于许多开发人员来说是非常熟悉和易于上手的。

  2. 负载生成: k6可以模拟大量用户同时访问你的Web应用程序,从而帮助你评估应用程序在高负载下的性能表现。

  3. HTTP请求: k6支持发送各种类型的HTTP请求,包括GET、POST等,以模拟真实用户与Web服务器的交互。

  4. WebSocket支持: 除了HTTP请求,k6还支持WebSocket,可以用于测试实时应用程序,如聊天应用或实时协作工具。

  5. 图形化输出: k6提供了直观的图形化输出,包括性能指标和结果,以便更容易地分析和理解性能测试的结果。

  6. 分布式执行: k6支持在多台机器上分布式执行测试,这对于模拟大规模用户负载非常有用。

  7. 插件系统: k6具有可扩展的插件系统,允许用户根据需要扩展和定制功能。

总体而言,k6是一个强大而灵活的工具,适用于开发人员和测试人员,用于评估Web应用程序在不同负载下的性能表现

二、K6的安装

    sudo dnf install https://dl.k6.io/rpm/repo.rpm
    sudo dnf install k6

    参考:https://k6.io/docs/get-started/installation/
    三、K6的使用

    1、编写test.js脚本

       import http from "k6/http";
      import {group, check} from "k6";

      export let options = {
      stages: [
      {duration: '30s', target: 5},
      {duration: '30s', target: 20},
      {duration: '30s', target: 50},
      {duration: '60s', target: 100},
      ]
      };

      export default function () {

      group('html page', function () {
           const res = http.get("http://www.xxx.com/about");
      check(res, {
      "status was 200": (r) => r.status === 200
      });
      });

      };


      这个脚本是用于使用 k6 对网站进行负载测试的,k6 是一个流行的开源负载测试工具。


      以下是脚本的功能:


      1. 它从 k6 导入必要的模块:`http` 用于发出 HTTP 请求,`check` 用于验证响应。


      2. 它在 `options` 对象中定义了测试的负载配置。测试将从 30 秒的 5 个虚拟用户开始,然后在接下来的 30 秒内增加到 20 个用户,再在接下来的 30 秒内增加到 50 个用户,最后在 60 秒内增加到 100 个用户。


      3. `default` 函数是测试的入口点。它定义了每个虚拟用户在测试期间将执行的操作。


      4.`default` 函数内部,它将操作分组在 'html page' 下。这对于组织测试结果非常有用。


      5. 它向网站的 "/about" 页面发送 GET 请求(将 "www.xxx.com" 替换为你要测试的实际网站)。


      6. 它检查响应状态码以确保它是 200(HTTP OK)。如果状态码不是 200,检查将失败,并在测试结果中报告失败。

      2、运行Web负载测试、指明influxdb信息

      k6 run --out influxdb=http://106.14.67.15:8086/load_test index.js

        [root@ELK-Master k6]# k6 run --out influxdb=http://106.14.67.15:8086/load_test index.js


        \ |‾‾| ‾‾/ ‾‾/
        \ \ | |/
        \/ \ | ( ‾‾\
        / \ | |\ \ | (‾) |
        / __________ \ |__| \__\ \_____/ .io


        execution: local
        script: index.js
        output: InfluxDBv1 (http://106.14.67.15:8086)


        scenarios: (100.00%) 1 scenario, 100 max VUs, 3m0s max duration (incl. graceful stop)
        * default: Up to 100 looping VUs for 2m30s over 4 stages (gracefulRampDown: 30s, gracefulStop: 30s)




        █ html page


        status was 200


        checks.........................: 100.00% ✓ 60020
        data_received..................: 34 MB 530 kB/s
        data_sent......................: 524 kB 8.2 kB/s
        group_duration.................: avg=86.04ms min=21.73ms med=35.59ms max=1.99s p(90)=178.68ms p(95)=360.78ms
        http_req_blocked...............: avg=378.7µs min=542ns med=1.91µs max=88.07ms p(90)=2.61µs p(95)=3.23µs
        http_req_connecting............: avg=365.52µs min=0s med=0s max=51.53ms p(90)=0s p(95)=0s
        http_req_duration..............: avg=85.57ms min=21.62ms med=35.34ms max=1.99s p(90)=177.92ms p(95)=360.72ms
        { expected_response:true }...: avg=85.57ms min=21.62ms med=35.34ms max=1.99s p(90)=177.92ms p(95)=360.72ms
        http_req_failed................: 0.00% ✓ 06002
        http_req_receiving.............: avg=52.9ms min=12.44µs med=2.17ms max=1.95s p(90)=142.23ms p(95)=294.33ms
        http_req_sending...............: avg=10.51µs min=2.82µs med=8.62µs max=295.55µs p(90)=12.89µs p(95)=22.87µs
        http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
        http_req_waiting...............: avg=32.65ms min=21.26ms med=28.11ms max=729.15ms p(90)=35.89ms p(95)=38.79ms
        http_reqs......................: 6002 93.535367/s
        iteration_duration.............: avg=86.05ms min=21.75ms med=35.6ms max=1.99s p(90)=178.69ms p(95)=360.79ms
        iterations.....................: 6002 93.535367/s
        vus............................: 23 min=1 max=23
        vus_max........................: 100 min=100 max=100




        running (1m04.2s), 000/100 VUs, 6002 complete and 24 interrupted iterations
        default ✗ [===============>----------------------] 003/100 VUs 1m04.2s/2m30.0s


        三、配置Grfana的展示

        导入模板ID:2587,效果如下:

          参考链接:
          https://www.leeguangxing.cn/blog_post_76.html
          https://blog.csdn.net/weixin_55018452/article/details/129054327
          在此特别鸣谢参考链接原作者的创作。

          文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论