ASP.NET Core 接口压力测试工具 WRK使用

来源:myzony

cnblogs.com/myzony/p/9798116.html

一、简要介绍

WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果。

PS:Wrk 并不能针对测试的结果生成动态的图表,如果有这种需要,可以尝试使用另一款工具 Vegeta。该项目使用的 Golang 进行编写,其 GitHub 地址为:https://github.com/tsenart/vegeta

下面的内容就是一个标准的测试结果信息:

二、安装

关于 OS X 与 Windows 的安装可以参考 Wrk 官方 WIKI 进行操作,本文主要讲解一下 CentOS 7.x 下如果进行编译。

sudo yum groupinstall 'Development Tools'

sudo yum install -y openssl-devel git

git clone https://github.com/wg/wrk.git wrk

cd wrk

make

编译之后,你会得到如下结果:

可以看到生成了一个 wrk 的可执行文件,你可以将其添加到环境变量的 PATH 当中,这里就不再赘述,我们等会儿使用的时候直接 ./wrk 使用。

三、命令说明

./wrk -H "Authorization: Bearer TokenValue" -t 2 -c 50 -d 10s --latency --timeout 1s "http://"

上面的命令就是一个典型的压力测试命令,关于参数的含义请看下表。

四、开始压力测试

执行了上述代码之后我们可以看到很直观的信息,第一个就是 20s 的时间内完成了 2887 次请求,一共接受到了 2.46MB 的数据。

在 Socket errors 里面我们可以看到有 35 个请求产生了超时的情况,每秒执行的请求大概为 144.20 个,每秒的数据传输大概为 125.75 KB。

除此之外,还说明了平均每次请求所消耗的时间为 338.44 ms,最极端的情况为 994.27ms。

五、LUA 脚本

在第三节我们可以看到一些标准的 GET 请求我们可以直接通过指定命令来进行测试,即便该接口有授权验证,我们可以通过 -H 参数来指定 Authorization 头来实现权限验证。

但是针对一些复杂的情况,我们就需要编写 LUA 脚本来实现压力测试了。

官方编写了很多的 LUA 脚本 DEMO ,存放在 GitHub 上面,其地址为:https://github.com/wg/wrk/tree/master/scripts。

这里我们以实现 POST 请求为例:

wrk.method = "POST"

wrk.body = '{"username":"admin","password":"123qwe","rememberClient":true}'

wrk.headers["Content-Type"] = "application/json"

这里我们的接口地址更改了一下,改变成了 Login 接口,该接口需要传入用户名与密码,并且其 Method 为 POST。

将上述 LUA 脚本保存为 post.lua 文件,然后通过 -s 参数指定 LUA 脚本的路径并执行。

六、LUA 脚本相关详解

WRK 中执行 HTTP 请求的时候,调用 Lua 分为 3 个阶段,setup、running、done,每个 WRK 线程中都有独立的脚本环境。

6.1 WRK 的全局属性

wrk = {

scheme = "http",

host = "localhost",

port = nil,

method = "GET",

path = "/",

headers = {},

body = nil,

thread = ,

}

6.2 WRK 的全局方法

6.3 Setup 阶段

setup() 方法是在线程创建之后,启动之前。

6.4 Running 阶段

6.5 Done 阶段

可以用于自定义结果报表,整个过程中只执行一次。

而官方的 setup.lua 脚本则是重载这些方法并使用的一个 DEMO:

七、参考资料

wrk中的lua脚本:https://type.so/linux/lua-script-in-wrk.html

http性能测试wrk使用教程:https://juejin.im/post/5a59e74f5188257353008fea

看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181019B0UBKU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券