常用性能测试工具的比较

news2024/9/22 13:43:54

目录

    • 性能测试的重要性
      • 针对接口的性能测试
    • 性能测试基准
    • 接口性能测试的主要指标
      • abench
      • jMeter
      • Kelude性能脚本
      • 各种监控工具
    • 参考
    • 总结

性能测试的重要性

众所周知性能测试在软件测试中占有举足轻重的作用,尤其是对于互联网产品这种具有大用户量,大数据量,大并发量特点的产品。如果我们希望产品能够良好的稳定性(Resilience)和可靠性(Reliability),那么我们必须:

  • 通过完备的性能测试对我们的产品的性能能力进行全面透彻的评估
  • 通过性能测试暴露出系统中的弱点
  • 通过性能测试对系统进行合理的优化
    性能测试通常会涵盖三个大的部分:
  • 客户端性能测试
  • 针对应用的网络性能测试
  • 应用的服务器端性能测试
    本文将着重介绍服务器端的性能测试

针对接口的性能测试

无论是C/S结构还是B/S结构,前端的应用都需要通过接口同服务器取得联系,进行数据的交互,最后完成特定的功能。通过对接口的性能测试可以暴露出服务器端的性能质量,数据库读取的性能质量,网络传输的性能等各个方面的问题。

性能测试基准

在进行性能测试之前,通常我们都需要具备一个——基准(Benchmark),这个基准将成为性能测试的一个标准,我们将不同版本的产品的性能测试结果同这个基准(Benchmark)进行比较得到各个版本的性能报告。

为了获得这个基准,我们可以通过基准测试(Benchmark Test BMT),BMT可以认为是一次特殊的性能测试,我们通过设定这次性能测试的环境和各种参数的配置得到这个基准。

例如,我们可以通过一个合理的PV容量结合“2-8原则”推算出并发数,然后用这个并发数作为参数进行性能测试

接口性能测试的主要指标

对于接口的性能测试,有两个指标是至关重要的:

QPS(Query per Second)——每秒查询率
Latency——响应时间
常用性能测试工具的比较
http_load
http_load是基于Linux平台的一种性能测工具。它以并行复用的方式运行,用以测试web服务器的吞吐量与负载,测试web页面的性能。http_load的使用比较简单,可以通过配置参数进行针对http接口的性能测试,http_load的主要参数:

-parallel——并发数
-rate——访问频率
-fetches——访问次数
-seconds——持续访问时间
需要注意的是 parallel和rate,fetches和seconds是要成对出现的

将需要测试的http接口保存在文件中(每行一个url),然后将这个url文件作为参数传给http_load,就可以对想要测试的接口进行性能测试/压力测试(Stress Test)了。为了实现自动化测试,我们可以通过脚本自动运行http_load,为了掌握不同时间段的接口性能差异,我们还可以通过crontab周期性的运行这个http_load的脚本,然后对得到的log进行分析

举一个简单的例子:

#!/bin/sh
{
echo ====Pressure Test with $1 progess and $2 times access====
http_load -parallel $1 -fetches $2 url.txt
echo ====Pressure Test in Rate $4 within $3 seconds access====
http_load -rate $4 -second $3 url.txt
}>>press.log
 

很容易的我们将得到这样的log结果:

====Pressure Test with 1021 progess and 1000 times access====
1000 fetches, 335 max parallel, 28000 bytes, in 0.049616 seconds
28 mean bytes/connection
20154.8 fetches/sec, 564334 bytes/sec
msecs/connect: 0.131318 mean, 0.398 max, 0.021 min
msecs/first-response: 9.09935 mean, 16.624 max, 0.524 min
HTTP response codes:
  code 200 -- 1000
 
====Pressure Test in Rate 1000 within 100 seconds access====
97727 fetches, 130 max parallel, 2.73636e+06 bytes, in 100 seconds
28 mean bytes/connection
977.27 fetches/sec, 27363.6 bytes/sec
msecs/connect: 0.255355 mean, 21.806 max, 0.022 min
msecs/first-response: 0.618477 mean, 21.806 max, 0.089 min
HTTP response codes:
  code 200 -- 97727
 

可以看到,通过http_load得到的测试结果是非常简陋的,那么有没有一种简便的工具可以得到更多的测试统计结果呢。答案是肯定的。

abench

abench是有Ali开发的结合了http_load和Fbench着两个工具的优点,它消耗的系统资源更小,并且可以提供更加全面的统计数据。

