自称是“开发者体验最好”的负载测试工具,你相信吗?

发表于:2020-12-16 10:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:开源前哨    来源:知乎

  【导语】:k6 是一个面向开发和测试人员,适应 DevOps 时代的高性能、现代化、自称“开发者体验最好”的负载测试工具,在 GitHub上已有 10.6K Star。
  简介
  k6 是一个免费、开源、高性能的负载测试工具,能有效提高性能测试的生产力。它总结了Load Impact在负载和性能测试行业的多年经验,提供了简洁、方便的脚本API,支持本地和云端执行,可进行灵活的配置。
  k6 自称是“开发者体验最好”的负载测试工具。
  k6 支持以下功能特性:
  1、使用基于ES6语法的编写脚本:支持模块化,以便更好地实现代码复用
  2、所有的东西都是代码:为了版本控制更友好,测试逻辑和配置选项都在JS脚本中
  3、友好:检查和阈值的存在,使得持续化配置构建更加容易
  4、支持HTTP1、HTTP2、WebSocket和gRPC协议
  5、支持TLS:配置客户端证书、SSL/TLS版本以及加密套件
  6、内置支持了很多特性:Cookies、加密、自定义指标、编码、环境变量、JSON、HTML表单等
  7、内置HAR转换器:将浏览器搜集的网络信息har文件直接转换为k6脚本
  项目源码地址是:
  https://github.com/loadimpact/k6
  安装
  Mac环境使用Homebrew:
  brew install k6
  Windows环境,直接下载msi文件安装即可:
  https://dl.bintray.com/loadimpact/windows/k6-v0.29.0-amd64.msi
  Linux环境:
  如果是基于Debian的Linux系统,使用以下命令:
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
  echo "deb https://dl.bintray.com/loadimpact/deb stable main" | sudo tee -a /etc/apt/sources.list
  sudo apt-get update
  sudo apt-get install k6
  如果是Fedora或CentOS系统,使用以下命令:
  wget https://bintray.com/loadimpact/rpm/rpm -O bintray-loadimpact-rpm.repo
  sudo mv bintray-loadimpact-rpm.repo /etc/yum.repos.d/
  sudo dnf install k6   # use yum instead of dnf for older distros
  Docker:
  docker pull loadimpact/k6
  也可以在这个地址下载软件压缩包,解压即可使用:
  https://github.com/loadimpact/k6/releases
  简单使用
  k6执行脚本的时候使用了虚拟用户(VU)的概念,在循环中并发执行。脚本使用JavaScript编写,利用模块的概念组织脚本,可以将较大的测试分解为更小、可重用的代码,从而更方便地扩展测试。脚本必须包含一个导出的默认函数,它定义了VU的入口点,作用和其他语言中的main函数类似,一个简单的脚本如下:
  import http from "k6/http";
  export default function() {
      let response = http.get("https://test-api.k6.io");
  };
  将上述脚本保存为script.js文件,使用k6执行命令如下:
  k6 run script.js
  k6也可以用来执行远程脚本,如:
  k6 run github.com/loadimpact/k6/samples/http_2.js
  k6能解析一些关于github和cdnjs URL的信息,以上命令相当于:
  k6 run raw.githubusercontent.com/loadimpact/k6/master/samples/http_2.js
  以下是来自官网的一个例子,js脚本如下:
  执行结果如下:
  从结果能看到该HTTP请求过程的一些统计数据,比如发送、收到的数据大小,发送、接收数据消耗的时间等。
  脚本选项和执行控制
  k6使用了VU的概念,可以用来进行性能测试,那么怎么控制虚拟用户数、并发时间呢?
  默认情况下,如果未指定任何选项,k6仅使用1个VU运行脚本,并且仅进行1次迭代。在负载测试中,我们需要一些方法来执行VU的数量。
  1、命令行选项,指定10个VU:
  k6 run --vus 10 script.js
  也可以简写为-u,少敲了3个按键:
  k6run-u 10 script.js
  2、设置环境变量K6_VUS,还是指定10个VU,K6_VUS=10
  3、脚本中使用options变量指定:
  export let options = {
      vus: 30,
  };
  export default function() { /* ... do whatever ... */ }
  4、全局设置。k6有一个配置主文件夹,在${HOME}/.config/loadimpact/k6,其中的config.json可以设置全局VU数量。
  以上是指定设置VU数量的方法,还需要一些方法来设置VU运行时间。
  1)使用--duration/-d选项设置执行时间(也可以通过K6_DURATION环境变量、脚本options变量、config.json配置文件来设置)。当指定参数为0时,脚本会一直持续运行,直到我们手动停止。以下命令表示执行30秒:
  k6 run --duration 30s script.js
  2)使用--iterations/ -i选项设置迭代次数(也可以通过K6_ITERATIONS环境变量、脚本options变量、config.json配置文件来设置)。当迭代总数达到指定数量时,k6停止执行。以下命令表示每个VU只会进行一次迭代:
  k6 run --iterations 10 --vus 10 script.js
  3)对于更复杂的情况,可以指定执行阶段的参数,它们通常是duration,target-VUs成对的组合。这些参数可以控制k6在指定期间VU的线性上升、下降或保持。使用--stage/ -s设置这些组合(也可以通过K6_STAGES环境变量、脚本options变量、config.json配置文件来设置)。以下使用options变量,表示k6将在3分钟内将5个VU线性增加到10个,并在接下来的5分钟内保持10个VU持续运行,然后在接下来10分钟内将VU线性增加到35个,最后在1分半钟内逐渐降低到0个:
  export let options = {
      vus: 5,
      stages: [
          { duration: "3m", target: 10 },
          { duration: "5m", target: 10 },
          { duration: "10m", target: 35 },
          { duration: "1m30s", target: 0 },
      ]
  };
  其他高级特性
  k6有一个检查和阈值的概念,检查有点类似于断言,但是检查不会中断脚本的执行,只是单纯地存储通过或失败的结果,脚本能持续运行;而阈值是全局通过或失败的标准,可以验证结果指标是否在指定范围内,若不在阈值范围内,脚本将以失败的结果结束运行,阈值非常适合于持续集成测试;k6还可以将脚本运行结果输出到外部存储,如输出到InfluxDB,Kafka,k6云。更多详细的信息可以参考官网了解。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号