JMeter - POST API不起作用

4
我刚接触Jmeter,一直在努力使其能够测试我的POST API。它对于GET API调用没有问题,在参数选项卡中传递参数即可。

以下是细节:

服务器名称:localhost 端口:8080 路径/registerMobileUsingCode

在请求正文中,我发送了以下内容:

{ "clientName": "DemoOrg", "code": "9880007615", "languageId": "1" }

我的Jmeter设置如下:

1

我的HTTP请求头看起来像这样:

Request Header details

这个API已经在生产环境中使用,使用Postman也能正常工作。

但是我无法通过JMeter使其正常工作。显然我做错了什么,尽管我花了相当多的时间在Google上寻找解决方案。

如果有任何帮助,将不胜感激。

更新 - 1 - 根据建议更新了JMeter日志

Thread Name: Thread Group 1-1 Sample Start: 2017-08-09 17:03:41 IST Load time: 1604 Connect Time: 1525 Latency: 1604 Size in bytes: 399 Sent bytes:251 Headers size in bytes: 213 Body size in bytes: 186 Sample Count: 1 Error Count: 1 Data type ("text"|"bin"|""): text Response code: 500 Response message: Server Level Exception encountered
Response headers: HTTP/1.1 500 Server Level Exception encountered Date: Wed, 09 Aug 2017 11:33:43 GMT Access-Control-Allow-Origin: * Content-Type: application/json Transfer-Encoding: chunked Server: Jetty(9.2.16.v20160414)
HTTPSampleResult fields: ContentType: application/json DataEncoding: null
UPDATE-2 - 使用Postman和JMeter Recorder 如@Dimitri T所建议的那样,我下载了Postman的Linux版本,并使用 --proxy-server=localhost:8888 启动。
现在我能够发出一个Postman请求并在JMeter中捕获该请求。以下是请求的样子:

Jmeter捕获Postman请求

如您所见,与我所做的没有根本性的不同。然而,这确实有效!所以万岁!


另外,请更新您的问题并附上Jmeter日志。 - Adnan
你是否有一个可用的curl请求?如果有,请与我们分享。 - QuakeCore
添加一个查看结果树(右键单击您的线程组>添加>监听器>查看结果树,然后尝试发送您的请求,您将在结果树下找到该请求,包括请求/响应...)。 - QuakeCore
已按照Adnan和@QuakeCore的建议更新了日志,我看到了一个500错误,这正是我的服务器返回的内容。 - Arun Krishnan
500响应表示服务器端发生了一般性故障,如果我是你,我会检查服务器日志。 - QuakeCore
嗨@QuakeCore,我知道为什么服务器返回500错误。这是因为服务器正在寻找request.getParameter('clientName')或request.getParameter('code')中的“clientName”和“code”,但请求中根本没有传递这些参数。这已经在我们的生产系统中运行,并且正常工作。正如我之前提到的那样,这也可以通过postman正常工作。 - Arun Krishnan
2个回答

0

根据您附加的图片,您在路径中缺少/

路径应该是/registerMobileUsingCode

  1. 如果从POSTMAN正常工作,则端口8080正常。
  2. 请确认您的请求数据类型是什么?看起来languageId是整数,因此您应该使用languageId:1,而不是languageId:“1”。整数不应该用双引号括起来。

0
如果您的应用程序在Postman中运行良好,则使用JMeter的HTTP(S)测试脚本记录器进行录制将是构建JMeter测试计划最快、最简单的方法。
  1. 为录制做好JMeter的准备(您可以通过JMeter模板功能在几个点击中完成)

    • 从JMeter的主菜单中选择文件 -> 模板 -> 录制并单击“创建”
    • 展开工作台 - HTTP(S)测试脚本记录器并单击“开始”
  2. 为录制做好Postman的准备

    • 为了“告诉”Postman使用JMeter作为代理,您需要向其提供--proxy-server参数,例如:

      C:\Users\YOUR_USER_NAME\AppData\Local\Postman\app-x.x.x\Postman.exe --proxy-server=localhost:8888
      
  3. 在Postman中执行您的请求

  4. JMeter将捕获请求,将其转换为HTTP请求采样器,并将其存储在测试计划 -> 线程组 -> 记录控制器

参考资料:


谢谢。我正在使用Ubuntu,尝试让JMeter记录postman的ping请求,但是遇到了困难。我已经启动了Recorder并完成了系统范围内的代理设置,但是我无法看到Postman请求被捕获。 - Arun Krishnan

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