如何使用locust.io 的方法提供用户列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (86)

我需要对系统进行压力测试http://locust.io这似乎是最好的方法。但是,它看起来好像每次都被设置为使用相同的用户。我需要每个子程序作为一个不同的用户登录。我该怎么安排呢?或者,是否有另一个系统可以使用呢?

提问于
用户回答回答于

您可以创建users.py模块来保存您在测试用例中需要的用户信息,在我的示例中,它包含emailcookies.然后你可以在任务中随机调用给他们。见下文:

# locustfile.py
from locust import HttpLocust, TaskSet, task
from user_agent import *
from users import *


class UserBehaviour(TaskSet):
    def get_user(self):
        user = random.choice(users_info)
        return user

    @task(10)
    def get_siparislerim(self):
        user = self.get_user()
        user_agent = self.get_user_agent()
        r = self.client.get("/orders", headers = {"Cookie": user[1], 'User-Agent': user_agent})

class User(HttpLocust):
    task_set = UserBehaviour
    min_wait = 5000
    max_wait = 60000

用户和用户代理可以由函数调用.。通过这种方式,我们可以与许多用户和不同的用户代理一起测试分发。

# users.py

users_info = [
['performancetest.1441926507@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926506@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926501@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926499@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926494@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926493@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926492@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926491@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926490@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926489@gmail.com', 'cookies_created_by_each_user'], 
['performancetest.1441926487@gmail.com', 'cookies_created_by_each_user']] 
用户回答回答于

默认情况下,每个HttpLocust用户实例都有一个HTTP客户端,该客户端具有它的自己单独的会话...

Locust没有提供用户凭据列表或类似功能的任何功能。但是,您的负载测试脚本只是python代码,幸运的是,自己实现这一点非常简单。

下面是一个简短的例子:

# locustfile.py

from locust import HttpLocust, TaskSet, task

USER_CREDENTIALS = [
    ("user1", "password"),
    ("user2", "password"),
    ("user3", "password"),
]

class UserBehaviour(TaskSet):
    def on_start(self):
        if len(USER_CREDENTIALS) > 0:
            user, passw = USER_CREDENTIALS.pop()
            self.client.post("/login", {"username":user, "password":passw})

    @task
    def some_task(self):
        # user should be logged in here (unless the USER_CREDENTIALS ran out)
        self.client.get("/protected/resource")

class User(HttpLocust):
    task_set = UserBehaviour
    min_wait = 5000
    max_wait = 60000

上面的代码在运行Locust分布式时不能工作,因为相同的代码运行在每个从节点上,并且它们不共享任何状态。因此,您必须引入一些外部数据存储,以便从节点共享状态(例如PostgreSQL、redis、memcached或其他东西)。

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问19 回答
  • 学生

    3 粉丝476 提问13 回答
  • uncle_light

    5 粉丝518 提问12 回答
  • 最爱开车啦

    8 粉丝503 提问12 回答

扫码关注云+社区

领取腾讯云代金券