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 ===
});

这里的主要区别在于,在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  =   ; x  <=   ; x ++)
for(int y = ; y <= ; y ++)
servlet ?param1 = x &param2 = y

在JMeter中:

您的架构可能如下所示:

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

在k6:

使用以下脚本代码:

for(var  x  =   ; x  <=   ; x ++)
for(var y = ; y <= ; 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 监控

    程序员怎么留住健康?

    大数据智慧平台技术方案

												

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

  1. Locust分布式负载测试工具入门

    忽略元数据末尾 回到原数据开始处 Locust简介 Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试. 以下是github上的仓库地址 https://github.co ...

  2. HTTP/HLS/RTMP超级负载测试工具

    这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winli ...

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

    http://www.php100.com/html/it/mobile/2014/1015/7495.html 当前有很大的趋势是转向移动应用平台,Android 是最广泛使用的移动操作系统,201 ...

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

    这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winli ...

  5. loadrunner(预测系统行为和性能的负载测试工具)

    LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试.企业使用LoadRu ...

  6. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

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

    软件介绍   Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学 ...

  8. 开源Web测试工具介绍

    HtmlUnitHtmlUnit 是 JUnit 的扩展测试框架之一.HtmlUnit 将返回文档模拟成 HTML,这样您便可以直接处理这些文档了.HtmlUnit 使用例如 table.form 等 ...

  9. 开源API测试工具 Hitchhiker v0.7更新 - Schedule的对比diff

    Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试Ap ...

随机推荐

  1. Validator验证框架

    Validator验证框架 系统分析 在设计Validator验证框架时,需要明确以下问题. (1)当用户没有输入数据时,弹出英文提示信息. (2)当用户输入的数据长度大于系统设置的数据长度,弹出英文 ...

  2. C语言常用的编程规范

    1排版 1-1相对独立的程序块之间.变量说明之后必须加空行. 示例:如下例子不符合规范. if (!valid_ni(ni)) { ... // program code } repssn_ind = ...

  3. ubuntu14.04 安装lnmp + redis

    1.更新源 apt-get install update 2.安装nginx : apt-get install nginx 配置nginx: ① cd /etc/sites-enabled/ ② v ...

  4. 微信小程序用户信息解密失败导致的内存泄漏问题。

    微信小程序获取用户解密的Session_key 然后对 encryptedData进行解密 偶尔报错 时间长了之后会报内存溢出: java.lang.OutOfMemoryError: GC over ...

  5. Spring IOC容器基本原理

    2.2.1 IOC容器的概念IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IOC容器 ...

  6. 【安富莱专题教程第7期】终极调试组件Event Recorder,各种Link通吃,支持时间和功耗测量,printf打印,RTX5及中间件调试

    说明:1.继前面的专题教程推出SEGGER的RTT,JScope,Micrium的uC/Probe之后,再出一期终极调试方案Event Recoder,之所以叫终极解决方案,是因为所有Link通吃.  ...

  7. APP测试流程的总结

    本规范基于app大小版本测试经验总结. 第一阶段:需求分析(技术+产品) 1. 新需求是否合理 2. 新旧需求时否存在冲突 3. 理出测试重点 4. 估算测试时间 5. 不熟悉的需求点,确认(负责人, ...

  8. 还在使用SimpleDateFormat?你的项目崩没?

    如果是在多线程环境下,就需要注意了. 要点: 1.加Synchronized同步: 2.使用ThreadLocal: 3.jdk8使用DateTimeFormatter替代SimpleDateForm ...

  9. Cassandra事务与关系型数据库事务有何区别

    Cassandra不会使用回滚和锁机制来实现关系型数据的ACID事务,相比较于提供原子性,隔离性和持久化,Cassandra提供最终(可调节的)一致性,让用户决定为每个事务提供强一致性或者最终一致性. ...

  10. nfs服务启动失败:Failed to start NFS status monitor for NFSv2/3 locking..

    今天碰到个问题,服务器重启后,nfs服务就启动不了了,关闭都关不了.查看系统日志报下面的错: Aug 10 17:08:53 prod-r3-slt-s-01 systemd: Started Pre ...