我试图用JMeter测试HTTP服务。 HTTP服务需要通过简单的承载令牌机制进行身份验证。我试着按照以下步骤继续:
到目前为止,我已经能够发布请求,获取令牌,使用正则表达式解压缩,将其保存到变量,并断言变量已正确设置。
问题是将变量放入HTTP标头。在" Header Manager"值设置如下:
不幸的是,当发出下一个请求时,他们的授权标题具有值#34; Bearer"。在互联网上搜索让我相信标题是configured before the thread starts,这可以解释" Bearer"
我的采样/分组/嵌套如下:
由于授权标头格式错误,所有测试都会通过以获取限制资源,但资源失败,因为授权标头格式不正确。
我觉得我错过了一些非常明显的事情,并且/或者以错误的方式解决了这个问题。
答案 0 :(得分:31)
2017年8月编辑:
您可以使用Beanshell PreProcessor动态构建授权标头,如下所示:
使用以下代码将Beanshell PreProcessor作为同一请求的子项添加:
import org.apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().add(new Header("Authorization","Bearer " + vars.get("BEARER")));
这将使用BEARER
变量构建完全动态的标头。
sampler
是HTTPSamplerProxy类的简写,可以访问父Sampler实例vars
是JMeterVariables类的实例,它允许对当前上下文(通常是当前的线程组)边界内可用的所有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。我的树看起来像这样:
答案 2 :(得分:-1)
使用以下代码
import org.apache.jmeter.protocol.http.control.Header; 。sampler.getHeaderManager()除去(0);
有关详细信息,请参阅: -
https://jmeterblogb.blogspot.in/2016/10/add-empty-header-in-jmeter-sample.html