Jmeter-使用参数很好地发送请求,但不使用主体

时间:2018-12-12 12:55:15

标签: jmeter

我正在对我的网站API进行负载测试。我尝试将请求发送到网站以要求用户名和密码登录。我最初设置了http标头管理器,cookie管理器和http请求。

我在参数中输入名称(用户名,密码)和值参数(分别为vis,new),然后单击开始,测试成功完成。另一方面,如果我在主体选项卡中将键值对键入为字典{"username":"vis","password":"new"},然后再次运行,则请求标头具有发布数据(从视图结果树中看到),但是我的服务器无法识别该发布数据。它只会返回错误,就像没有发送任何帖子数据一样。

对于body选项卡方法,我也将Content-Type设置为application/json,但是仍然遇到相同的错误。

一些错误的屏幕截图: 标头设定 Header setting

请求参数 Request parameters

在树中查看结果-请求标头:

Connection: keep-alive
Content-Type: application/json
Content-Length: 35
Host: url.com
User-Agent: Apache-HttpClient/4.5.6 (Java/1.8.0_191)

请求正文:

POST https://url.com/accounts/login.json

POST data:
{"username":"vis","password":"new"}

[no cookies]

因此,当我在“参数”选项卡下发送请求但在使用“正文数据”选项卡时发送请求时,该请求有效。

1 个答案:

答案 0 :(得分:0)

您无法登录,因为您的应用程序不支持您提供凭据的方式。

如果Python请求适合您,请使用JMeter的HTTP(S) Test Script Recorder

进行记录
  1. 准备进行记录的JMeter。最快的方法是使用J Meter Templates功能。

    • 从JMeter的主菜单中选择File -> Templates -> Recording,然后单击“创建”

      enter image description here

    • 打开HTTP(S)测试脚本记录器,然后单击“开始”

      enter image description here

  2. 将您的Python脚本修改为use JMeter as the proxy

    import requests
    
    jmeter = {
      'http': 'http://localhost:8888',
      'https' : 'http://localhost:8888'
    }
    
    requests.post("https://url.com/accounts/login.json",data={"username":"vis","password":"new"}, proxies=jmeter)
    
  3. 执行您的Python脚本

  4. JMeter将在Recording Controller下捕获它。这就是您应该用于测试的请求:

    enter image description here