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

上一篇 / 下一篇  2014-04-02 17:47:25 / 个人分类:Junit

 在开发过程中,有时候为了简单测试一下接口的性能情况,会写单元测试搞一下,之前是自己用多线程来调用这个接口,也能满足需求,但是每次要调整多线程的配置情况还要修改代码,有点费劲,无意间在一淘测试的网站上面看到一篇文章http://testing.etao.com/node/626),有人将单元测试压测用注解的形式搞定了。决定用一下,觉得挺好用呵呵。

         ContiPerf是一个轻量级的测试工具,它能很轻易的让用户使用Junit4测试用例进行联系的性能测试。其设计的灵感来自于Junit4利用注释进行简单的测试配置还来自于JUnitPerf用包装单元测试用于性能测试的思路。

ContiPerf目前最新的版本是2.1,它的依赖少,只需要Java5Junit4.7以上,注意这里junit必须是4.7以上,刚开始用的时候在这里踩了一个坑。

        maven中引入jar包,scope设置为test类型。

        

        

           使用ContiPerf必须现在@Rule的注释下生成一个ContiPerfRule的对象。ContiPerfRule的构造函数有三个,分别为:

public ContiPerfRule()public ContiPerfRule(ExecutionLogger executionLogger)public ContiPerfRule(ReportModule... modules) 

@PerfTest

用户可以在这个注释中添加性能测试的执行要求。

Invocations:方法的执行次数,例:@PerfTest(invocations = 300)重复执行300次;

Threads:同时执行的线程数,例:@PerfTest(invocations = 30, threads = 2)两个线程并发执行,

每个线程执行15次,

总共执行30次;

Duration:在指定时间范围内一直执行测试,例:@PerfTest(duration = 300)300毫秒内反复执行。

三个属性可以组合使用,其中Threads必须和其他两个属性组合才能生效。

                     

InvocationsDuration都有指定时,以执行次数多的为准。

@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起一线程,到9000ms10个线程同时执行,那么这个测试实际执行了69s

如果只想衡量全力压测的结果,那么可以在注释中加入warmUp

@PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000),那么统计结果的时候

会去掉预热的9s

            这个组件的官方主页http://databene.org/contiperf.html  ,更加好用的是,压测的结果还会用图表的形式展示出来呵呵。源代码么看过,但是猜测一下,应该是维护了一个线程池、计数器和计时器,然后根据注解中的配置来执行被注解的方法。

            上面接口类可以通过注解并发请求,然后达到开发测试的目的,但是Http接口改怎么搞呢?不用着急,已经有成熟的工具了,abhttpLoad,使用都非常简单。

            abapache自带的一个很好用的压力测试工具,当安装完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)

       关于httploadhttp://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

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

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar