压力测试,主要是针对接口来说的,一般都是使用多线程不停的访问接口,查看接口的承载能力
我们一起看看pylot这个开源的工具吧~
Pylot:
一款开源的测试web service性能和扩展性的工具,可以进行HTTP 负载测试。Pylot产生并发负载(HTTP Requests),检验服务器响应,以及产生度量的报表。
作者:Corey Goldberg
http://www.goldb.org/
How to Use:
1.准备test case(xml格式)
2.准备一些配置参数(如agent个数,持续时间等)
3.Run起来
4.查看结果html文件
Configuration:
xml文件配置
配置文件 -x 后面的参数是xml文件,注意转义
我们一定会用到&符号,这里需要大家将&符号替换成 &
当然如果不想转义,也可以使用CDATA ^_^
<body><![CDATA[appid=YahooDemo&query=webinject]]></body>
下面我们主要讲解http协议
http
1.url
顾名思义,配置url,即接口的?前面的地址
2.method
如果是get请求,请求?后面的数据可以使用add_header加进去;
如果是post请求,就是用body部分加进去。
如果是post请求,就是用body部分加进去。
3.verify & verify_negative
这两个参数可以验证response值。verify参数设定为string或者是一个正则表达式,response必须包含verify设定;同理,response必须排除verify_negative的值。
4.cookie
我的做法,可以通过fiddler抓取带有cookie的包,然后将其加入到header中即可。
5.Setting Static Variables/Parameters
可以定义全局变量共所有的testcase使用,例子如下
<testcases>
<param name="http_server" value="http://www.example.com" />
<case>
<url>${http_server}/foo</url>
</case>
</testcases>
6.File-based HTTP Payloads
当然,如果你使用post方法做压力测试的话,可以将body值存储到文件中,例子如下
<case>
<url>http://www.example.com/foo</url>
<method>POST</method>
<body file="./myfile.dat"></body>
</case>
除却http协议,pylot还可以处理REST web service 和 SOAP
下面简单概述这两个web service
web service
rest和soap都是web service,各有优缺点
pylot两种都支持
other parameters:
Agents: 运行的代理(虚拟用户)个数
Rampup: 每个agent启动的时间间隔
Interval: 单个agent发送request的时间间隔
Duration: 整个压测的时间,也就是说,当duration完毕,所有agent都会被关闭
Rampup: 每个agent启动的时间间隔
Interval: 单个agent发送request的时间间隔
Duration: 整个压测的时间,也就是说,当duration完毕,所有agent都会被关闭
run case:
其实配置完成xml文件,在运行就ok了
results:
pylot results:
pylot会生成一份详尽的报告,里面包括了吞吐量,响应时间等很多内容,可以让你非常容易看出性能问题和瓶颈。除了从这方面着手,也可以从服务器端着手,查看当面临大压力请求接口时,服务器各个指标的变化
server performance:
3.
QPS
:可以通过日志计算
tail -f logname |grep .do |awk '{print $4}'|uniq -c
awk命令
tail -f logname |grep .do |cut -d " " -f 4|uniq -c
cut uniq
上面两种方式都是一样的结果,如果日志中每行的不同字段通过单个空格进行分割,使用两种都ok,否则应该多利用awk
indicator:
throughput‘s
吞吐量指系统级别的负载能力,例如一个工厂一天可以生产10吨水泥
吞吐率指一个单位时间内的吞吐量,例如一个工厂1S可以生产多少水泥
QPS
Query Per Second,由吞吐率引申出来的参数,一般可以用来衡量压力;例如一次request响应时间为0.2s,那么QPS为1S内可以处理1/0.2=5,比较少了