当前位置: 首页 > news >正文

【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

目录

前言

wrk

优点

缺点

jmeter

优点

缺点

locust

优点

缺点

总结

资料获取方法


前言

当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢?

今天,笔者将根据自己使用经验,针对jmeter、locust、wrk和loadrunner常用的性能测试工具进行简单介绍和对比。首先,四者基本对比图:

.loadrunnerjmeterlocustwrk
分布式压力支持支持支持不支持
单机并发能力
并发机制进程/线程线程协程线程
开发语言C/JavaJavaPythonC
报告与分析完善简单图标简单图表简单结果
授权方式商业收费开源免费开源免费开源免费
测试脚本形式C/JavaGUIPythonC
资源监控支持不支持不支持不支持

由于loadrunner为商业收费模式,对于公司级测试使用而言涉及到授权问题,因此,本文暂不对loadrunner进行详细讨论。

wrk

wrk是轻量化的http性能测试工具,采用线程+网络异步IO模型,网络异步IO可以使得系统使用很少的线程模拟大量的网络连接以增大并发量、提高压力。

优点

  • 操作简单、易于使用,

使用方式例如:

./wrk -c 1000 -t 8 -d 10s http://www.baidu.com

主要包括以下参数:

  • -t(--thread) 需要模拟的线程数;
  • -c(connection) 需要模拟的连接数;
  • --timeout 超时的时间;-d(--duration) 测试的持续时间

缺点

①wrk只支持http协议类型请求(如get、post等),但若是需要执行get之外的http类型请求需要使用者自行编写lua脚本;

②只允许单机测试,不支持多机分布式压力测试,因此wrk适合性能基准测试,对于模拟上万的用户并发测试显得有点力不从心;

③测试结果简单,无详细图表解析,举例如下;

wrk测试结果输出:

image

jmeter

jmeter同样采用线程并发机制,但其主要依靠增加线程数提高并发量,当单机模拟数以千计的并发用户时,对于CPU和内存的消耗比较大。与上述wrk相比,jmeter本身具有以下优点和缺点:

优点

①界面可视化操作,可以使用录制脚本方式对较为复杂的用户流建模,还可以创建断言来验证测试行为是否通过;

②表格、图形、结果树等多类可视化数据分析和报告输出,举例如下;
jmeter聚合报告及表格查看结果:

image

③支持http、ftp、tcp等多种协议类型测试;

④支持分布式压力测试,但对于上万的用户并发测试需要多台测试机支持,资源要求比较大;

⑤可以用于测试固定吞吐量下的系统性能,例如在100QPS(QPS:每秒查询率)下系统的响应时间和资源消耗;

缺点

jmeter的GUI模式消耗资源较大,当需要测试高负载时,需要先使用GUI工具来生成XML测试计划,然后在非GUI模式下导入测试计划运行测试,并且关闭不需要的侦听器(收集数据与展示测量的组件),因为侦听器也会消耗掉本用于生成负载的大量资源。测试结束后后,需要将原始结果数据导入GUI以才能查看结果。

locust

locust是一个的简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。

与jmeter和wrk相比,locust具有以下优缺点:

优点

①不同与wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级;

②相比wrk对复杂场景测试的捉襟见肘和jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试;

③不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等);

④locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求;

缺点

同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多;

locust测试结果:

image

总结

本文简单介绍和对比了wrk、jmeter及locust三种性能测试工具,希望能给大家带来基础的认识。此外让我们最后一起来看看面临以下测试需求,我们应该如何在三者中进行选择:

我想使用界面操作的形式对我的系统做性能测试,并且希望我的测试数据有个良好的可视化展示方式;

建议使用jmeter工具

我想要对我系统的http rest接口进行性能测试,但是我之前没有进行过任何测试,我不知道我的系统QPS是个什么样的水平;

建议使用wrk工具

我想对我的系统模拟用户操作进行复杂场景的性能测试;

建议使用locust工具

