Flask获取csrf_token用于Locust负载测试

时间:2017-03-17 19:03:29

标签: python flask locust

我想用我的远程服务器实现用locust加载测试,但我不想禁用csrf功能,我怎样才能获得csrf_token或通过它

class UserBehavior(TaskSet):
    @task(1)
    def login(self):
        self.client.get("/securities/login") 
        token = "how to get it" 
        self.client.post("/securities/login",{"username":"test", 
                                              "password":"123",
                                              "csrf_token":token})

3 个答案:

答案 0 :(得分:0)

  result = self.client.get("/securities/login") 
  token = result.cookies['_csrf_token'] # i think this is the name anyway you could always print result.cookies to find out 

至少我认为......我知道这在djanjo中起作用

用烧瓶可能需要多做一些工作......请参阅这个要点https://gist.github.com/singingwolfboy/2fca1de64950d5dfed72

答案 1 :(得分:0)

如果你使用Flask_WTF,你可以像这样获得csrf token

from flask import Flask
from flask_wtf import FlaskForm
app = Flask(__name__)
app.secret_key = 'random string'

class HelloForm(FlaskForm):
    # ...

@app.route('/', methods=['GET', 'POST'])
def index():
    form = HelloForm()
    token = form.csrf_token.data

相反,您也可以自己生成令牌:

from hashlib import md5

def generate_csrf_token():
    token = md5(app.secret_key).hexdigest()
    return token

答案 2 :(得分:0)

我找到了一种找到令牌的方法

import re
class UserBehavior(TaskSet):
    @task(1)
    def login(self):
        result = self.client.get("/securities/login") 
        token = re.search(r'[0-9]{10}##[a-z0-9]{40}',result.text).group(0)
        print token

和re(RegularExpression)之外的另一种方法是使用PyQuery从html表单元素中获取令牌密钥。