Locustio(Python)登录

时间:2018-02-06 14:55:51

标签: python http python-requests load locust

我想在网站上进行一些负载测试。 首先,这是我的代码:

from locust import HttpLocust, TaskSet, task

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):
    post_data = {'username':'my_login', 'password':'my_pass', 'Login':'Login'}
    with self.client.post('/sign_in', post_data, catch_response=True) as response:
        if 'cookie' not in response.cookies:
            response.failure('login failed')
@task(2)
def index(self):
    self.client.get("/admin")

@task(1)
def profile(self):
    self.client.get("/profile")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

我正在运行蝗虫: locust --host = https://my_host

我总是收到405错误报告:

11 POST / sign_in:" CatchResponseError('登录失败',)"

有人可以向我解释如何确保我已登录以及如何使用蝗虫进行此操作? 我有点困惑,因为我也尝试过使用令牌等等,但仍然是一样的。

1 个答案:

答案 0 :(得分:1)

有些"愚蠢"根据API的工作方式,您可能需要尝试的事项如下:

  1. 尝试在您的终端附加一个斜杠(/),例如'/sign_in/'代替'/sign_in'
  2. 出于某种原因,我在主机变量中使用http时出错,但在使用https时它可以正常工作。您可能也想尝试一下。
  3. 如果您有端点,请确保您没有忘记端点中的版本。例如,'https://my_host/v1/sign_in/'
  4. 至于使用令牌登录,下面的代码对我来说很好:

    from locust import HttpLocust, TaskSet, task
    import json
    
    
    class UserBehavior(TaskSet):
    
        def __init__(self, parent):
           super(UserBehavior, self).__init__(parent)
    
           self.token = ""
           self.headers = {}
    
       def on_start(self):
          self.token = self.login()
    
          self.headers = {'Authorization': 'Token ' + self.token}
    
      def login(self):
          response = self.client.post("/sign_in/", data={'username':'my_login', 'password':'my_pass', 'Login':'Login'})
    
        return json.loads(response._content)['key']
    
     @task(2)
     def index(self):
         self.client.get("/admin/", headers=self.headers)
    
     @task(1)
     def profile(self):
         self.client.get("/profile/", headers=self.headers)
    
    class WebsiteUser(HttpLocust):
        task_set = UserBehavior
        min_wait = 5000
        max_wait = 9000
    

    在我调用sign_in的情况下,返回一个key,然后我将其用作我的请求的令牌。希望这有帮助,我对蝗虫也很陌生。