JMeter authenticity token with Rails App

时间:2015-05-04 19:54:18

标签: ruby-on-rails jmeter

I am trying to do a JMeter post operation to a simle rails app but I am getting the following back:

Started POST "/flights/" for 127.0.0.1 at 2015-05-04 12:40:15 -0700 Processing by FlightsController#create as HTML Parameters: {"authenticity_token"=>"$(LOGIN_AUTH_TOKEN)"} Can't verify CSRF token authenticity Completed 422 Unprocessable Entity in 3ms (ActiveRecord: 0.0ms)

I have implemented the suggestion about creating a regular expression extractor for the authenticity login as shown here:

Regular Expression Extractor

and here is the http request:

http post request

Any help appreciated and thanks in advance, Slavko

3 个答案:

答案 0 :(得分:1)

  • Regular Expression Extractor移动为第一个HTTP请求的子元素。
  • 正则表达式可以是name=authenticity_token type=hidden value=(.*?)"
  • 在下一个请求中,使用${LOGIN_AUTH_TOKEN}(不是$(LOGIN_AUTH_TOKEN))
  • 访问authenticity_token

答案 1 :(得分:0)

我认为Vinoth是对的,但看起来只有请求标题被检查。表单字段位于正文中,因此正则表达式处理器应该在那里查看。

答案 2 :(得分:0)

我能够通过检查渲染页面的来源并相应地修改我的正则表达式来解决此问题。

我在源头搜索了"真实性"以及它产生了什么:

<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="O4YJPTDTmHqxAtgVYLTyDnuo1gwNoDQFznnqwsUyvdMkJscVXx+YMteKkuMVG44E/H6NYCdi/RzbQ8oIly2euA==" />

我将jMeter的正则表达式提取器中的正则表达式更改为:meta name="csrf-token" content="(.*?)" />

然后我运行了我的jMeter测试,它成功登录了我的开发应用程序。

我在Rails 4.2.1和Ruby 2.2.1p85上。