python - 需要一种将变量从 User 类传递到 Locust 中的 TaskSet 的方法
问题描述
我是 locust 的新手,我正在尝试编写负载测试。我的 Locust 用户的目的是通过调用 createItem API 创建一个项目。在这种情况下,每个请求中的 item_id 应该是唯一的,因为它具有唯一的标准。
这就是我所做的。
import json
from random import randint
from locust import HttpUser, constant, SequentialTaskSet, task
from flow.helper import read_json
class WebsiteUser(HttpUser):
"""
User class that does requests to the locust web server running on localhost
"""
host = "http://localhost:8080/api/"
wait_time = constant(3)
@task
class SequenceOfTasks(SequentialTaskSet):
item_id = randint(100, 9999)
@task
def create_item(self):
request = read_json('resources/create_item.json')
request['item-id'] = self.item_id
response = self.client.post('createItem', json.dumps(request),
headers={'Content-Type': 'application/json'})
assert response.status_code == 200
第一个请求是成功的,它成功地创建了一个条目。但是后来的所有请求都失败了,在应用程序服务器的日志中,我可以看到它正在尝试创建具有相同 item_id 的项目。有什么方法可以在 WebsiteUser 类中动态生成一个值并将其传递给 SequenceOfTasks?
解决方案
不是这个问题的确切答案,但我通过改变方法内部的随机逻辑使这段代码正常工作而没有冲突的 item_ids。就像是:-
@task
class SequenceOfTasks(SequentialTaskSet):
self.item_id = None
@task
def create_item(self):
request = read_json('resources/create_item.json')
self.item_id = randint(100, 9999)
request['item-id'] = self.item_id
...
推荐阅读
- javascript - Odoo v12 javascript双rpc调用问题
- java - 为什么不能设置“自定义”类的属性(在java(7)中)?
- java - Spring REST API 在响应中添加额外的键值对
- json - 调用模板返回“提供的元素名称是零长度字符串”
- python - 无法使用 python 启动 selenium 会话
- python - Python memory_profiler:@profile 不适用于多线程
- django - Mpesa 对象没有属性“更新”
- node.js - 使用 socket.io 将服务器代码转换为 ES6
- javascript - 在 Laravel 中将 JS 添加到 app.js 时未捕获的 ReferenceError
- python - SQLAlchemy 过滤使用 where 仅适用于一列