我喜欢蝗虫,但在解释结果时遇到问题。
例如我的用例是我有一个请愿网站。我预计在12小时内将有10,000人签署请愿书。
我已经编写了一个模拟用户行为的蝗虫文件:
在现实生活中,用户现在走了(因为请愿书是API而不是主要网站)。
蝗虫向我展示了类似的东西
但是,由于一个“蝗虫”只是一遍又一遍地重复执行任务,因此它并不是真正像一个用户。如果我将其设置为1个用户,那么在一段时间内,它仍然代表许多现实世界的用户;例如在1分钟内,它可能会执行5次任务:总共5位用户。
是否可以解释数据(“这意味着我们每小时可以处理N个人”),或者可以通过某种方式查看每秒或每分钟执行多少“任务”(例如,蝗虫给了我)每秒请求,但不是任务)
答案 0 :(得分:1)
在蝗虫的记录级别上确实没有任务。
如果需要,您可以记录自己的假样本,并将其用作任务计数器。不幸的是,这会增加请求率,但不会影响平均响应时间。
赞:
from locust.events import request_success
...
@task(1)
def mytask(self):
# do your normal requests
request_success.fire(request_type="task", name="completed", response_time=None, response_length=0)
答案 1 :(得分:0)
这是我在某个地方遇到问题的方式。我对此不满意,很想听听其他答案。
在我的HttpLocust
(WebsiteUser
)类上创建类变量:
WebsiteUser.successfulTasks = 0
然后在UserBehaviour
任务集中:
@task(1)
def theTaskThatIsConsideredSuccessful(self):
WebsiteUser.successfulTasks += 1
# ...do the work...
# This runs once regardless how many 'locusts'/users hatch
def setup(self):
WebsiteUser.start_time = time.time();
WebsiteUser.successfulTasks = 0
# This runs for every user when test is stopped.
# I could not find another method that did this (tried various combos)
# It doesn't matter much, you just get N copies of the result!
def on_stop(self):
took = time.time() - WebsiteUser.start_time
total = WebsiteUser.successfulTasks
avg = took/total
hr = 60*60/avg
print("{} successful\nAverage: {}s/success\n{} successful signatures per hour".format(total, avg, hr)
然后设置一个零wait_time
并运行直到它解决(或出现故障),然后使用Web UI中的停止按钮停止测试。
输出就像
188 successful
0.2738157498075607s/success
13147.527132862522 successful signatures per hour
因此,我认为这为我提供了服务器可以应付的最大可想象的吞吐量(通过更改填充的用户数量来确定,直到出现故障或平均响应时间变得无法忍受为止)。
显然,实际用户会有暂停,但是这使得测试最大值变得更加困难。
缺点