常用性能测试工具的比较

article/2025/8/23 15:21:40

目录

    • 性能测试的重要性
      • 针对接口的性能测试
    • 性能测试基准
    • 接口性能测试的主要指标
      • 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://chatgpt.dhexx.cn/article/BQy64Lla.shtml

相关文章

推荐几款常用的性能测试工具

“ 对内容不感兴趣拉到最后领取今天的外卖红包。” 常用的性能测试工具 对于开发人员来说&#xff0c;首选是一些开源免费的性能&#xff08;压力&#xff09;测试软件&#xff0c;例如 ab&#xff08;ApacheBench&#xff09;、JMeter 等&#xff1b;对于专业的测试团队来说&…

10款主流的软件测试工具,你用过吗?

随着软件快速交付需求的增长&#xff0c;越来越多的企业开始通过DevOps方法加速软件开发速度但这样的话&#xff0c;有时候就无法保证质量&#xff0c;所以今天小编就来给大家介绍10款主流的软件测试工具&#xff0c;供大家参考。 1、UFT / QTP UFT&#xff0c;前身为Quick …

10款好用的自动化测试工具

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群&#xff0c;加入我们&#xff0c;一…

常用的软件测试工具大全

开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator **[TestDirector]&…

软件测试工作中有哪些常用的工具?

软件测试工作中有哪些常用的工具&#xff1f;一般来说有开源测试管理工具、开源功能自动化测试工具、开源性能自动化测试工具、Quality Center、QuickTest Professional、LoadRunner等。 一、推荐10款常见的软件测试工具: &#xff08;1&#xff09;Bugfree BugFree是借鉴微软的…

我们常用的软件测试工具有哪些?

一名优秀的软件测试工程师&#xff0c;我觉得他一定也是一名善用工具的好手&#xff0c;他知道在软件测试领域都有哪些测试工具&#xff0c;这些工具都有什么优缺点&#xff0c;这些工具适合在什么情况下使用 &#xff0c;反馈的结果是什么&#xff0c;知道各种工具之间如何配合…

测试工具类

目录 测试接口管理工具&#xff1a; Swagger Eolink APIKit Apipost7  Apifox 自动化测试平台&#xff1a; Choerodon猪齿鱼 MeterSphere RPA 自动化测试框架 Appium Robot Framework Selenium python 自动化测试框架 1.Robot Framework 2.Pytest 3.UnitTest…

软件测试工具有哪些(软件测试常用的工具都有哪些)

一、一个从事软件测试行业十年的老司机列出以下与软件测试相关的工具&#xff1a; 1.操作系统&#xff1a; Linux&#xff1a;vmware、xshell 、xftp 、ssh2.数据库&#xff1a; 主流是以下三种数据库&#xff0c;尤其是MySQL以及oralce,在测试中必会的技能是对表的相关操作&…

软件测试工具都有哪些

小编今天把软件测试常见的工具列了一下&#xff0c;看看有没有你现在在用的&#xff1f; 开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter…

10大主流性能测试工具,总有一款适合你

市面上流行的压力/负载/性能测试工具多是来自国外&#xff0c;近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同&#xff0c;其功能也有很大差异&#xff0c;下面就为您简单介绍10款目前最常见的测试产品。 01 kylinTOP测试与监控平台&#xff08;商…

10个常用的软件测试工具,你不容错过

在现代软件开发中&#xff0c;软件测试是不可或缺的一部分。为了确保软件产品的质量和稳定性&#xff0c;软件测试工具成为了测试团队的得力助手。 有许多优秀的软件测试工具可以帮助测试人员在各种测试活动中提高效率和准确性。 本文将介绍10个常用的软件测试工具&#xff0c;…

Android 实现锚点定位

相信做前端的都做过页面锚点定位的功能&#xff0c;通过<a href"#head"> 去设置页面内锚点定位跳转。 本篇文章就使用tablayout、scrollview来实现android锚点定位的功能。 效果图&#xff1a; 实现思路 1、监听scrollview滑动到的位置&#xff0c;tablayout切…

为什么定位不了HTML,css 锚点定位不了

css 锚点定位不了 css 锚点定位不了只有一个原因&#xff0c;就是书写错误&#xff0c;锚点的正确书写方式有两种&#xff0c;下面为各位介绍一下。 1、使用a标签设置锚点&#xff1a; ①&#xff1a;设置一个锚点链接 html&#xff1b;(注意&#xff1a;href属性的属性值最前面…

vue项目中实现锚点定位

使用场景&#xff1a;当页面被分割成许多小模块&#xff0c;且页面很长时&#xff0c;锚点功能可以帮助我们快速跳转到想要的模块&#xff1b;而当滑动滚动条时&#xff0c;根据当前视图中的显示的模块自动选中对应的锚点。 思路 锚点的id对应模块的元素的id。点击锚点时&#…

Vue3项目中锚点定位实现

代码 <!doctype html> <html class"no-js"><head><meta charset"utf-8"><title>锚点</title><script src"https://unpkg.com/vue3/dist/vue.global.js"></script><link rel"styleshee…

锚点定位——如何设置锚点居页面顶部距离,锚点定位并距离顶部一定偏移

锚点是网页制作中超级链接的一种&#xff0c;又叫命名锚记。命名锚记像一个迅速定位器一样是一种页面内的超级链接&#xff0c;运用相当普遍。 使用命名锚记可以在文档中设置标记&#xff0c;这些标记通常放在文档的特定主题处或顶部。然后可以创建到这些命名锚记的链接&#…

vue中实现锚点定位

vue中实现锚点定位 通过监听滚动事件&#xff0c;高亮显示锚点按钮添加点击事件&#xff0c;根据锚点滚动至对应区域并实现平滑滚动 这里主要是实现了一个简单的滚动触发锚点高亮&#xff0c;以及点击锚点触发滚动的功能 如果是获取浏览器的滚动高度&#xff0c;各个浏览器有所…

VUE实现锚点定位

文章目录 锚点定位功能总述提取标签内的关键词目录的渲染和点击跳转1.目录渲染2.锚点跳转 总结 锚点定位功能总述 在系统中会有管理端和客户端两种&#xff0c;在管理端中通过wangediter发布文章&#xff0c;然后在客户端中获取文章的数据&#xff0c;将其中h1和h2标签中的文字…

Vue锚点定位

VUE锚点定位 // 点击此处<div click"goDingyue">立即订阅</div>绑定事件 methods: {goDingyue() {// 获取元素在页面中的位置console.log(this.$refs.dingyue_box_ref.getBoundingClientRect());// document// .getElementById("agentTitle&qu…

jquery锚点定位

jquery实现锚点定位功能 这里主要是通过jquery实现了一个简单的滚动触发锚点高亮&#xff0c;以及点击锚点触发滚动的功能 $leftnav为左侧楼层导航栏(left-nav)&#xff0c;右侧right-content-body为滚动区域。主要是利用了scrollTo()和对滚动区域scroll事件的监听实现锚点定位…