JMeter在测试期间更改HTTP标头

时间:2014-07-02 23:36:50

标签: http-headers jmeter

我试图用JMeter测试HTTP服务。 HTTP服务需要通过简单的承载令牌机制进行身份验证。我试着按照以下步骤继续:

  1. POST身份验证请求
  2. 将令牌存储为变量
  3. 将授权HTTP标头设置为存储变量
  4. 请求受保护资源
  5. 评估效果
  6. 到目前为止,我已经能够发布请求,获取令牌,使用正则表达式解压缩,将其保存到变量,并断言变量已正确设置。

    问题是将变量放入HTTP标头。在" Header Manager"值设置如下:

    Header Manager Attempt

    不幸的是,当发出下一个请求时,他们的授权标题具有值#34; Bearer"。在互联网上搜索让我相信标题是configured before the thread starts,这可以解释" Bearer"

    我的采样/分组/嵌套如下:

    JMeter Nesting

    由于授权标头格式错误,所有测试都会通过以获取限制资源,但资源失败,因为授权标头格式不正确。

    我觉得我错过了一些非常明显的事情,并且/或者以错误的方式解决了这个问题。

3 个答案:

答案 0 :(得分:31)

2017年8月编辑:

您可以使用Beanshell PreProcessor动态构建授权标头,如下所示:

  1. HTTP标头管理器添加为您的请求的子项,需要授权
  2. 使用以下代码将Beanshell PreProcessor作为同一请求的子项添加:

    import org.apache.jmeter.protocol.http.control.Header;
    
    sampler.getHeaderManager().add(new Header("Authorization","Bearer " + vars.get("BEARER")));
    
  3. 这将使用BEARER变量构建完全动态的标头。

    • samplerHTTPSamplerProxy类的简写,可以访问父Sampler实例
    • varsJMeterVariables类的实例,它允许对当前上下文(通常是当前的线程组)边界内可用的所有JMeter变量进行读/写访问。

    有关Beanshell脚本和Beanshell食谱类型的更多详细信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。

答案 1 :(得分:9)

请参阅此论坛帖子:http://www.jmeter-archive.org/Variables-in-HTTP-headers-td4579331.html

您需要在控制器下移动登录信息。就我而言,我使用了Only Once Controller。然后在控制器之后,您可以添加带有授权标头的HTTP标头管理器作为" Bearer $ {BEARER}"它会读取你的变量。这比其他答案要好,因为您不需要在每个请求下复制BeanShell PreProcessor。我的树看起来像这样:

JMeter Tree

答案 2 :(得分:-1)

Beanshell预处理器中的

使用以下代码

import org.apache.jmeter.protocol.http.control.Header; 。sampler.getHeaderManager()除去(0);

有关详细信息,请参阅: -

https://jmeterblogb.blogspot.in/2016/10/add-empty-header-in-jmeter-sample.html