JMeter在测试期间更改HTTP标头

Ben*_*ett 26 jmeter http-headers

我正在尝试使用JMeter测试HTTP服务.HTTP服务需要通过简单的承载令牌机制进行身份验证.我正在尝试按如下方式进行:

  1. POST身份验证请求
  2. 将令牌存储为变量
  3. 将Authorization HTTP标头设置为存储变量
  4. 请求受保护的资源
  5. 评估表现

到目前为止,我已经能够发布请求,获取令牌,使用正则表达式提取它,将其保存到变量,并声明变量已正确设置.

问题是将变量放入HTTP标头.在"标题管理器"中,值设置如下:

标题管理器尝试

不幸的是,当发出下一个请求时,它们的授权标题具有值"Bearer".在互联网上搜索让我相信在线程开始之前配置了标题,这可以解释"持票人"

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

JMeter嵌套

由于授权标头格式错误,因此所有测试都会通过以获取受限资源,但资源失败并且失败了400.

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

Dmi*_*i T 32

2017年8月编辑:

  • 虽然这个答案很好并且被作者接受,但它太复杂了,正确的答案应该是下面更简单和可维护的答案/sf/answers/3029859031/.

您可以使用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")));
    
    Run Code Online (Sandbox Code Playgroud)

这将使用BEARER变量构造完全动态的头.

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

有关Beanshell脚本和Beanshell菜谱的详细信息,请参阅如何使用BeanShell:JMeter最喜欢的内置组件指南.

  • 如果它存在于循环中,您可能还想在添加之前删除以防止重复:`sampler.getHeaderManager().removeHeaderNamed("Authorization");` (6认同)

Ed *_*ves 12

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

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

JMeter树

  • 这对我有用。但是,如何只登录一次并跨多个线程共享令牌而不必再次执行登录请求。 (2认同)