[admin@dn128015 loadtest]$ ./abench17
usage: ./abench_2.0.7_release [-p parallel number] [-r rate(cycletime)]
[-s seconds ] [-f fetches number]
[-k] [–help] [–version]

-p : run with parallel clients [0] 并发client数
-r : make requests each second [0] 每秒请求数,类似于QPS.
-s : run the test for seconds [0] 执行时间,单位是s
-f : run the test for fetches [0] 请求数,有f=r*s
-l : error log file path, default-value:error.log 错误日志文件路径
-a : access log file path 日志路径
-k : enable http keep-alive 保持客户端和服务器的连接,如果已连接上,则在这个连接上发送请求,接收请求。
–help : show help info 帮助信息
–version : show version 版本号
: Directory of query file 查询文件所在的目录
One start specifier, either -parallel or -rate, is required. 开始标识,或-p或-r
One end specifier, either -fetches or -seconds, is required. 结束标识,或-f或-s
and is required.主机名和端口号是必须的

下面是一个简单的应用abench做性能测试的例子,

abench -p 60 -s 100 -o err.log idata.etao.com 80  ~/idata_url

这就是一个abench测试的结果,从这个结果可以发现,abench可以提供比http_load更加丰富的统计数据:

--- FROM(02/19/14 15:00:01) TO(02/19/14 15:10:01) TIME-USED(0h-10min-0s) ---
CMD: abench_2.0.7_release  -p 1000 -s 600 s007010.cm6 2088 /home/yuhao.yh/all_url
QPS:                           13447.58
Latency:                       74.25 ms
Query Success Number:          8068547
Connect Failed Number:         0
Query Failed Number:           100
Query Timeout Number:          0
Match Failed Number:           0
No DocsReturn Number:          8068547 (100.00%)
Average DocsReturn Number:     0.00
No DocsFound Number:           8068547 (100.00%)
Average DocsFound Number:      0.00
Average Return Length(Bytes):  28
Min Response Time:             0.2 ms
Max Response Time:             238.4 ms
25 Percentile:                 72.4 ms
50 Percentile:                 76.5 ms
75 Percentile:                 79.9 ms
90 Percentile:                 82.1 ms
95 Percentile:                 83.3 ms
99 Percentile:                 85.6 ms

同样的我们可以利用脚本将abench的性能测试自动化起来,再此不再赘述。

jMeter

JMeter是Apache组织开发的基于Java的压力测试工具。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。

更多关于jMeter的资料可以访问https://jmeter.apache.org/

在利用jMeter进行http接口的性能测试的时候,我们需要在jMeter的测试模板jmx文件中编辑相应的参数。

例如:

<boolProp name="LoopController.continue_forever">false</boolProp> <intProp name="LoopController.loops">-1</intProp> </elementProp> <stringProp name="ThreadGroup.num_threads">300</stringProp> <stringProp name="ThreadGroup.ramp_time">0</stringProp> <longProp name="ThreadGroup.start_time">1306909102000</longProp> <longProp name="ThreadGroup.end_time">1306909102000</longProp> <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.duration">300</stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="10" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" ena bled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">idata.etao.com</stringProp> <stringProp name="HTTPSampler.port"></stringProp> <stringProp name="HTTPSampler.connect_timeout">1000</stringProp> <stringProp name="HTTPSampler.response_timeout">2000</stringProp> <stringProp name="HTTPSampler.protocol"></stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> <stringProp name="HTTPSampler.path">${para}</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">false</boolProp> <boolProp name="HTTPSampler.auto_redirects">true</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.implementation">Java</stringProp> <boolProp name="HTTPSampler.monitor">false</boolProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> </HTTPSamplerProxy> <hashTree/>

其中

300
300
是并发数

300
300
是测试时间

jMeter的测试结果是一个jtl文件,里面关于针对接口测试的各种数据:

 
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<httpSample t="89" lt="89" ts="1394390708742" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-58" dt="text" by="10361"/>
<httpSample t="61" lt="57" ts="1394390708774" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-91" dt="text" by="52286"/>
<httpSample t="83" lt="83" ts="1394390708749" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-66" dt="text" by="10637"/>
<httpSample t="81" lt="81" ts="1394390708757" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-77" dt="text" by="10361"/>
<httpSample t="74" lt="70" ts="1394390708765" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-89" dt="text" by="52286"/>
<httpSample t="91" lt="87" ts="1394390708749" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-68" dt="text" by="52286"/>
<httpSample t="95" lt="94" ts="1394390708746" s="true" lb="10" rc="200" rm="OK" tn="/idata 1-64" dt="text" by="10361"/>

