前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >17.6k stars像单元测试一样做压力测试

17.6k stars像单元测试一样做压力测试

作者头像
开源日记
发布2023-03-10 15:04:25
5430
发布2023-03-10 15:04:25
举报
文章被收录于专栏:JVMGC

为什么要搞压力测试

负载测试,压力测试可以衡量服务是否是一个高可用,高性能的服务。负载测试能检验在不同的工作负荷下,服务的硬件消耗和响应,从而得到不同负载情况下的性能指标。

老牌压力测试工具

可能说到压力测试,很多人会想到JMeter。Apache JMeter是一个Apache项目,可用作负载测试工具,以分析和测量各种服务的性能,重点是Web应用程序。JMeter可用作JDBC数据库连接,FTP,LDAP,Web服务,JMS,HTTP,通用TCP连接和OS本机进程的单元测试工具。下面我们讲另外一个新式的压力测试工具k6

什么是k6

K6是一款现代负载测试工具,建立在我们在负载和性能测试行业多年的经验基础上。它提供了一个干净的、可接近的脚本API、本地和云执行以及灵活的配置。

K6 相对于 JMeter 的优势

因为 K6是Go编写的,相对于JAVA 编写的 JMeter 有性能上的差距,K6 可以只用较少的资源就能达到指定数量的负载。

特点
  • 在ES6 JS中编写脚本:支持模块,以帮助跨组织的代码重用
  • 用代码来配置:测试逻辑和配置选项都是在JS中,以便于版本控制
  • 自动化配置:检查(像断言)和阈值,方便灵活的CI配置!
  • 支持HTTP/1.1, HTTP/2, WebSocket和gRPC协议
  • TLS特性:客户端证书、可配置的SSL/TLS版本和密码
  • 包括:cookie、Crypto、自定义指标、编码、环境变量、JSON、HTML表单、文件、灵活的执行控制等等。
  • 内置的HAR转换器:将浏览器会话记录为.har文件,并直接转换为k6脚本
  • 灵活的指标存储和可视化:fluxdb (+Grafana), JSON或k6云
  • 云执行和分布式测试(目前只在k6云管理的基础设施上进行,计划在不久的将来在k6上进行本地分布式执行!)

GitHub数据

  • 17.6k stars
  • 306 watching
  • 918 forks

开源地址:https://github.com/grafana/k6

安装

Debian/Ubuntu
代码语言:javascript
复制
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
Fedora/CentOS
代码语言:javascript
复制
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6
MacOS
代码语言:javascript
复制
brew install k6
Windows
代码语言:javascript
复制
choco install k6
winget install k6
Docker
代码语言:javascript
复制
docker pull grafana/k6

举个例子

新建一个 test.js 文件

Get 请求 get( url, [params] )

代码语言:javascript
复制
import http from 'k6/http';
export let options = {
  vus: 100, // 指定要同时运行的虚拟用户数量
  duration: '10s', // 指定测试运行的总持续时间
};
// default 默认函数
export default function () {
  // 标头
  let params = { headers: { 'Content-Type': 'application/json' } };
 
  var res=http.get("https://test.k6.io",params)
}

Post 请求 Post( url, [body],[params])

代码语言:javascript
复制
import http from 'k6/http';
export let options = {
  vus: 100,
  duration: '10s',
};
// default 默认函数
export default function () {
  // json 字符串
  let json = { content: 'linhui', image: 'images' };
  // 标头
  let params = { headers: { 'Content-Type': 'application/json' } };
  var res = http.post("https://host/api/feedback", JSON.stringify(json), params)
  console.log(res.status);
}

执行脚本

代码语言:javascript
复制
k6 run test.js

batch 批处理,顺序不能保证

代码语言:javascript
复制
import http from 'k6/http';
export let options = {
  vus: 1, 
  duration: '10s', 
};
export default function () {
  let get = {
    method: 'GET',
    url: 'https://host/get',
  };
  let get1 = {
    method: 'GET',
    url: 'https://host/get',
  };
  let post = {
    method: 'POST',
    url: 'https://host/post',
    body: {
      hello: 'world!',
    },
    params: {
      headers: { 'Content-Type': 'application/json' },
    },
  };
  let res = http.batch([req1, req2, req3]);
}

常见指标

名称

描述

Counter

计数器,对值进行累加

Gauge

最小值、最大值和最后一个值。

Rate

百分比

Trend

最小值、最大值、平均值和百分位数的统计数据指标

K6 始终都会收集的指标

名称

类型

描述

vue

Gauge

当前活动的虚拟用户数

vue_max

Gauge

虚拟用户的最大数量

iterations

Counter

脚本中的函数被执行的次数

data_received

Counter

接收到的数据量大小

data_sent

Counter

发送的数据量大小

iteration_duration

Trend

完成默认/主函数的一次完整迭代所花费的时间。

checks

Rate

checks 项的成功率

更多功能广大网友可以继续挖掘。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要搞压力测试
  • 老牌压力测试工具
  • 什么是k6
  • K6 相对于 JMeter 的优势
    • 特点
    • GitHub数据
    • 安装
      • Debian/Ubuntu
        • Fedora/CentOS
          • MacOS
            • Windows
              • Docker
              • 举个例子
              • 常见指标
              相关产品与服务
              Grafana 服务
              Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档