ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【TEST】负载/性能测试工具 Grafana K6 (Docker 版) [打印本页]

作者: 怀念夏天    时间: 2024-10-27 13:39
标题: 【TEST】负载/性能测试工具 Grafana K6 (Docker 版)
K6先容

k6是一个今世化的负载测试工具,建立在我们多年的经验,在性能和测试行业。它被构建为强盛的、可扩展的和全功能的。关键的设计目的是提供最佳的开发职员体验。
特性




K6环境搭建

利用dokcer容器搭建相关服务.
Services Diagram


Deploy


  1. # 拉代码
  2. git clone https://github.com/wiremock/wiremock-docker.git
  3. # 制作随机数镜像
  4. docker build -t wiremock-random wiremock-docker/samples/random
  5. # 启动wiremock查看日志,查看是否正常工作
  6. docker run -it --rm -p 8080:8080 wiremock-random
  7. # 启动服务
  8. docker run -it  -p 8000:8080 --name random-service -d wiremock-random:latest
复制代码
哀求 http://localhost:8000/random
  1. {"randomInteger": "890215917"}
复制代码


  1. docker run -d \
  2.   --name=grafana \
  3.   -p 3000:3000 \
  4.   -v /path/grafana-storage:/var/lib/grafana \
  5.   -v /path/grafana-config/grafana.ini:/etc/grafana/grafana.ini \
  6.   -e GF_SECURITY_ADMIN_PASSWORD=password \
  7.   --link influxdb \
  8.   grafana/grafana:latest
复制代码
访问http://localhost:3000 看到界面即可 

  1. docker run -d \
  2.   --name influxdb \
  3.   -p 8086:8086 \
  4.   -e INFLUXDB_DB=k6 \
  5.   -e INFLUXDB_ADMIN_USER=admin \
  6.   -e INFLUXDB_ADMIN_PASSWORD=admin123 \
  7.   -e INFLUXDB_USER=k6user \
  8.   -e INFLUXDB_USER_PASSWORD=k6pass \
  9.   influxdb:1.8
复制代码




K6 Script 编写




你只必要懂js即可,对于开发测试职员都很友爱。那么来吧编写一个测试脚本。
  1. import http from 'k6/http';
  2. import {check, group} from 'k6';
  3. const API_BASE_URL = 'http://192.168.0.105:8080';
  4. export default function (data) {
  5.     group('XYX Test Group', () => {
  6.         const res = httpGet(API_BASE_URL + "/random", "", "")
  7.         //check
  8.         check(res, {
  9.             '[API] status is 200': (r) => r.status === 200,
  10.         });
  11.     });
  12. }
  13. /**
  14. * Http get Method.
  15. * @param url
  16. * @param headerParams
  17. * @param queryParams
  18. * @returns {*}
  19. */
  20. function httpGet(url, headerParams, queryParams) {
  21.     // Convert query parameters to a query string
  22.     const queryString = Object.keys(queryParams)
  23.         .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)
  24.         .join('&');
  25.     // Append query string to the URL
  26.     const fullUrl = `${url}?${queryString}`;
  27.     const res = http.get(fullUrl, headerParams);
  28.     const prettyJsonString = JSON.stringify(res.json(), null, 2); // Pretty print with 2 spaces indentation
  29.     console.log(prettyJsonString); // Outputs readable JSON
  30.     return res
  31. }
复制代码
K6测试

Local启动脚本测试

  1. docker run -i --rm \
  2.   --name k6_local \
  3.   -v $(pwd)/scripts:/scripts \
  4.   grafana/k6:latest run  /scripts/script.js
复制代码
结果大抵如下:
  1.      █ XYX Test Group
  2.      data_received..............: 0 B     0 B/s
  3.      data_sent..................: 0 B     0 B/s
  4.      group_duration.............: avg=7.48ms min=7.48ms med=7.48ms max=7.48ms p(90)=7.48ms p(95)=7.48ms
  5.      http_req_blocked...........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  6.      http_req_connecting........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  7.      http_req_duration..........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  8.      http_req_failed............: 100.00% 1 out of 1
  9.      http_req_receiving.........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  10.      http_req_sending...........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  11.      http_req_tls_handshaking...: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  12.      http_req_waiting...........: avg=0s     min=0s     med=0s     max=0s     p(90)=0s     p(95)=0s   
  13.      http_reqs..................: 1       113.088066/s
  14.      iteration_duration.........: avg=8.46ms min=8.46ms med=8.46ms max=8.46ms p(90)=8.46ms p(95)=8.46ms
  15.      iterations.................: 1       113.088066/s
  16. running (00m00.0s), 0/1 VUs, 1 complete and 0 interrupted iterations
复制代码
字段说明

http_req_duration: 每个HTTP哀求的响应时间。
http_req_failed: 失败的HTTP哀求数量。
http_req_received: 每秒吸取到的HTTP哀求数量。
http_req_status_200: 返回状态码200的HTTP哀求数量。
http_req_status_404: 返回状态码404的HTTP哀求数量。
iteration: 当前的迭代大概说测试的轮数。
vus: 虚拟用户数的数量。
data_received: 吸取到的数据总量。
group: 假如利用了k6 group功能,这里会表现分组名称。
check: 假如利用了k6 check功能,这里会表现查抄名称。

启动脚本输出到IndluxDB

 运行
  1. docker run -i --rm \
  2.   --name k6_bff \  
  3.   --link influxdb \           
  4.   -v $(pwd)/scripts:/scripts \                                   
  5.   grafana/k6:latest run --out influxdb=http://influxdb:8086/k6 /scripts/script.js \
  6.   --vus 30 --duration 350s
复制代码
 查察influxdb 日记,没有报错即一切正常。

K6 在Grafana的可视化

打开grafana 新建dashboard而且添加panel,这边以‘http_req_duration’指标简单先容。

Metric 填入
  1. SELECT mean("value") FROM "autogen"."http_req_duration" WHERE $timeFilter GROUP BY time($__interval) fill(null)
复制代码



结语

谢谢大家! 接待订阅,点赞!
周末愉快!!!!!!
周末愉快!!!!!!
周末愉快!!!!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4