压力测试——pylot使用

时间:2022-03-23 11:42:07

压力测试,主要是针对接口来说的,一般都是使用多线程不停的访问接口,查看接口的承载能力

我们一起看看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部分加进去。

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都会被关闭

run case:

其实配置完成xml文件,在运行就ok了


results:

pylot results:
pylot会生成一份详尽的报告,里面包括了吞吐量,响应时间等很多内容,可以让你非常容易看出性能问题和瓶颈。除了从这方面着手,也可以从服务器端着手,查看当面临大压力请求接口时,服务器各个指标的变化
server performance:
1. CPU load top命令
2. TCP 链接数: netstat  – antp  | grep  6359 | wc  –l  统计6359端口启动了多少个tcp链接  netstat命令
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,比较少了