我想测试我的系统在一定QPS情况下,一段时间内的性能指标(cpu消耗、内存消耗等);

建议使用jmeter工具

我想使用匀速请求的方式,对我的系统进行性能测试;

建议使用jmeter或locust工具

我想体验编程的乐趣,自己编写脚本进行性能测试;

http请求:wrk,使用lua语言编写脚本;
locust,使用python语言编写脚本;

或者,just do it by yourself,自己选择编程语言编写性能测试脚本。

附录

wrk 使用参数说明

①参数-c(connection,线链接数)与操作系统文件句柄数相关,-c不能超过文件句柄数设置,开始测试前应保证系统可用端口数大于-c设置;

②参数-t(--thread,线程数)与操作系统cpu核数有关,-t不宜设置过大,过大的线程数设置反而会因线程调度反而使性能降低。如下图所示,操作系统为8核cpu:相同连接数和测试时长条件下,不同线程数对同一系统REST接口测试,从测试结果可以看出当thread=8(与cpu核数一致)时系统性能测试结果最佳,性能波动最小;

image

8核cpu:相同连接数和测试时长条件下,不同线程数对同一系统REST接口测试结果对比图


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

相关文章:

【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢? 今…...

为什么升级JDK 11后堆外内存使用增长了?

文章首发地址 JDK 11堆外使用增长的原因 JDK 11堆外使用增长的原因可能有以下几个: G1垃圾回收器的默认设置更改: JDK 11中的G1垃圾回收器默认开启了堆外内存分配,以减少Full GC时的STW时间。因此,如果应用程序使用了G1垃圾回收…...

Vue自定义防重复点击指令(v-repeatClick)

&#xff01;&#xff01;&#xff01;Vue防抖节流方法&#xff1a;VUE使用节流和防抖_vue防抖节流_停留的章小鱼的博客-CSDN博客 新建js文件directive.js: // directive.js // 防重复点击(指令实现) //使用&#xff1a; 在需要的按钮中加 v-repeatClick 指令即可 <el-but…...

高频高速板行业现状及市场前景

覆铜板全称为覆铜箔层压板&#xff0c;是由增强材料浸以树脂胶液 , 覆以铜箔 , 经热压而成的一种板状材料。覆铜板是制作印制电路板的核心材料&#xff0c;担负着印制电路板导电、绝缘、支撑三大功能。高频高速电路板有介电常数小且稳定、介质损耗小、传输损耗小等特点。 高频…...

【练手】自定义注解+AOP

在SpringBoot中实现自定义注解&#xff1a;( 声明注解的作用级别以及保留域 ) Target({ElementType.METHOD,ElementType.PARAMETER}) //注解的作用级别 Retention(RetentionPolicy.RUNTIME) //注解的保留域 public interface Log {int value() default 99; }在…...

QComboBox添加样式后,编辑栏背景一直白色问题解决方法。

