性能测试 工具

服务器性能测试工具原理

对于目前流行的性能测试工具,他们的基本工作原理都是一致的。在客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据。

性能测试 工具_第1张图片

组成部分:

部件 描述
用户行为生成器 脚本编写或脚本录制
压力产生器

模拟虚拟用户向服务器发请求


分布式代理--模拟更多的虚拟用户向服务器发请求

用户代理

用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或线程协作,接收调度系统的命令

,调度产生负载压力的进程或线程,从这个意义上看,用户代理也是压力产生器的一部分。

调度 根据不同的虚拟用户数,不同事务的用户比例,运行时间等设置产生压力调度
监控 压力测试过程中对各种软硬件进行监控,如对数据库、应用服务器,服务器的主要性能表现情况进行监控
结果分析工具 将监控系统获取的性能技术数器值生成曲线图,折线图等各种图表
   
   

性能测试工具应该具备什么的特质呢?

1、工具本身占用系统资源少,可扩展性好,可用性强。    

2、能模拟真实业务事务操作,在并发时能真正产生业务压力。(这一点是核心)

3、对压力测试结果能很好地进行性能分析,快速找出被测试系统的瓶颈。

4、测试脚本的重复性强。


性能测试工具


性能测试工具,如Jmeter,LoadRunner,webstress,grider,较轻量的如siege,ab,http_load等等。

siege

· Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

安装:

$:wget http://www.joedog.org/pub/siege/siege-2.72.tar.gz 

$:tar zxvf siege-2.72.tar.gz 

$:cd siege-2.72

 $:sudo ./configure 

$: sudo make; sudo make install 

安装成功验证:siege –help,如果安装没问题会出现以下类似信息:

SIEGE 2.70

Usage: siege [options]

siege [options] URL

siege -g URL

Options: 

-V, –version           VERSION, prints the version number.

-h, –help              HELP, prints this section.

-C, –config            CONFIGURATION, show the current config.

-v, –verbose           VERBOSE, prints notification to screen.

-g, –get               GET, pull down HTTP headers and display the

transaction. Great for application debugging.

-c, –concurrent=NUM    CONCURRENT users, default is 10

-i, –internet          INTERNET user simulation, hits URLs randomly.

-b, –benchmark         BENCHMARK: no delays between requests.

-t, –time=NUMm         TIMED testing where “m” is modifier S, M, or H

ex: –time=1H, one hour test.

-r, –reps=NUM          REPS, number of times to run the test.

-f, –file=FILE         FILE, select a specific URLS FILE.

-R, –rc=FILE           RC, specify an siegerc file

-l, –log[=FILE]        LOG to FILE. If FILE is not specified, the

default is used: PREFIX/var/siege.log

-m, –mark=”text”       MARK, mark the log file with a string.

-d, –delay=NUM         Time DELAY, random delay before each requst

between 1 and NUM. (NOT COUNTED IN STATS)

-H, –header=”text”     Add a header to request (can be many)

-A, –user-agent=”text” Sets User-Agent in request

Copyright (C) 2010 by Jeffrey Fulmer, et al.

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS

FOR A PARTICULAR PURPOSE.

使用简介:

命令: siege -c 50 -t60 -u http://www.baidu.com

起五十个并发,测60个分钟,连续访问baidu首页。

对多个url并发:

(1)新建一个文件urls.txt,里面的内容为(只是例子,任何url都可以)

(2)siege  -c  200 -t  5 -f urls.txt

注:每行都是一个url,它会从里面随机访问的

结果说明:

** SIEGE 2.72
** Preparing 300 concurrent users for battle.
The server is now under siege.. done.

Transactions: 30000 hits //完成30000次处理
Availability: 100.00 % //100.00 % 成功率
Elapsed time: 68.59 secs //总共使用时间
Data transferred: 817.76 MB //共数据传输 817.76 MB
Response time: 0.04 secs //响应时间,显示网络连接的速度
Transaction rate: 437.38 trans/sec //平均每秒完成 437.38 次处理
Throughput: 11.92 MB/sec //平均每秒传送数据
Concurrency: 17.53 //实际最高并发连接数
Successful transactions: 30000 //成功处理次数
Failed transactions: 0 //失败处理次数
Longest transaction: 3.12 //每次传输所花最长时间
Shortest transaction: 0.00 //每次传输所花最短时间

http://www.ha97.com/4663.html

使用Siege进行压力测试标准:

Transactions

总共测试次数 

Availability 

成功次数百分比 

Elapsed time 

总共耗时多少秒 

Data transferred 

总共数据传输 

Response time 

等待响应耗时 

Transaction rate 

平均每秒处理请求数 

Throughput 

吞吐率 

Concurrency 

最高并发 

Successful transactions 

成功的请求数 

Failed transactions 

