`
iamzhongyong
  • 浏览: 796370 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

单元测试压测和http接口压测-工具

 
阅读更多

        在开发过程中,有时候为了简单测试一下接口的性能情况,会写单元测试搞一下,之前是自己用多线程来调用这个接口,也能满足需求,但是每次要调整多线程的配置情况还要修改代码,有点费劲,无意间在一淘测试的网站上面看到一篇文章(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
然后执行#./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

            这些工具只是减少了我们进行压测的成本,但是压力测试的场景分析和结果的分析也是一件重要的事情。​

 

 

 

 

 

分享到:
评论

相关推荐

    接口性能压测工具——jmeter

    接口性能压测工具——jmeter 并发测试、压力测试、接口测试

    web压测高并发接口测试工具

    一款定制的压测工具, 对webapi webserver 等一些借口进行压测 , 可以自定义并发数量.

    apache-jmeter-5.4.3,接口压测工具jmeter

    apache-jmeter-5.4.3,接口压测工具jmeter Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试

    Jmeter接口测试,性能压测等

    Jmeter性能压测工具,接口开发工具。

    服务端接口压测测试工具

    测试服务端接口并发能力,也可作为单元自测使用,可设置线程数

    http接口测试工具-附件资源

    http接口测试工具-附件资源

    借口压力测试工具

    apache提供,专业的压力测试工具,同时开启多个线程执行API请求,测试服务器的性能

    压测工具apache-jmeter

    网站及接口压力测试工具

    rtsp流媒体测试工具

    rtsp流媒体测试工具,测试监控设备或直播流工具 工具非常好用。

    Loadgen API接口测试和数据量压测工具

    Load Generator (LoadGen) 工具旨在根据 Exchange 测试部署生成模拟性客户端工作负载。此工作负载可用于评估 Exchange 的执行情况,还可用于分析在系统负载情况下,各种配置更改对 Exchange 的行为和性能的影响。

    SocketTool(很好用的socket测试工具)

    是一款非常好用的socket 链接测试工具 TCP/UDP Socket调试工具的特色 ★ 全面集成 TCP服务器/客户端; UDP服务器/客户端; UDP广播/组播 功能 ★ 支持多Socket并行测试, 采用树状Socket可视化界面,所有Socket句柄...

    http https tcp udp windows 图形化压力测试工具

    这是网上找的一个 http https tcp udp windows 图形化压力测试工具,需要.net4.0支持,结果是曲线图 比较直观

    java编写的压测工具

    自己写的压力测试工具,引入里面的jar包,实现一个接口类,new一个对像界面就出来,界面使用SWING,不需要任何依赖jar包,只要jdk1.6及以上,使用这个是为了免除loadrunner等一些工具编译环境等令人头痛的问题

    Jmeter压测工具(中文版)+java1.8.0_Jdk

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI ...

    jmeter压力测试课程入门到实战视频.rar

    目录 网盘文永久连接 │ ApacheCN - Elastic Kibana 5.2 中文文档 .pdf │ Elk elasticsearch课件资料.rar │ jmeter课件资料.zip ...│ └ 8、创建Jmeter测试计划,快速压测一个接口.mp4 ├ 第3章 Jmeter核心组....

    go-API-automated-testing:把Http接口功能测试和性能测试结合起来的工具

    Go-API自动测试1,项目说明1.1一句话描述go实现针对的Http(后续加grpc协议)接口的自动化测试和压测工具,把接口功能测试与接口压测结合起来2数据流转过程3细节思路利用Go-micro框架把用例生成,发送请求,产生并发...

    基于go语言的一体化性能压测工具

    RunnerGo致力于打造成一款全栈式测试平台,采用了较为宽松的Apache-2.0 license开源协议,方便志同道合的朋友一起为开源贡献力量,目前实现了接口测试、场景自动化测试、性能测试等测试能力。随着不断的迭代,我们将...

    java编写的压测工具 1.1版本

    自己写的压力测试工具,引入里面的jar包,实现一个接口类,new一个对像界面就出来,界面使用SWING,不需要任何依赖jar包,只要jdk1.6及以上,使用这个是为了免除loadrunner等一些工具编译环境等令人头痛的问题 ...

    接口压力测试工具可多线程

    接口的压力测试

    服务端接口压力测试工具

    由于平时需要对写的API接口做压力...而很多压测工具太耗资源,或者根本达到相应的并发量。所以抽空自己写了一个。window/linux都可以使用,占资源低,并发数能达到实际要求。不需要任何依赖,直接命令行运行就可以了。

Global site tag (gtag.js) - Google Analytics