- 浏览: 806584 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huan19900606:
像haskell这些脚本语言很容易定义DSL,实现对应的词法语 ...
DSL的基本介绍(groovy来进行构建) -
express_wind:
https://yq.aliyun.com/album/130 ...
qlexpress规则引擎初探 -
readxuxuegang:
博主你好。如果groovy的代码是保存在数据库里,不是文件,这 ...
在java中使用groovy怎么搞 (java and groovy) -
express_wind:
hi,兄弟,有没有兴趣来阿里巴巴专门做这方面的研究,https ...
qlexpress规则引擎初探 -
langcaiye:
有2个问题请教:1. 这里的base32算法为什么需要以负数的 ...
【原】geohash算法详解
在开发过程中,有时候为了简单测试一下接口的性能情况,会写单元测试搞一下,之前是自己用多线程来调用这个接口,也能满足需求,但是每次要调整多线程的配置情况还要修改代码,有点费劲,无意间在一淘测试的网站上面看到一篇文章(http://testing.etao.com/node/626),有人将单元测试压测用注解的形式搞定了。决定用一下,觉得挺好用呵呵。
ContiPerf是一个轻量级的测试工具,它能很轻易的让用户使用Junit4的测试用例进行联系的性能测试。其设计的灵感来自于Junit4利用注释进行简单的测试配置还来自于JUnitPerf用包装单元测试用于性能测试的思路。
ContiPerf目前最新的版本是2.1,它的依赖少,只需要Java5和Junit4.7以上,注意这里junit必须是4.7以上,刚开始用的时候在这里踩了一个坑。
在maven中引入jar包,scope设置为test类型。
使用ContiPerf必须现在@Rule的注释下生成一个ContiPerfRule的对象。ContiPerfRule的构造函数有三个,分别为:
public ContiPerfRule()、public ContiPerfRule(ExecutionLogger executionLogger)和public ContiPerfRule(ReportModule... modules)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@PerfTest 用户可以在这个注释中添加性能测试的执行要求。 Invocations:方法的执行次数,例:@PerfTest(invocations = 300)重复执行300次; Threads:同时执行的线程数,例:@PerfTest(invocations = 30, threads = 2)两个线程并发执行,每个线程执行15次,总共执行30次; Duration:在指定时间范围内一直执行测试,例:@PerfTest(duration = 300)在300毫秒内反复执行。 三个属性可以组合使用,其中Threads必须和其他两个属性组合才能生效。 当Invocations和Duration都有指定时,以执行次数多的为准。 @PerfTest(invocations = 300, threads = 2, duration = 100),如果执行方法300次时候执行时间还没到100ms, 则继续执行到满足执行时间等于100ms,如果执行到50次的时候已经100ms了,则会继续执行之100次。 如果你不想让测试连续不间断的跑完,可以通过注释设置等待时刻。 例,@PerfTest(invocations = 1000, threads = 10, timer = RandomTimer.class, timerParams = { 30, 80 }) , 每执行完一次会等待30~80ms然后才会执行下一次调用。 在开多线程进行并发压测的时候,如果一下子达到最大进程数有些系统可能受不了,ContiPerf还提供了“预热”功能。 例,@PerfTest(threads = 10, duration = 60000, rampUp = 1000) ,启动时会先起一个线程, 然后每个1000ms起一线程,到9000ms时10个线程同时执行,那么这个测试实际执行了69s, 如果只想衡量全力压测的结果,那么可以在注释中加入warmUp, 即@PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000) ,那么统计结果的时候会去掉预热的9s。 |
这个组件的官方主页http://databene.org/contiperf.html ,更加好用的是,压测的结果还会用图表的形式展示出来呵呵。源代码么看过,但是猜测一下,应该是维护了一个线程池、计数器和计时器,然后根据注解中的配置来执行被注解的方法。
上面接口类可以通过注解并发请求,然后达到开发测试的目的,但是Http接口改怎么搞呢?不用着急,已经有成熟的工具了,ab和httpLoad,使用都非常简单。
ab是apache自带的一个很好用的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab。
入参:
1
2
3
4
5
6
7
|
Usage: ./ab [options] [http://]hostname[:port]/path Options are: -n requests Number of requests to perform -c concurrency Number of multiple requests to make -t timelimit Seconds to max. wait for responses -p postfile File containing data to POST 参数很多,一般我们用 -c 和 -n 参数就可以了. |
返回结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
##首先是apache的版本信息 This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking vm1.jianfeng.com (be patient) Server Software: Apache/2.2.19 ##apache版本 Server Hostname: vm1.jianfeng.com ##请求的机子 Server Port: 80 ##请求端口 Document Path: /a.html Document Length: 25 bytes ##页面长度 Concurrency Level: 100 ##并发数 Time taken for tests: 0.273 seconds ##共使用了多少时间 Complete requests: 1000 ##请求数 Failed requests: 0 ##失败请求 Write errors: 0 Total transferred: 275000 bytes ##总共传输字节数,包含http的头信息等 HTML transferred: 25000 bytes ##html字节数,实际的页面传递字节数 Requests per second: 3661.60 [#/sec] (mean) ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量 Time per request: 27.310 [ms] (mean) ##用户平均请求等待时间 Time per request: 0.273 [ms] (mean, across all concurrent requests) ##服务器平均处理时间,也就是服务器吞吐量的倒数 Transfer rate: 983.34 [Kbytes/sec] received ##每秒获取的数据长度 Connection Times (ms) min mean[+/-sd] median max
Connect: 0 1 2.3 0 16 Processing: 6 25 3.2 25 32 Waiting: 5 24 3.2 25 32 Total: 6 25 4.0 25 48 Percentage of the requests served within a certain time (ms) 50% 25 ## 50%的请求在25ms内返回
66% 26 ## 60%的请求在26ms内返回
75% 26
80% 26
90% 27
95% 31
98% 38
99% 43
100% 48 (longest request) |
关于httpload(http://acme.com/software/http_load/),web测试工具,能够单进程模拟多个测试端发起请求,用于测试吞吐情况。
(1)安装
1
2
3
4
5
|
下载http_load:#wget http://icn.me/http_load_tar_gz 解压缩:#tar zxvf http_load-12mar2006.tar.gz 进入http_load 目录:#cd http_load-12mar2006 编译:#make 安装:#make install |
(2)入参
1
2
3
4
5
6
7
8
9
|
创建文件#vi urls 写入URL:http://www.baidu.com 然后执行#./http_load -rate 5 -seconds 10 -parallel 500 urls 参数含义: -fetches 简写-f :含义是总计的访问次数
-rate 简写-r :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间
-parallel 简写-p:并发访问的线程数
urls是一个url 列表,每个url 单独的一行。可以单个页面。
|
(3)返回结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
219 fetches, 500 max parallel, 1.36262e+06 bytes, in 10.0008 seconds 219个请求,最大并发数500,总计传输的数据为1.36262e+06 bytes,运行时间10.0008秒 6222 mean bytes/connection 每一连接平均传输的数据量1.36262e+06/219=6222 21.8982 fetches/sec, 136251 bytes/sec 每秒的响应请求为21.8982,每秒传递的数据为136251btyes/sec msecs/connect: 411.015 mean, 9080.76 max, 69.914 min 没连接的平均响应时间是411.015 means,最大响应时间9080.76 msecs,最小响应时间69.914 msecs msecs/first-response: 148.292 mean, 3686.02 max, 70.624 min HTTP response codes: code 200 -- 219
|
这些工具只是减少了我们进行压测的成本,但是压力测试的场景分析和结果的分析也是一件重要的事情。
发表评论
-
系统分布式情况下最终一致性方案梳理
2015-09-05 19:34 40960前言 目前的应用系 ... -
Storm核心概念剖析
2015-03-20 20:42 3227最近团队中有分析的场 ... -
池和流的两种数据处理方式
2014-11-19 22:59 1393在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流 ... -
关于CodeReview(java)
2014-10-29 20:42 1907关于codereview,在平时的开发中,经常忽略的环节,参 ... -
java中各种各样的数据结构
2014-07-13 20:26 2466在java中,有非常丰富的数据结构,可能是因为大多数的软件 ... -
关于JVM的ClassLoader(笔记)
2014-07-13 12:19 1874众所周知,java是编译型的语言,写的是java文 ... -
关于事务的几个概念介绍
2014-06-06 22:22 1943啥是事务? 有一组操 ... -
开发中遇到的编码问题
2014-05-22 19:39 18831、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ? 因 ... -
ThreadLocal源代码解析
2014-04-24 17:54 2407最开始的时候,理解的ThreadLocal,我的理解是这样的 ... -
关于单例模式(代码篇)
2014-04-23 10:47 2418很早的时候,转发过一篇单例模式的文章:http://iamz ... -
今天遇到的两个spring相关的两个问题
2014-04-18 21:56 2560今天在项目中写代码,遇到两个Spring的问题,记录一下。再 ... -
Activiti中的命令模式解析
2014-04-11 13:10 3198最近在看Activiti的源代码,发现是基于命令模式进行的开 ... -
关于java中的本地缓存-总结概述
2014-03-31 19:00 18373java中的本地缓存,工作后陆续用到,一直想写,一直无从下 ... -
使用guava中的EventBus构建内存级别的事件引擎
2014-03-25 19:27 6407这个EventBus是guava中比较给力的一个类,从字面 ... -
DSL的基本介绍(groovy来进行构建)
2014-03-04 23:32 17054什么是DSL? 领域特定 ... -
qlexpress规则引擎初探
2014-02-25 22:28 25119qlexpress是啥? 这个是阿里内部的一个开源的jav ... -
在java中使用groovy怎么搞 (java and groovy)
2014-01-15 23:17 10960什么是groovy? 一种基于Java虚拟机的动态语言, ... -
java中记录方法调用时间,结果按照方法的层级树状的输出
2013-12-21 17:36 4685 在java中,最常用的埋点时间的方法就 ... -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
2013-12-14 22:21 41348这个是之前处理过的一个线上问题,处理过程断断续续,经历了两 ... -
令牌桶算法和漏桶算法以及流量控制浅谈
2013-11-27 23:20 20794 在双十一等大促环节,系统需要限流,外部 ...
相关推荐
"esrally-dist-1.4.1.tar.gz" 是ES官方提供的一个压力测试工具,它提供了丰富的功能和配置选项,帮助我们评估和优化ES实例的性能。 **1. ESRally 简介** ESRally(Elasticsearch Rally)是官方推出的性能基准测试...
一款定制的压测工具, 对webapi webserver 等一些借口进行压测 , 可以自定义并发数量.
JMeter是Apache组织开发的一款强大的性能测试工具,主要用于模拟大量用户并发访问Web应用或服务,进行接口性能测试、压力测试以及负载测试。在本文中,我们将深入探讨JMeter的使用方法,以及它如何帮助我们进行并发...
本报告主要针对 Monkey 压力测试进行详细阐述,旨在评估和优化软件的稳定性和性能。Monkey 测试是一种在 Android 平台上广泛使用的自动化测试方法,通过模拟用户随机操作来发现潜在的问题和崩溃。 1. 概述 Monkey ...
通过以上介绍,我们可以看到Apache JMeter 5.1.1作为一个强大的API压测工具,具备了丰富的功能和灵活性,无论是对新手还是经验丰富的测试工程师,都是一个值得信赖的选择。在进行API性能测试时,合理利用这些特性...
通过以上分析,我们可以看出,服务端接口压测测试工具对于保障系统稳定性和优化性能有着举足轻重的作用。正确地使用这类工具,可以帮助开发者和运维人员发现潜在的问题,提升服务的整体质量和用户体验。
Apache JMeter是一款强大的开源接口压测工具,由...总的来说,Apache JMeter是一个功能强大、易于上手的接口压测工具,无论是开发者还是测试人员,都可以利用它有效地进行性能测试,确保系统在高压力下的稳定性和效率。
Apache JMeter是一款强大的开源性能测试工具,主要用于模拟大量并发用户对Web应用进行负载和压力测试。JMeter 5.6.3是其一个版本,它提供了丰富的功能,可以帮助开发者、测试人员评估系统的稳定性和性能。以下是对...
"DDR压测软件和使用方法.zip"这个压缩包中包含了关于DDR压测工具QMESA的相关资料,包括文档和使用手册。QMESA是一款专业的内存压力测试工具,适用于Android平台,可以帮助开发者测试和优化系统的内存性能。 QMESA ...
【软件测试压测报告】 本压测报告详细记录了对某个软件系统进行压力测试的过程和结果,重点关注系统的并发处理能力和稳定性。压力测试是评估系统在高负载或大量用户并发访问时的表现,确保其在极端情况下仍能正常...
stress-plan 是使用golang语言编写的轻量级压测工具,有着易用,从业务场景出发的压测功能。压力计划stress-plan 是使用golang语言编写的轻量级压测工具,有着易用,从业务场景出发的压测功能。 用于后端开发人员来...
对于Mac用户来说,有一款名为Throng的工具,它专为接口调试和压力测试而设计,提供了友好的界面,相较于其他同类工具,如PAW,Throng在易用性上有着显著的优势。 Throng是一款强大的接口测试工具,其主要功能包括...
综上所述,JMeter是一款功能全面的测试工具,不仅支持接口测试,还能进行性能压测,对于开发者和测试人员来说,它是评估和优化系统性能不可或缺的工具。通过熟练掌握JMeter的使用,可以有效地发现和解决可能影响系统...
"Linux串口压测工具"是一个专门用于测试串口性能的软件,通过模拟大量数据传输来评估串口的稳定性和处理能力。下面将详细介绍该工具的相关知识点。 首先,我们要理解什么是串口压测。串口压力测试是针对串行通信...
本资源“接口压力测-测试计划.zip”包含了一个使用JMeter工具进行接口压力测试的实例,旨在帮助我们理解如何配置和执行JMeter测试计划。 JMeter,全称为Apache JMeter,是一款开源的、Java编写的性能测试工具,适用...
Apache JMeter是一款强大的开源压力测试工具,主要用于对网站和接口进行性能测试,以评估系统在高负载下的稳定性、响应时间和整体性能。它最初是为Web应用设计的,但随着时间的发展,JMeter已经扩展到支持多种协议和...
性能压测测试报告是软件开发过程中至关重要的一环,它能够帮助我们评估系统在高负载条件下的稳定性和效率,为系统优化提供数据支持。本报告详细介绍了针对XX系统进行的压力测试过程,旨在分析测试结果,为当前系统...
Apache JMeter是一款强大的开源压力测试工具,主要用于评估和优化服务器、网络或对象的性能。它由Apache Software Foundation提供,是IT行业中广泛使用的测试框架,特别适用于API和Web应用的压力和负载测试。JMeter...
这里我们关注的是一款适用于Windows平台,并且针对HTTP、HTTPS、TCP和UDP协议进行图形化压力测试的工具。这样的工具对于开发者、运维人员以及系统管理员来说,是优化和调试网络服务不可或缺的辅助软件。 首先,让...