失败的请求数 

并发量:20 访问量:200

例如,Xxx接口测试:

测试结果:

Transactions

3967 hits 

Availability 

99.17 % 

Elapsed time 

66.21 secs 

Data transferred 

1.00 MB 

Response time 

0.09 secs 

Transaction rate 

59.92 trans/sec 

Throughput 

0.02 MB/sec 

Concurrency 

5.32 

Successful transactions 

3967 

Failed transactions 

33 

Longest transactions 

15.05 

Shortest transactions 

0.00 

出现的问题

siege进行压力测试 模拟10000用户,设置10秒,出现这个错误是什么意思?为什么会提示打开的文件太多?

[error] descriptor table full sock.c:108: Too many open files

原因:fd是有上限的ulimit -n看看

注:查看打开文件数:

方法一: 查询当前终端的文件句柄数: ulimit -n 回车,一般的系统默认的1024 

方法二: ulimit -a 

性能测试 工具_第2张图片

解决:(1修改文件句柄数为65535,ulimit -n 65535.此时系统的文件句柄数为65535;

(2)将ulimit 值添加到/etc/profile文件中(适用于有root权限登录的系统)

为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部。 

echo ulimit -n 65535 >>/etc/profile         

source /etc/profile    #加载修改后的profile 

 ulimit -n     #显示65535,修改完毕! 

Webbench

安装

wget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz

tar zxvf webbench-1.5.tar.gz

cd webbench-1.5

make && make install

检测安装成功cd webbench-1.5 获得:webbench)

使用

webbench -c 500 -t 30 http://127.0.0.1/test.jpg

参数说明:-c表示并发数,-t表示时间()

webbench -c 100 http://localhost:12345/test

常用参数说明,-c 表示客户端数,-t 表示时间

使用:帮助文档

Cd ~/software/webbench-1.5

webbench --help

webbench [option]... URL  

  -f|--force               Don't wait for reply from server.  

  -r|--reload              Send reload request - Pragma: no-cache.  

  -t|--time           Run benchmark for  seconds. Default 30.  

  -p|--proxy  Use proxy server for request.  

  -c|--clients          Run  HTTP clients at once. Default one.  

  -9|--http09              Use HTTP/0.9 style requests.  

  -1|--http10              Use HTTP/1.0 protocol.  

  -2|--http11              Use HTTP/1.1 protocol.  

  --get                    Use GET request method.  

  --head                   Use HEAD request method.  

  --options                Use OPTIONS request method.  

  --trace                  Use TRACE request method.  

  -?|-h|--help             This information.  

  -V|--version             Display program version.  

特点:

机器A 运行一个服务,机器B 上运行 webbench, 第二天发现 机器A 一切正常,机器B 奇慢无比,ps一看,偶地神呐,webbench 是开进程去跑啊……这个太……

webbench -C 10000 -t 60 http://192.168.116.7/挂了,把自己给搞挂了

貌似webbench不支持cookie,而且输出的测试结果太简单,功能过于简单了点,apache的ab功能比较多,可惜每次只能测试一个url,siege又只适合静态页面,如果能有一个把siege和ab的优点综合起来的东东完美了,继续寻找

http_load

安装

#cd /usr/local/

#wget http://icn.me/http_load_tar_gz

#sudo tar zxvf http_load-12mar2006.tar.gz

#进入到http_load 目录:#cd http_load-12mar2006

#sudo make

#sudo make install

也有widows版本

使用

练习1:多个url并发

Step1: vim urls.txt  

输入http://flight.qunar.com/

Step2:http_load -parallel 5 -fetches 100 urls.txt

命令行说明使用5个进程, 随机访问urls.txtURL 100

性能测试 工具_第3张图片

上面的测试中运行了100个请求,最大的并发进程数是5总计传输的数据是1.25946e+07 bytes,运行的时间是0.521175

每一个连接平均传输的数据量125946

每秒的响应请求为191.874,每秒传递的数据2.41658e+07;

每连接的平均响应时间,最大的响应时间,最小的响应时间;

100个请求全部返回200OK

练习2:sudo http_load -parallel 1 -fetches 100 -rate 100 urls.txt

rate参数表示每秒访问的频率

Jemeter

原理

以多线程的方式模拟用户,将图形化界面上的参数等转换成java语言实现模拟指定的用户行为,向服务器发送各种请求,并将服务器返回的结果进行分析再以适当的形式显示。常用的设置保存在bin/XX.properties下,测试用例参数化,保存为XX.jmx文件,JMeter会自动读取这些配置、用例文件。

性能测试 工具_第4张图片


运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmeter.bat

JMeter 的主要测试组件总结如下:

1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。

4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8. 定时器负责定义请求之间的延迟间隔。




你可能感兴趣的:(【测试】性能测试)