一、压力测试
压力测试是确保系统稳定性的一种测试方法,主要检测服务器能够承受的最大QPS (每秒的请求数)、数据访问引起的数据库受压数、以及性能相关)被压迫服务器的cpu、内存、响应时间等
也有很多压迫测量工具。 常见的有jmter、wrk、roadrunner等。 我正在使用wrk。 由于操作简单,采用线程网络异步IO模型,因此可以用较少的线程挤出较大的并发量。
缺点是只能在Linux上通过命令行执行。 只允许独立测试,对我们的产品来说,并发量足够了~
二、wrk的安装
1、可以直接从git下载。 安装命令。
git克隆https://github.com/WG/wrk
2、进入wrk路径内执行make指令
make之后,将在项目路径下生成可执行文件wrk,以便可以用于HTTP测试。 可以将此可执行文件复制到已位于路径中的路径(如/usr/local/kwdby ),以便wrk可以直接用于任何路径。
三、运行wrk
首先进入wrk路径后,只需输入请求即可测量http
1、get型
让我们来看看例子。 这是一个get请求。/WRK-T12-C100-D30S ' http://WWW.Baidu.com '
输出的是:
参数的说明如下所示。
输入:
-t :要执行的线程数
-c )总连接数(每次连接继续发送请求) ) ) ) ) ) ) ) ) ) ) ) )。
(d )测量时间,s为单位秒
--timeout :超时时间(可选) )
--latency :显示延迟统计信息(任意填写) ) ) ) ) ) )。
输出:
threads表示线程数,connections表示连接数
latency表示响应时间——的平均值(Avg )、标准偏差) Stdev )、最大值) Max )、正负1标准偏差(/- ) Stdev
req/sec表示每个线程每秒完成的发票的平均值
request in 30s是在30秒内完成的请求数和读取数据量。
socket errors是压力测量时的错误数据、连接错误、读写错误、timeout错误数
Requests/sec:平均每秒请求数
Transfer/sec:平均每秒读取数
在分析下,请求和输出结果:使用12个线程100个连接,对百度主页进行30秒钟的压力测量;
输出结果: 20秒内完成30390个请求,读取数据量为445.98MB; 请求中有3642个读取数据错误,16个响应时间延迟; 每秒的请求数为1009.67;每秒的读取数为14.82MB
2、后期型
学习如何发送get类型的请求后,将介绍如何发送post请求
正如我们在刚才的get请求中看到的那样,参数少,如果我们要压力测量一些数据带走的话,光靠这个命令是无法实现的; 另外,每个要求可能需要使用不同的参数,创建更好的模拟服务实际使用制造商,但wrk考虑到这一点,用lua语言编写脚本以满足以下需求:
洛杉矶脚本
wrk支持三级测试的个性化,每个测试线程都有独立的Lua运行环境。
变量: wrk
table类型的变量wrk是全局变量,如果更改此table,将影响所有请求。
wrk={。
方案=' http ',
主机='本地主机',
端口=尼尔、
方法='获取',
路径='/',
headers={},
主体=尼尔、
thread=用户数据,
}
init函数(args ):init由测试线程调用,只在进入执行阶段时调用一次。 支持从启动wrk的命令中获取命令行参数;
对于每个request=function ()请求,将调用该方法; 在代码示例中,I也是变量,随机获取1-500名文件,保证body值不同; cookie的值每次取得不同的随机值,保证请求标头不同; 针对每个请求输出body参数;
响应=函数(status,headers,body ) :每次有响应时调用; 代码示例:输出请求状态代码。 各线程首先进行认证,认证后获取token进行压力测量
上一个代码示例:
wrk.method='后期'
wrk.headers [ '内容类型' ]='应用程序/x-www -格式-无符号'
获取指定路径下的文件的内容
函数获取_主体(路径)
本地文件,错误消息=io.open (路径,' rb ' ) )。
if not文件三角网
错误(冷无参考文件: ) .错误消息. 'n ' )
结束
本地内容=文件:读(' * a ' ) ) )。
文件:关闭()
返回内容
结束
就是init=函数(args )
请求=函数(
主体表={ }
I=math.random(500 ) )。
主体表=获取主体('./数据/' . I . [.jpg ] )
主体表='内容=' . Urlencode (主体表[1] )。
本体=本体表
打印(wrk .主体) )。
#mock的头的cookie值因请求而异
num=math.random(100000000、999999999 ) ) ) )。
WRK.Headers [ ' Cookie ' ]=' Cuid=c 5055 AAA 8B 0a 287 D3DE9CD 7A 084 EB 28be|' . num
return wrk.format (尼尔、尼尔、尼尔、wrk.body ) )。
结束
响应=函数(状态、头、主体) )。
打印(Dumpfromstatus 3360 (.状态. '主体:主体) )。
if not托克恩和状态==200 then
token=headers['X-Token']
路径=' /资源'
wrk.headers['X-Token']=token
结束
结束
lua脚本通常放置在scripts路径下,直接在-s之后附加文件名即可
./wrk-t1-c15-d10m -脚本/图片搜索-时间输出=5s ' http://172.30.8.5633608080 /版权所有