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

jmeter-第二个post请求未使用在我的登录post请求中创建的JSESSIONID,post,https,jmeter,jsessionid,Post,Https,Jmeter,Jsessionid,我成功地为我的登录端点发送了一个POST请求,并创建了一个JSESSIONID。我知道JSESSIONID由HTTP Cookie管理器保存,该管理器位于线程顶部,因为我看到它被用于线程中的几个GET请求 但当我尝试POST请求时,它不使用JSESSIONID并创建自己的ID。以下是我的设置: 协议:https 方法:邮寄 -使用KeppAlive {“json”:“params”} 取样器结果: 线程名称:sim测试1-1 样本开始时间:2014-02-18 15:42:42美国东部时间 装载

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

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

协议:https 方法:邮寄 -使用KeppAlive {“json”:“params”}

取样器结果: 线程名称:sim测试1-1 样本开始时间:2014-02-18 15:42:42美国东部时间 装载时间:95 潜伏期:95 大小(字节):239 标题大小(字节):239 正文大小(字节):0 样本数量:1 错误计数:0 答复代码:302 响应消息:找到

响应标题: 找到HTTP/1.1 302 服务器:ApacheCoote/1.1 设置Cookie:JSESSIONID=F16BF82FD28A84F6E28DDE30DECDC48C;路径=/;保护HttpOnly 位置:https://api.zzzz.com/site/needsAuth 内容长度:0 日期:2014年2月18日星期二20:42:42 GMT

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

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

发布数据: {“与成员的关系”:null,“authorizedToBook”:false,“authorizedToFly”:true,“authorizedToGetInfo”:false,“乘客”:{“firstName”:“gighty”,“middleName”:null,“lastName”:“Max”,“dateOfBirth”:13808570000}

[没有饼干]

请求标头: 连接:保持活力 内容类型:application/json 内容长度:204 主持人:api.zzz.com 用户代理:Apache HttpClient/4.2.6(java 1.5)

-注意:我不知道我是否正确执行GET请求,但它们正在工作。他们有如下重定向,它首先进入http://api.zzz…-找到302,然后转到https://api.zzz

编辑: 我发现这正是我的问题:,但如果有人能详细说明步骤,我不理解他的解决方案

更新
解决方法:我必须保留与登录帖子相同的服务器名称,并更改路径更新

没有注意到您的https协议

您只需在
jmeter.properties
文件中设置
CookieManager.save.cookies=true
属性,或者将其作为参数添加到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
听起来不像是一个错误。我猜如果基于cookie的身份验证出现问题,服务器宁愿用
401
403
之类的方式响应

如果您明确需要设置cookie,仍然可以通过Beanshell进行设置

您需要执行以下操作:

  • 如果您要在不同的线程组之间共享cookie,或者出于任何其他原因需要它们作为JMeter变量,请在
    JMeter.properties
    文件中设置
    CookieManager.save.cookies=true
    属性,或者在JMeter启动期间将其指定为
    JMeter-JCookieManager.save.cookies=true
  • 使用以下代码将Beanshell Post Processor添加到您的登录请求中:

    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()));
    }
    
    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点的代码从中获取所有可用的cookie,并将它们存储到前缀为
    cookie\uuUcode>JMeter属性中

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


    有关通过脚本扩展JMeter的更多信息,请参阅指南

    我必须保留与登录帖子相同的服务器名/IP,并更改路径

    感谢您的快速回复!我尝试了上面的指导,我的第二个POST请求(在登录POST请求之后)仍然在创建自己的jsessionID。请求结果仍然显示“[没有cookies]”。顺便说一句,我的cookie管理器处于线程级别。是否有其他信息可以提供给您以帮助?为了确认,我是否已自动重定向或跟随重定向尝试将我的请求转换为GET请求。所以这两个我都没有检查过。这是正确的方法吗?要将您的请求转换为获取请求,您需要更改“方法”。你可以试着在这里发布你的测试计划的图片来给我们一个线索,但是这个行为看起来很奇怪。你确定是同一个线程先登录后发布吗?我希望它保持为post请求,这就是为什么我取消选中重定向自动并遵循重定向。正确的做法是什么?我不能发布图片,因为我没有足够的代表点。但这里有一些链接。在那次跑步中,我拿出了https。