我正在为django应用程序编写用于负载测试的脚本,但是出现错误消息:
raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
KeyError: "name='csrftoken', domain=None, path=None"
这是我的剧本:
from locust import HttpLocust, TaskSet, task
import requests
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def login(self):
response = self.client.get("/")
csrftoken = response.cookies['csrftoken']
self.client.post('/check_login/',{'username': '####', 'password': '########'},headers={'X-CSRFToken': csrftoken})
@task(2)
def index(self):
self.client.get("/")
@task(1)
def profile(self):
self.client.get("/home")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
在命令行中,我给此命令启动蝗虫:locust --host=http://localhost:8080
有关如何纠正此错误的任何建议?
答案 0 :(得分:0)
我遇到了同样的问题。
我有Django 1.11实例,而csrftoken的名称是其他名称,
csrftoken = response.cookies['csrftoken_myproject']
例如,我已经用devtools中的Chromium browser搜索了csrftoken名称。
答案 1 :(得分:0)
要满足此要求,有两个要求:
代码如下:
self.client.post(
'/check_login/',
{
'username': '####',
'password': '########',
'csrfmiddlewaretoken': csrftoken
},
headers={
'X-CSRFToken': csrftoken,
'Referer': self.parent.host + '/check_login/'
})
答案 2 :(得分:0)
def on_start(self):
self.login()
def login(self):
# login to the application
self.client.auth = HTTPBasicAuth('username', 'password')
这足以登录。无需在 python 中更新 csrftoken。 3.6.8