首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个JSON文件进行压力测试API

使用多个JSON文件进行压力测试API
EN

Stack Overflow用户
提问于 2018-07-09 13:16:19
回答 1查看 639关注 0票数 2

我试图使用40000个不同的JSON文件向API发送40000个请求。

通常我可以做这样的事情:

代码语言:javascript
复制
for file in /dir/*.json
do
#ab -p $file -T application/json -c1 -n1 <url>
curl -X POST -d@"$file" <url> -H "Content-Type: application/json"
done;

我的问题是,我想同时运行请求,例如100,我想要的总时间来发送所有请求等记录。我不能使用-c 100 -n 40000在ab,因为它的相同的网址与不同的文件。

这些文件/请求看起来都类似于

代码语言:javascript
复制
{"source":"000000000000","type":"A"}
{"source":"000000000001","type":"A"}
{"source":"000000000003","type":"A"}

我找不到任何支持这一点的工具(例如ab)。

我在这里看到了示例(对这个问题进行了建模)。我不知道为什么当mkfifo是一个文件而不是dir时,这个例子会是"cat /tmp“。可能有用吗?

代码语言:javascript
复制
mkfifo tmp
counter=0
for file in /dir/*.json
do
    if [ $counter -lt 100 ]; then
        curl -X POST -H "Content-Type: application/json" -d@"$file" <url> &
        let $[counter++];
    else
        read x < tmp
        curl -X POST -H "Content-Type: application/json" -d@"$file" <url> &
    fi
done;
cat /tmp > /dev/null
rm tmp

我应该如何在perl、ksh、bash或类似的语言中实现这一目标?或者,是否有人知道任何支持这种方法的工具?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 09:14:35

如果您的请求只是按每次以不同JSON发送这40000个curl请求所需的总时间来计算,那么您可以很好地使用GNU并行。该工具有很好的方法,通过使用您的机器上的多个核来实现作业并发。

下载过程非常简单。按照如何将GNU并行(noarc.rpm)安装在CentOS 7上快速和简单的步骤列表。该工具有更复杂的标志来解决多个用例。不过,为了满足您的需求,只需转到包含这些JSON文件的文件夹并执行以下操作

代码语言:javascript
复制
parallel --dry-run -j10 curl -X POST -H "Content-Type: application/json" -d@{} <url> ::: *.json

根据parallel如何设置标志和处理参数并开始运行命令,上面的命令试图使您的命令干涸。这里,{}表示您的JSON文件。我们在这里指定一次运行10个作业,并根据其在您的机器上运行的速度以及检查机器上的核数来增加数量。还有一些标志可以限制parallel允许使用的整个CPU,这样它就不会完全阻塞您的系统。

删除--dry-run以运行实际命令。要计时完成过程所需的时间,请使用time命令在实际命令之前加上time parallel ...前缀

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51246521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档