使用wrk进行POST请求?

39
我开始尝试使用wrk。它非常易于使用,但对服务器的压力很大,但我不知道如何执行其他类型的请求,比如POST。实际上,我甚至不知道这个工具是否允许这样做。文档非常简要。
谢谢
4个回答

85

现在已经可以实现了。以下是一个示例https://github.com/wg/wrk/blob/master/scripts/post.lua

wrk.method = "POST"
wrk.body   = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

将此内容保存到一个 *.lua 脚本中,并使用 -s 标志将其传递到命令行测试中。


1
哇!让我看看这个。如果我能使其正常工作,我将切换答案为你的。感谢回到该帖子。 - jackdbernier
1
您真是个救命恩人!正是我想要的。一种简单而优雅的方法来测试我的POST API。+1 - Saif Asif

38

如果您正在寻找一个内容类型为“application/json”的示例:

wrk.method = "POST"
wrk.body = '{"firstKey": "somedata", "secondKey": "somedata"}'
wrk.headers["Content-Type"] = "application/json"

7
要发布JSON数据,以下这种格式适用于我: wrk.body = '{"firstKey": "某些数据", "secondKey": "某些数据"}' - suvtfopw

14
以下是关于发布二进制文件的示例lua脚本post_binary.lua"Content-Type:application/octet-stream"。请注意,不要删除HTML标签,但您需要调整语言以使内容更加易于理解。
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/octet-stream"

file = io.open("dog.jpg", "rb")
wrk.body = file:read("*a")

那么请尝试使用以下命令:wrk "你的URL" -s post_binary.lua --latency -t 1 -c 1 -d 30s -R 1


正是我想要的! - leonard

12

我建议使用wrk2而不是wrk,因为wrk2对并发请求的支持更好。当content-type头部为application/json时,请使用\\n来转义特殊字符,如\n和所有其他特殊字符。不这样做会向上游API发送无效的json,这将浪费您调试的时间。

创建一个扩展名为lua的文件,并将以下内容粘贴到其中。保存它并在使用-s标志的wrk2命令中传递它。

wrk.method = "POST"
wrk.body = "{\"firstKey\": 'somedata', \"secondKey\": 'somedata'}"
wrk.headers["Content-Type"] = "application/json"

同时您可以添加多个标题,如下:

Also you can add multiple header as

wrk.headers["Header1"] = "Header1_Val"
wrk.headers["Header2"] = "Header2_Val"
wrk.headers["Header3"] = "Header3_Val"
wrk.headers["Header4"] = "Header4_Val"
wrk2 -t500 -c1000 -d160s -R10000 -s ~/Documents/luaTestScript.lua http://localhost:8080/test_endpoint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接