Stefano Apostolico's Blog - performancehttp://stefanoapostolico.com/2014-12-07T00:00:00+01:00Handle CSRF token in Locust test2014-12-07T00:00:00+01:002014-12-07T00:00:00+01:00Stefano Apostolicotag:stefanoapostolico.com,2014-12-07:/2014/12/07/hande-CSRF-token-in-locust-test.html<p>Locust and Django CSRF</p>
<p>Locust and Django CSRF</p>
<p>Simple solution to handle Django
<a href="https://docs.djangoproject.com/en/dev/ref/csrf/">Cross Site Request Forgery protection</a>
into <a href="http://locust.io/">Locust</a> load tests</p>
<div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">UserBehavior</span><span class="p">(</span><span class="n">TaskSet</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">login</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">login</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/auth/login/"</span><span class="p">)</span>
<span class="n">csrftoken</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s1">'csrftoken'</span><span class="p">]</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/auth/login/"</span><span class="p">,</span>
<span class="p">{</span><span class="s2">"username"</span><span class="p">:</span> <span class="s2">"admin"</span><span class="p">,</span>
<span class="s2">"password"</span><span class="p">:</span> <span class="s2">"password"</span><span class="p">},</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">"X-CSRFToken"</span><span class="p">:</span> <span class="n">csrftoken</span><span class="p">})</span>
<span class="k">class</span> <span class="nc">WebsiteUser</span><span class="p">(</span><span class="n">HttpLocust</span><span class="p">):</span>
<span class="n">host</span> <span class="o">=</span> <span class="s1">'http://localhost:8000'</span>
<span class="n">task_set</span> <span class="o">=</span> <span class="n">UserBehavior</span>
</pre></div>