我正在尝试对安装在带有 ubuntu 服务器的 VM 中的容器中的一个 mysql 服务器进行负载测试。为此,我在 python 中编写了以下脚本:
...
# Cria bot de teste
class MyUser(HttpUser):
wait_time = between(1, 5)
@task(1)
def get_price(self):
try:
# Estabelece conexão com o banco de dados MySQL
with connect(
host="192.168.0.9",
user="root",
password="123",
database="test1",
port=3306
) as connection:
with connection.cursor() as cursor:
# Executa uma query que busca o preço do produto
cursor.execute("SELECT preco FROM estoque WHERE id_codigo_barras = %s", ("3756392598566",))
result = cursor.fetchone()
price = result[0]
# Imprime o preço do produto retornado pelo banco de dados
print("Preço do produto: {}".format(price))
except Error as e:
print(e)
当我使用以下命令时,界面开始工作:
> locust -f advanced/tools/direct_locust_loadtest.py --host=http://localhost:8080
在我设置为图片的界面中:
但是 0 rps 保持在 0,即使提示正在生成响应。
我已经试过了:
我尝试了 chatgpt 的所有建议,它甚至建议来这里寻求帮助。谁能给个提示?
非常感谢!!!
Locust 只有在您告诉它时才知道您在做什么。您可以使用 Event Hooks 告诉 Locust 您的代码中发生了什么。如果您使用 Locust 的
HttpUser
然后使用 self.client
进行 http 调用,通常会自动为您触发适当的事件,除非您想覆盖默认事件,否则您的工作量会减少。
在您的情况下,即使您使用的是
HttpUser
,您也没有使用 self.client
进行 http 调用,因此 Locust 不会为您触发事件(顺便说一句,您可以只使用 User
代替)并且您必须自己触发事件,例如:
self.environment.events.request.fire(
request_type="MySQL",
name="execute id_codigo_barras",
response_time=(time.perf_counter() - start_perf_counter) * 1000,
response_length=response_length,
response=response,
context=None,
exception=exception,
)
事件中的所有参数都是可定制的。输入适合您需要的任何字符串或其他数据,Locust 将按原样报告。有关更多示例,请参见Locust 文档。