开源负载测试工具k6比JMeter更容易的5件事

k6是GitHub上提供的开源负载测试工具。它是用Go编写的,并运行用JavaScript编写的测试脚本。它受到了开发人员,测试人员和DevOps团队的强烈兴趣,并拥有超过4400名GitHub明星。k6是命令行驱动的,测试结果输出到stdout或结果分析工具,如Load Impact Insights。

JMeter也是一个开源负载测试工具,已存在多年。它非常受欢迎,拥有数千名用户。它是一个Java应用程序,JMeter GUI用于创建测试脚本。此外,一些脚本语言可用于编写JMeter函数,包括Java,Groovy和JavaScript。Groovy已成为推荐的默认选项。但是,只能从命令行执行负载测试运行。

在“大卫与歌利亚”的方式中,让我们看一下在k6中比在JMeter中更容易做的事情的几个例子。

1.在变量中保存HTTP响应

在JMeter中:

  1. 添加Beanshell Postprocessor作为请求的子项,返回您要查找的响应。
  2. 将代码  vars.put(“response”, new String(data)); 放入PostProcessor的“脚本”区域。
  3. 请根据${response} 需要参考提取的值  。

在k6中,使用以下测试脚本代码:

let response = http.get(“http://javame.cnblogs.com/”);
在这两种情况下,数据最终都在响应变量中。主要区别在于您必须在JMeter中向请求添加Beanshell PostProcessor,然后才能添加代码段。

2.测试预期的404响应

在JMeter中:

在测试下创建一个新的Response Assertion。在断言的“要测试的响应字段”部分中,确保选中“忽略状态”框。

然后,您可以添加其他断言,例如将“要测试的响应字段”中的无线电设置为“响应代码”,并将“要测试的模式”设置为404。

图1:显示如何设置响应断言的JMeter GUI。

在k6中,使用以下测试脚本代码:

let response = http.get(“http://some.url/”);
check(res, {
"Status is 404": (r) => r.status === 404
});

这里的主要区别在于,在JMeter中执行此操作需要您单击GUI并在输入字段中填入值,而使用k6则需要编写几行代码。您可以在版本控制系统(VCS)中轻松跟踪和管理k6 JavaScript加载测试代码,就像您的应用程序代码一样。

3.在不同的测试中重用自定义测试代码

例如,假设您要调用logTransaction() 150个不同测试配置中的一个文件中定义的  函数。

在JMeter中:

  1. 将该行添加  beanshell.sampler.init=BeanShellSampler.bshrc 到user.properties文件(位于JMeter安装的“bin”文件夹中)。
  2. 将logTransaction函数放在BeanShellSampler.bshrc文件中(相同位置,JMeter的“bin”文件夹)。
  3. 下次启动JMeter时,您可以在任何脚本中从任何Beanshell Sampler调用该函数。

在k6:

  1. 将logTransaction()函数放在JavaScript文件中,例如“logTransaction.js”
  2. 使用以下语句在任何脚本中导入该函数:从“/path/to/logTransaction.js”导入{logTransaction};

在k6中,任何Javascript文件都可以直接用作可导入模块,它允许您以任何方式组织文件。您还可以直接通过网络导入模块:

import { logTransaction } from "s3.amazonaws.com/path/to/logTransaction.js";
除了标准的ES6 JavaScript API之外,k6还捆绑了API来处理Cookie,加密,编码,环境变量,HTML表单,HTML解析,多部分请求,TLS客户端证书,TLS密码和版本等等。

4.实现嵌套循环

例如,您可能希望使用两个参数测试servlet:X和Y,其中X和Y是0到100之间的随机数。您需要一个嵌套循环,如下所示:

for(int  x  =  0 ; x  <=  100 ; x ++)
for(int  y  =  0 ; y  <=  100 ; y ++)
servlet ?param1 = x &param2 = y

在JMeter中:

您的架构可能如下所示:

Thread Group
User Defined Variables
maxX = 100
maxY = 100
Loop Controller X
Loop Count: ${__BeanShell(Integer.parseInt(vars.get("maxX"))+1)}
Counter X
Start: 0
Increment: 1
Maximum: ${maxX}
Reference Name: loopX
Loop Controller Y
Loop Count: ${__BeanShell(Integer.parseInt(vars.get("maxY"))+1)}
Counter Y
Start: 0
Increment: 1
Maximum: ${maxY}
Reference Name: loopY
YOUR HTTP Request
servlet?param1=${loopX}&param2=${loopY}
. . .

在k6:

使用以下脚本代码:

for(var  x  =  0 ; x  <=  100 ; x ++)
for(var  y  =  0 ; y  <=  100 ; y ++)
http.get(“http://some.domain/servlet?param1 =”+ x +“¶m2=”+ y);

当然,执行更复杂的逻辑分支是基于GUI的方法与直接在代码中编写逻辑相比经常变得非常笨重的地方。k6解决方案与用于描述问题的伪代码非常相似。

5.进行并行请求

我们通常希望并行发出多个请求,就像浏览器在获取网页时所做的那样。这使得服务器上的压力比每个虚拟用户一次只发出一个请求要多得多。

在JMeter中:

JMeter提供同步计时器,允许对请求进行分组,以便它们可以在同一时刻执行。只需在测试计划中添加同步计时器,并确保:

  • 它在两个请求中都处于同一级别
  • 线程组中的虚拟用户数> = =同步计时器中设置的数量


  • 在k6:

    使用此  http.batch() 功能可并行发出多个请求。例如:

    http.batch([
    "http://test.loadimpact.com",
    "http://test.loadimpact.com/style.css",
    "http://test.loadimpact.com/images/logo.png"
    ]);

    上述“解决方案”不具有100%的可比性。在JMeter情况下,我们仍然只允许每个虚拟用户(VU)一次发出一个请求。这意味着JMeter VU不是“真实用户”的完全准确模型。单个人类用户将使用他们的Web浏览器同时发出多个请求,而JMeter VU一次只发出一个请求。

    相反,JMeter所做的是同步VU,以便它们在同一时间发出请求。(对我来说似乎不太有用 - 总吞吐量可能会下降,因为某些VU必须等待其他VU完成请求)。

    另一方面,在所示的示例中,k6将允许每个VU打开三个并发TCP连接,因此能够并行获取这三个项目,就像Web浏览器一样。这意味着在k6情况下,100个VU可以并行获取300个项目。在Jmeter情况下,100 VU将并行获取100个项目。(注意:还有一个名为Parallel Controller的 JMeter扩展可用于创建并行请求)。

    推荐阅读:

    老王讲架构:负载均衡

    支付宝系统架构内部剖析

    大数据Spark与Storm技术选型

    【赞】用Python实现Zabbix-API 监控

    程序员怎么留住健康?

    大数据智慧平台技术方案



原文地址:https://www.cnblogs.com/Javame/p/10117435.html

时间: 2024-10-25 17:31:24

开源负载测试工具k6比JMeter更容易的5件事的相关文章

Python 负载测试工具 Locust

Locust 是一个开源负载测试工具.使用 Python 代码定义用户行为,也可以仿真百万个用户. Locust 是非常简单易用,分布式,用户负载测试工具.Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户. Locust 是完全基于时间的,因此单个机器支持几千个并发用户.相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent. 特性 使用纯 Python 代码编写用户测试场景:不需要 UIs 或者 XML 分布式&可伸缩

2014 非常好用的开源 Android 测试工具

2014 非常好用的开源 Android 测试工具 - 开源中国社区 当前有很大的趋势是转向移动应用平台,Android 是最广泛使用的移动操作系统,2014 年大约占 80% 以上的市场.在开发 Android 应用的时候要进行测试,现在市场上有大量的测试工具. 本文主要是展示一系列的开源 Android 测试工具.每个工具都会有相应的简短介绍,还有一些相关的资源.Android 测试工具列表是按照字母来排序的,最后还会介绍几个不是特别活跃的 Android 测试相关的开源项目. 本文提到的开

高性能 HTTP 负载测试工具 Vegeta及并行分布式运维工具pdsh

什么是 Vegeta Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库. 官方地址:https://github.com/tsenart/vegeta 安装 Vegeta Vegeta 安装非常简单,由于 Go 语言良好的跨平台性,可以直接下载官方的预编译版本后开箱即用. 预编译版本 这里以 Linux 版本为例: $ wget https://github.com/tsenart/vegeta/releases/download/v7.0

压力负载测试工具

网站压力负载测试工具:Web版已逝,只好送大伙单机版 前言: 最近老板资金周转出了点问题,工资好久没发了,于是暂闲置在家,静待老板弄到钱东山再起的消息: QQ群里,偶尔不时的会有人问,原来的分布式网站负载工具怎么下载不了啦?或者不能用啦?之类的问题. 我只能说,鉴于互联网精神,我之前把它关了. 其实主要是我那个VPS商,前端时间,估计也是资金问题,泥玛尼的打不开1个月都没人理,最后还告诉我硬盘数据全没了. 好在我够善良,不然真想拿刀砍他. 趁着感冒,敲敲代码,刺激下大脑,提高下免疫力. 虽然原来

HTTP/HLS/RTMP超级负载测试工具(转)

这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winlinvip/st-load 找到非常详细的介绍,包括如何安装,如何使用. 服务器负载测试工具(st-load): 模拟huge并发:2G内存就可以开300k连接.基于states-threads的协程. 支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端.支持HLS点播和直播. 支持HTT

Apache JMeter开源压力测试/负载测试工具 2.12 官方最新版

软件介绍 Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学好Jmeter: 如果你用Jmeter去对Web进行功能测试,或者性能测试. 你必须熟练HTTP协议,才能学好Jmeter. 否则你很难理解Jmeter中得概念. Jmeter运行: 解压后, 运行  “bin/jmeter.bat” Jmeter 是支持中文的, 启动Jmeter 后, 点击 Opti

开源Web测试工具介绍

HtmlUnitHtmlUnit 是 JUnit 的扩展测试框架之一.HtmlUnit 将返回文档模拟成 HTML,这样您便可以直接处理这些文档了.HtmlUnit 使用例如 table.form 等标识符将测试文档作为 HTML 来处理.它同样需要遵循 JUnit 测试框架结构的 Java™ 测试程序. MaxQMaxQ是一个Web功能测试工具.它包括一个记录测试脚本的HTTP代理,一个用于重放测试的命令行实用程序.代理记录器自动存储提交到表单的变量,那么你无需用手书写它们. jWebUnit

开源API测试工具 Hitchhiker v0.6更新 - 改进压力测试

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试Api. 详细介绍请看: http://doc.hitchhiker-api.com/cn/introduction.html 在线体验: http://www.hitchhiker-api.com/, 可以用 try without login 来免登录使用 (在线演示不支持压力测试和上传js,虚

高效率的测试者会在工作时做的4件事

我不清楚你的情况,但我很容易分心.我查看自己的邮箱,查看我的Facebook,查看我的Linkedin.我们生活在一个信息可以通过多种渠道推送给我们的世界.我认为这是件很棒的事—但这有时候会导致你效率低下.这里有4件事能够帮助你成为一个更高效率的测试者. 不要同时进行多项任务 你也许是世上最擅长同时进行多项任务的人.然而,这代表着你在每个任务上分配的就少了.在测试过程中需要相当的专心和注意力.这在进行多项任务时是相当不可能做到的事. 保持注意力需要大量的训练,在此,我有几个建议: 在固定时间查看