lyyyuna 的小花园

动静中之动, by

RSS

Grafana k6 是什么

发表于 2025-02

Grafana k6 是一款现代的开源性能测试工具。什么样的特性才能叫现代,为什么又要学习一款新的工具?让我们先分析一下传统的性能测试工具:JMeter 和 Locust。

JMeter 历史悠久,由 Java 开发,是 Apacahe 软件基金会的一部分。从设计角度来看,它主要面向手工测试人员 - 测试脚本是在 UI 上按模块填写的(对使用者的开发能力要求不高)。它自创了许多概念:元件、监听器、定时器、前置后置处理器等,这使得它的曲线不低,要配置出复杂的测试场景可能有一定难度。即使是纯开发人员面对这些概念也会有一定的挫败感,他们更习惯用代码来组织出复杂的场景。JMeter 有一个无可比拟的优势:社区庞大,你想要测试的协议几乎都能在社区中找到。阿里云、腾讯云的云压测产品,可以直接解析 JMeter 脚本,对于有历史测试脚本沉淀的公司来说非常方便。

Locust 则相对年轻。它没有选择自创一套 DSL,而是直接使用 Python 来编写测试脚本,测试、测开、开发都愿意参与其中,可以编写出一定复杂逻辑的测试流程。

JMeter 和 Locust 都支持分布式来提高并发量,但各有一些缺点:

  1. JMeter 因为 JVM 虚拟机和线程实现并发的原因,单机的资源消耗较高。
  2. JMeter 是主从架构,添加从节点需要修改主节点配置,水平扩展不便。
  3. Locust 使用 Python,同样有单机性能问题。
  4. Locust 使用内置的 ZeroMQ 来实现主从架构,水平扩展方便,但内置的消息队列会成为性能瓶颈。

JMeter 和 Locust 的监控报告都是内置的,满足小团队快速验证,但大企业多是在 Grafana 之类的平台上观测及分析历史数据,需要额外的开发来适配。

Grafana k6 是如何解决上面这些不足呢?

  1. 开发者优先
    1. 使用 JavaScript 作为脚本语言,对开发友好。
    2. 代码即测试,方便版本控制和持续集成。
  2. 轻量性能高,JavaScript 解释器是由 Go 编写,底层由 goroutine 轻松支持高并发负载。
  3. 测试场景丰富
    1. 多种复杂负载类型(逐步加压、峰值测试)
    2. 支持统计响应时间、错误率等指标。
  4. 扩展方便,可以用 JavaScript 和 Go 扩展协议。
  5. 直接对接 Grafana,通过 Grafana 查看和分析性能数据。
  6. 云原生友好,通过 k6 operater 直接在 k8s 上水平伸缩。
    1. 非主从架构,因为直接由 Grafana 收集性能数据,不需要主节点来协调和通信。

还有一个大优势,k6 有 Grafana 在背后做支持。

总的来说,Grafana k6 的核心理念是 “性能测试即代码”,通过现代化的技术栈和开发者友好的设计,填补了传统工具在自动化、云原生集成和易用性上的不足。对于追求敏捷和自动化的团队,k6 是更符合现代软件工程实践的解决方案。

下面,就跟着本系列一起,从入门到精通 Grafana k6 吧。

lyyyuna 沪ICP备2025110782号-1