首页 > 编程知识 正文

压力测试工具(http_lua_module)

时间:2023-05-05 14:20:27 阅读:86088 作者:4238

一、压力测试

压力测试是确保系统稳定性的一种测试方法,主要检测服务器能够承受的最大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 /版权所有

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。