蝗虫 gevent 语法?

Locust gevent syntax?

我成功地 运行 蝗虫在同一域上的 GET 请求,包括 docker 和本地。 但是我不能让它与 websocket 一起工作。

我的locustfile.py:

import time, websocket
from locust import HttpUser, task, between, events
from websocket import create_connection
import gevent

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    @task
    def on_start(self):
       ws = create_connection('wss://REDACTED.com')
       g = gevent.spawn(self.connect)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.subscribe)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.send)
       g.get(block=True, timeout=10)       
       
    def _receive():
       while True:
          res = ws.recv()
          events.request_success.fire(
             request_type='Websocket Receive Message',
             name='test websocket message receive',
             response_time=0,
             response_length=len(res)

    gevent.spawn(_receive)

(取自https://medium.com/@rajatsaxena120/websockets-in-python-d91c7bc2fd22

我不断得到:

  File "./locustfile.py", line 27
    gevent.spawn(_receive)
    ^
SyntaxError: invalid syntax

我还注意到 docker 图像中缺少 websocket,当 py 文件不正确时容器退出时我如何添加 pip install websocket-client

谢谢!

您只是缺少了

行的结尾括号
events.request_success.fire(

这是您修复的代码:

import time, websocket
from locust import HttpUser, task, between, events
from websocket import create_connection
import gevent

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    @task
    def on_start(self):
       ws = create_connection('wss://REDACTED.com')
       g = gevent.spawn(self.connect)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.subscribe)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.send)
       g.get(block=True, timeout=10)       
       
    def _receive():
       while True:
          res = ws.recv()
          events.request_success.fire(
             request_type='Websocket Receive Message',
             name='test websocket message receive',
             response_time=0,
             response_length=len(res)
          )
    gevent.spawn(_receive)