其中:

t——全部访问完成的时间,单位毫秒
lt——从发出请求到获得第一个返回的数据包的时间,单位毫秒
ts——发起访问的timestamp
s——访问结果
rc——http返回值代码
可以通过脚本对结果文件进行分析获得整个测试的统计结果:

java -jar ~/JTLParser.jar --jtlFile $MYDIR/result.jtl

========Test result for updatetime=currenttime,src=all========
FROM:                   03/09/14 02:40:03
END:                    03/09/14 02:45:03
Sended Query Number:    131846
Total Spended Time(s):  299.95
QPS:                    439.56
Latency(ms):            124
Max Response Time(ms):  2022
Query Success Number:   131840
Query Failed Number:    6
 

Kelude性能脚本

Kelude是一套功能强大的集成化工具,利用它上面的PAP脚本,可以通过脚本创建向导非常简便的创建性能测试脚本,然后利用Kelude可以简便的配置测试环境和参数,自动的规划测试执行时间,并且统计测试结果。

下面通过一个简单的例子说明如何利用PAP脚本进行针对http接口的性能测试。

创建PAP性能脚本

  • 打开后端性能-性能脚本,然后点击——“新增脚本”按钮
  • 选择脚本类型,添加脚本名称,然后就可以添加事务了。
  • 将你要测试的http接口作为事务添加到脚本中,如果需要对你要测试的host进行绑定,可以添加域名绑定
    将各项参数加好之后就可以保存,完成性能脚本了。
  • 创建性能场景,在这里可以配置并发用户数
  • 创建性能任务,在这一步就可以将刚才创建的性能脚本,性能场景整合成一个性能任务了,然后指定这个性能任务的开始时间,持续时间。就可以等着收结果了
    alt

在性能任务运行成功之后,可以点击任务查看测试结果详情:

在这里插入图片描述

各种监控工具

在性能测试的时候,系统的诸多性能是必须要加以关注的,以免由于性能测试参数的选择不当对系统造成损坏。所以我们再进行性能测试/压力测试的时候要通过各种监控工具对我们加压的系统加以关注。同时利用这些监控工具,我们以可以对他们的数据进行采集,将这些数据作为我们性能测试分析报告的一部分。

参考

  • iperf3: 用来测量一个网络最大带宽的工具

总结

在这里对几种常用的http接口的性能测试工具进行了非常粗浅的罗列。性能测试作为系统测试中至关重要的一个环节,需要针对被测对象的特性合理的选择测试工具和测试方法。同时性能测试又是一个自动化程度最高的一个测试门类。这就给我们带来个更大的挑战和发挥空间。希望有机会和大家共同探讨更多的关于性能测试的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot学习篇(一)

Spring Boot学习篇(一) 1 Spring、SpringBoot、SpringCloud有什么区别&#xff1f; spring一般指Spring框架&#xff08;SpringFramework&#xff09;&#xff0c;它是一个开源、轻量级的Java应用开发框架。其核心是控制反转IOC和面向切面编程AOP。Spring提供了很多包括ORM、…

Kaggle 新赛 | GoDaddy 微型企业密度预测

文章目录一、比赛背景和目标1. 背景2. 比赛目标二、提交、时间线和奖项三、代码要求一、比赛背景和目标 1. 背景 美国政策领导人努力发展更具包容性和抗衰退能力的经济体。他们也意识到&#xff0c;随着科技的进步&#xff0c;创业从来没有像今天这样容易。无论是创造一个更合…

【阙值分割】粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】

⛄一、粒子群算法自适应多阈值图像分割简介 理论知识参考&#xff1a;【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 粒子群优化的多阈值图像自分割算法 ⛄二、部分源代码 clc;clear;close all; %% 输入图像&#xff1b; Imag imread(‘24063.jpg’);%29…

【算法】常见的排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序)

目录一.常见排序类型二.排序详解1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序一.常见排序类型 插入排序&#xff1a;插入排序、希尔排序选择排序&#xff1a;简单选择排序、堆排序交换排序&#xff1a;冒泡排序、快速排序归并排序基数排序(又叫桶排序)八万个…

Java项目:新闻推荐管理系统(java+SSM+JavaScript+Ajax+Mysql)

源码获取&#xff1a;俺的博客首页 "资源" 里下载&#xff01; 项目介绍 本项目新闻推荐管理系统&#xff1b; 前台: 登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论 后台&#xff1a; &#xff08;1&#xff09;文件管理&#xff1a;文件列表。 &#x…

