gpt4 book ai didi

post - jmeter - 第二个发布请求未使用在我的登录发布请求中创建的 JSESSIONID

转载 作者:行者123 更新时间:2023-12-05 01:00:45 34 4
gpt4 key购买 nike

我成功地为我的登录端点发送了一个 POST 请求,并创建了一个 JSESSIONID。我知道 JSESSIONID 由我在线程顶部的 HTTP Cookie 管理器保存,因为我看到它被用于线程中的几个 GET 请求。

但是当我尝试 POST 请求时,它不使用 JSESSIONID 并创建自己的 ID。以下是我的设置:

协议(protocol):https
方法:POST
- 使用 KeppAlive
{“json”:“参数”}

采样器结果:
线程名称:sim test 1-1
sample 开始时间:2014-02-18 15:42:42 EST
加载时间:95
延迟:95
字节大小:239
header 大小(以字节为单位):239
正文大小(以字节为单位):0
样本数:1
错误计数:0
响应代码:302
响应消息:找到

响应 header :
找到 HTTP/1.1 302
服务器:Apache-Coyote/1.1
设置 Cookie:JSESSIONID=F16BF82FD28A84F6E28DDE30DECDC48C;路径=/;安全的; HttpOnly
位置:https://api.zzzz com/site/needsAuth
内容长度:0
日期:2014 年 2 月 18 日星期二 20:42:42 GMT

HTTPSampleResult 字段:
内容类型:
数据编码:空

请求:
POST https ://api.zzz com/rest/members/347/passengers

发布数据:
{"relationshipToMember":null,"authorizedToBook":false,"authorizedToFly":true,"authorizedToGetInfo":false,"passenger":{"firstName":"Mighty","middleName":null,"lastName":"Max ","dateOfBirth": 1380857200000}}

[没有 cookies ]

请求 header :
连接:保持事件
内容类型:应用程序/json
内容长度:204
主办方:api.zzz.com
用户代理:Apache-HttpClient/4.2.6 (java 1.5)

-注意:我不知道我是否正确地执行了我的 GET 请求,但它们正在工作。他们开启了跟随重定向,它首先转到 http://api.zzz... - 302 Found,然后转到 https://api.zzz...

编辑:
我发现这正是我的问题:Cookie Manager of Apache JMeter doesn't add the cookie to POST request ,但如果有人可以详细说明这些步骤,我不明白他的解决方案。

更新
已解决:我必须在 POST 中保持与我的登录相同的服务器名称并更改我的路径

最佳答案

更新!!!

没有注意到你的 https 协议(protocol)。

您只需设置 CookieManager.save.cookies=true您的 jmeter.properties 中的属性(property)文件或将其作为参数添加到 JMeter 命令行

jmeter -JCookieManager.save.cookies=true -n -t path_to_jmx_script.jmx -l path_to_log_file.jtl

留下我的回复以防万一其他人需要它作为如何在不同线程组之间共享 JMeter Cookie 的指南。

我无法使用以下场景在我的环境中重现您的用例:
  • HTTP Cookie 管理器位于测试计划下(与线程组相同级别)
  • HTTP Cookie 管理器位于线程组下(与采样器相同级别)

  • 仅当 HTTP Cookie 管理器作为登录请求的子项添加时,它才能重现。如果是您的情况 - 将其上移 1 级以扩大其范围。

    如果由于某种原因它没有帮助 - 请参阅下面的可能的解决方法详细信息。

    您的回复代码 204对我来说听起来不像是错误。我猜服务器宁愿用 401 之类的东西来响应。或 403如果基于 cookie 的身份验证存在问题。

    如果您明确需要设置 cookie,它仍然可以通过即 Beanshell 来完成

    您需要执行以下操作:
  • 如果您要在不同线程组之间共享 cookie 或出于任何其他原因需要将它们作为 JMeter 变量,请设置 CookieManager.save.cookies=true jmeter.properties 中的任一属性文件或在 JMeter 启动期间将其指定为 jmeter -JCookieManager.save.cookies=true
  • 使用以下代码将 Beanshell 后处理器添加到您的登录请求中:
    import org.apache.jmeter.protocol.http.control.CookieManager;

    CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue();

    props.put("cookiecount", String.valueOf(manager.getCookieCount()));

    for (int i = 0; i < manager.getCookieCount(); i++) {
    props.put("cookie_name" + i, manager.get(i).getName());
    props.put("cookie_value" + i, manager.get(i).getValue());
    props.put("cookie_domain" + i, manager.get(i).getDomain());
    props.put("cookie_path" + i, manager.get(i).getPath());
    props.put("cookie_expires" + i, String.valueOf(manager.get(i).getExpires()));
    props.put("cookie_secure" + i, String.valueOf(manager.get(i).getSecure()));
    }
  • 将 Beanshell 预处理器添加到您的 POST使用以下代码请求:
    import org.apache.jmeter.protocol.http.control.CookieManager;
    import org.apache.jmeter.protocol.http.control.Cookie;
    import org.apache.jmeter.testelement.property.JMeterProperty;


    CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue();

    int count = Integer.parseInt(props.getProperty("cookiecount"));

    for (int i = 0; i < count; i++) {
    Cookie cookie = new Cookie(props.getProperty("cookie_name" + i), props.getProperty("cookie_value" + i),
    props.getProperty("cookie_domain" + i), props.getProperty("cookie_path" + i),
    Boolean.parseBoolean(props.getProperty("cookie_secure" + i)),
    Long.parseLong(props.getProperty("cookie_expires" + i)));
    manager.add(cookie);
    }

    JMeterProperty cookieprop = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager");

    cookieprop.setObjectValue(manager);

    ctx.getCurrentSampler().setProperty(cookieprop);

  • 解释:

    第 2 点的代码从 HTTP Cookie Manager 获取所有可用的 cookie。并将它们存储到以 cookie_ 为前缀的 JMeter 属性中

    第 3 点的代码读取所有以 cookie_ 为前缀的属性, 从它们构造 JMeter Cookie 并将它们添加到 HTTP Cookie 管理器。

    How to use BeanShell有关通过脚本扩展 JMeter 的更多信息的指南。

    关于post - jmeter - 第二个发布请求未使用在我的登录发布请求中创建的 JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865414/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com