3

对我们服务的请求如下所示:

GET http://[SERVICE]/Node:[id].Build?format=mime1,mime2,...,mimeN&template-id=[templateid]
Accept: multipart/mixed
Content-Type: application/json
body: json document

我正在尝试使用 ApacheBench 来测试基准测试。这是我正在使用的电话:

ab -n 10 -c 2 -T 'application/json' -H 'Accept: multipart/mixed' 'http://phx5qa01c-02b0.stratus.phx.qa.ebay.com/.Build?format=text/html,text/plain&template-id=29b1468f-c8c3-db23-2f6f-74e112795540'

此调用通过,并导致错误,因为预期的 json 数据不存在。ab 中是否有办法提供必要的 json 以及此请求。我看到有 -p 和 -u 命令来指定输入文件,但这些是用于放置和发布的。

4

1 回答 1

3

我意识到这个答案已经晚了六年,但我认为这是值得发布的,因为我在一个非常相似的问题上撞到了墙上,我试图加载测试一个只返回 JSON 数据的 URL,我的解决方案可能会帮助其他遇到此问题的读者。我的问题是我在不需要时一直指定 -H 选项。这不断使服务器向我的 AB 请求发送回 HTTP 406 响应代码(不可接受)。在我的大部分故障排除过程-T 'application/json'中,当我不需要 AB 请求时,我也会保留它。这仅与 PUT 或 POST 一起使用(使用 -p 开关时)。所以我删除了-H和-T,它起作用了。说了这么多,我在这里看到了这两个问题。我们需要注意 AB 默认使用 GET 方法。

  1. 您通过使用 -H 选项将额外的自定义标头附加到请求来限制 AB -H 'Accept: multipart/mixed',这可能会使您的目标服务器认为这是一个无效的请求并立即停止序列。除非您有充分的理由,否则不要使用 -H 。

  2. 您正在使用 -T 选项:-T 'application/json'仅当您将其与 -p 一起指定并且您在命令中的任何位置都没有 -p 时才有效,因为您发送的是 GET 而不是一个 PUT 或一个 POST。

所以要解决这个问题,只需删除 -T 和 -H 选项,它应该可以工作。 提醒其他读者:如果在 Windows 上,只要 URL 包含特殊字符(如“&”或“?”),请将其括在双引号中,如本例所示。

ab -n 10 -c 2 'http://phx5qa01c-02b0.stratus.phx.qa.ebay.com/.Build?format=text/html,text/plain&template-id=29b1468f-c8c3-db23-2f6f-74e112795540'
于 2019-09-22T04:04:40.053 回答