3.无重复字符的最长子串

原题&#xff1a;https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 目录 题目描述 题解 代码实现 题目描述 给定一个字符串s&#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "…

微型计算机技术及应用笔记

微型计算机概述 主机系统包括&#xff1a; CPU存储器输入输出接口总线CPU包括&#xff1a; 运算器&#xff08;ALU&#xff09;控制器&#xff08;CU&#xff09;寄存器组&#xff08;Register&#xff09;寄存器&#xff1a;通用寄存器、专用寄存器 控制器由指令寄存器、指令…

攻防世界——Web新手练习区

目录 view_source get_post robots ​backup cookie disabled_button simple_js xff_referer weak_auth command_execution simple_php view_source 知识点&#xff1a; 查看网页源代码的几种方式&#xff1a; 按F12键&#xff0c;点击elements可以查看源代码快捷…

《图解TCP/IP》阅读笔记(第六章 6.1、6.2)—— 传输层的作用、端口号

第六章 TCP与UDP TCP与UDP和赫赫威名&#xff0c;在此前几章已略有耳闻。 TCP提供可靠的通信传输&#xff0c;而UDP则常被用于让广播和细节控制交给应用的通信传输。 首先&#xff0c;我们先来回顾一下传输层的定义。 上一章中提到过&#xff0c;IP中有一个协议字段&#x…

猿如意|程序员的如意神器之【chat GPT】测评。

chat GPT测评1、使用感受2、功能展示3、期待优化地方3.1 猿如意网页版搜索功能3.2 chat GPT3.2.1 测试抢券才能体验3.2.2 聊天体验1、使用感受 首先&#xff0c;需要对猿如意进行点赞。 正如宣传语所说&#xff0c;猿如意&#xff0c;程序员的的如意兵器&#xff0c;这句话&am…

[附源码]Node.js计算机毕业设计个性化旅游线路推荐系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

WordCloud库简介与使用示例

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是WordCloud库简介与使用示例。 一、WordCloud库简介与安装 WordCloud是一款Python的第三方库&#xff0c;可以用于生成词云。词云可以以词语为基本单位&#xff0c;然后根据词语的出现频率确定词语的大小&#xff…

linux red hat 8.0 root密码破解

简介&#xff1a; root用户是linux用户最大权限的用户&#xff0c;如果不慎将其密码忘记是不可直接更改的&#xff0c;只能通过破解的方式来重置root密码。 linux系统的启动过程&#xff1a; 1 开机自检&#xff08;POST&#xff09;&#xff0c;初始化部分硬件 2 搜素可用…

嵌入式从业者应知应会知识点 - 索引

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点。 嵌入式开发需要掌握的知识点非常多&#xff0c;不同的技术方向有不同的知识侧重点&#xff0c;本系列试图整理总结嵌入式开发&#xff08;尤其是软件&a…

毕业设计 stm32车牌识别 - 单片机 嵌入式 物联网 机器视觉

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码5 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长…

juc-3-volatile

目录 1 多线程下变量的不可见性及解决方案 2 不可见性解决方案 2.1 加锁方式解决 2.2 使用volatile关键字 2.3 while(true)速度快调用本地线程内存&#xff0c;加延时即可访问主内存的共享变量 3 volatile不保证原子性以及解决方案 3.1 案例 volatile 验证不是原子性 3.…

详细解析预处理

预处理一.总体概述1.注释去除2.宏替换二.宏定义1.数值宏常量2.字符串宏常量3.用宏定义注释符号4.用宏定义表达式&#xff08;难点&#xff09;1.第一种情况2.第二种情况5.#undef&#xff08;宏的有效范围&#xff09;1.两个问题2.#undef的使用3.一段代码的理解三.条件编译1.#if…

基于nodejs商城系统开发与设计(项目源码+论文设计+ppt答辩+视频录制)

网上购物商城系统以弥补传统购物方式的弊端。在目前的商城里&#xff0c;如果采用网上商城方式&#xff0c;用户购物时就不需要到店里面排队&#xff0c;这样不仅能实时地了解商品的特色&#xff0c;而且方便了顾客&#xff0c;同时也减轻了商城的服务压力。随着WLAN技术的普及…

计算机毕设Python+Vue新文道考研机构在线教学辅导系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

python的panda库读写文件

目录 1.读取excel文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 2.读取cvs文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 3.读取txt文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 4.写入文件 &…