一、QComboBox样式 /* 未下拉时&#xff0c;QComboBox的样式 */ QComboBox {border: 1px solid gray; /* 边框 */border-radius: 3px; /* 圆角 */padding: 1px 18px 1px 3px; /* 字体填衬 */color: #000;font: normal normal 15px "Microsoft YaHei";backgrou…...

vue动态绑定多个class以及带上三元运算或其他条件

在Vue中&#xff0c;有多种方法可以动态添加样式。下面介绍几种常用的方法&#xff1a; 1. 使用动态绑定的方式&#xff1a; 可以使用:style指令将一个对象作为值传递给它&#xff0c;对象的属性名表示要设置的样式属性&#xff0c;属性值表示要设置的样式值。例如&#xff1…...

Rpc原理

dubbo原理 1、RPC原理 一次完整的RPC调用流程&#xff08;同步调用&#xff0c;异步另说&#xff09;如下&#xff1a; 1&#xff09;服务消费方&#xff08;client&#xff09;调用以本地调用方式调用服务&#xff1b; 2&#xff09;client stub接收到调用后负责将方法、参数…...

yapi容器化docker部署以及mongodb容器的持久化挂载异常问题

概述 通过docker形式部署yapi&#xff0c;需要准备一个mongodb&#xff0c;然后直接在一个空文件夹里写好Dockerfile&#xff0c;其中通过wget下载yapi的zip包。 基本按照这篇文章&#xff1a;https://www.modb.pro/db/149666 来处理即可 1. 准备mongodb 把mongodb的docker…...

MyBatis-XML映射文件

XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致&#xff08;EmpMapper对应EmpMpper.xml&#xff09;&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09; ​​​ 在maven项目结构中所有的配置文件都在resources目录之下&…...

C++类和对象入门(下)

C类和对象入门 1. Static成员1.1 Static成员的概念2.2 Static成员的特性 2.友元2.1 友元函数2.2 友元函数的特性2.3 友元类 3. 内部类3.1 内部类的概念和特性 4. 匿名对象5. 再次理解类和对象 1. Static成员 1.1 Static成员的概念 声明为static的类成员称为类的静态成员&…...

安卓:实现复制粘贴功能

目录 一、介绍 &#xff08;一&#xff09;ClipboardManager介绍 1、ClipboardManager常用方法&#xff1a; 2、获取 ClipboardManager实例 &#xff08;二&#xff09;、ClipData介绍 1、创建ClipData对象&#xff1a; 2、获取ClipData的信息&#xff1a; 3、ClipData…...

jenkins pipeline项目

回到目录 将练习jenkins使用pipeline项目&#xff0c;结合k8s发布一个简单的springboot项目 前提&#xff1a;jenkins的环境和k8s环境都已经安装完成&#xff0c;提前准备了gitlab和一个简单的springboot项目 创建一个流水线项目 流水线中选择git&#xff0c;并选择gitlab的…...

机器学习笔记 - YOLO-NAS 最高效的目标检测算法之一

一、YOLO-NAS概述 YOLO(You Only Look Once)是一种对象检测算法,它使用深度神经网络模型,特别是卷积神经网络,来实时检测和分类对象。该算法首次在 2016 年由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 发表的论文《You Only Look Once: Unified, Re…...

Grafana集成prometheus(3.Grafana添加promethus数据)

添加数据库 选择Connections -> Datasources&#xff0c;点击Add New data source&#xff0c;填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…...

flutter开发实战-实现首页分类目录入口切换功能

。 在开发中经常遇到首页的分类入口&#xff0c;如美团的美食团购、打车等入口&#xff0c;左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…...

基于粒子群改进BP神经网络的时间序列预测,pso-bp时间序列预测

目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 粒子群算法的原理及步骤 基于粒子群算法改进优化BP神经网络的时间序列预测 matlab代码 代写下载链接:https://download.csdn.net/downlo…...

std::string和std::wstring无法前向声明

在.h文件中需要声明返回类型为std::string的函数&#xff0c;这时候需要声明一下std::string&#xff0c;但是发现报错了。 这时候查了一下&#xff0c;发现std::string是typedef的&#xff0c;无法前向声明&#xff0c;这时候只能用include。其主要是考虑到如果为了让string前…...

论文阅读-Neighbor Contrastive Learning on Learnable Graph Augmentation(AAAI2023)

人为设计的图增强&#xff0c;可能会破坏原始图的拓扑结构&#xff0c;同时相邻节点被视为负节点&#xff0c;因此被推离锚点很远。然而&#xff0c;这与网络的同质性假设是矛盾的&#xff0c;即连接的节点通常属于同一类&#xff0c;并且应该彼此接近。本文提出了一种端到端的…...

PostgreSql 进程及内存结构

一、进程及内存架构 PostgreSQL 数据库运行时&#xff0c;使用如下命令可查询数据库进程&#xff0c;正对应上述结构图。 [postgreslocalhost ~]$ ps -ef|grep post postgres 8649 1 0 15:05 ? 00:00:00 /app/pg13/bin/postgres -D /data/pg13/data postgres …...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...